Как стать автором
Обновить
53.46

iOS *

Мобильная ОС компании Apple

Сначала показывать
Порог рейтинга

Смотрите WWDC 2025 вместе с Surf и участвуйте в розыгрыше 🎧

Готовы к WWDC? Подключайтесь к нашей трансляции 9 июня в 20:00 по Москве. В прямом эфире мы вместе с сёрферами разберём главные анонсы и свежие решения Apple. Ожидается много интересного: от революционных обновлений iOS 26 и macOS 26 до новинок в мире ИИ-технологий от Apple.

Присоединяйтесь к нашему обсуждению. На стриме будут Head of Flutter Surf, Евгений Сатуров, и наши опытные iOS-разработчики — Кирилл и Антон. Они поделятся своим экспертным мнением о свежих решениях Apple. Будем активно общаться в чате, делиться впечатлениями и мнениями о презентации.

А чтобы было еще интереснее смотреть, мы разыграем на трансляции AirPods 4. Все подробности об этом здесь: https://surftech.timepad.ru/event/3397366/

Подключайтесь к стримам 9 июня. Запись сохраним:

  • VK Видео: vk.cc/cMuWI5

  • YouTube: vk.cc/cMuWJL

Теги:
+1
Комментарии0

Опыт использования Claude для написания готового приложения

Ну вот и я сподобился - написал приложение полностью на Claude.

Приложение на SwiftUI, не enterprise, но достаточно сложное, из категории Favorite.

Начал на Claude Sonnet 3.7, потом вышел 4, закончил на нем.

Всего 1156 строк кода и без ошибок!

Естественно было несколько итераций. Причём практически все - это уточнение промта.

Кода он наворотил много, по мне так можно было и проще. Но он уж развернулся по полной - структуры, классы, вью, перечисления, состояния, published, state и т.д. и т.п.

Как оно там внутри вертится крутится даже не смотрел. Главное - работает и этого достаточно.

В общем, впечатлён. Не ожидал. Предполагал, что будут ошибки, заторы, что придётся с ними разбираться. Ан нет, все зашло без глюков, с первого раза.

Теги:
-3
Комментарии14

Как работать с реактивным кодом в iOS на примере Combine

Пожалуй, каждый iOS-разработчик видел в требованиях вакансий «знание фреймворков RxSwift, RxCocoa». Эти инструменты основаны на концепции реактивного программирования.

Реактивное программирование, как следует из названия, основано на реакции на событие: пользователь взаимодействует с интерфейсом и ждёт реакцию от приложения. Этот подход популярен в фронтенд-разработке, в том числе на iOS.

Мы в Surf долгое время избегали «реактивщины» в приложениях. Во-первых, это лишние зависимости. Во-вторых, подобные библиотеки несут в себе не только преимущества, но и проблемы с дебагом, сложностью поддержки кода и так далее.

Однако с выходом Combine и SwiftUI, мы решили начать внедрять реактивный подход в наши приложения. Благо, теперь не нужны сторонние решения: хватит того, что предоставляет Apple. Давайте посмотрим, как можно работать с реактивным кодом.

Главные элементы Combine, с которыми происходит работа:

1) Publisher — издатель

Протокол, указывающий, что тип может передавать последовательность значений со временем. Publisher предоставляет данные только подписчику (Subscriber) и делает это, когда данные становятся доступны. Без подписки Publisher не активен.

Publisher описывается двумя ассоциированными типами: <Output, Failure>

  • Output — тип выдаваемых значений

  • Failure — тип возможной ошибки. Если ошибок быть не может, используется Never.

2) Subscriber — подписчик

Отвечает за запрос и получение данных от издателя, а также за обработку ошибок.
Имеет типы <Input, Failure>:

  • Input — тип входных данных

  • Failure — тип ошибки

Subscriber сам инициирует запрос и управляет объёмом поступающих данных. Основные способы обработки:

  • sink(receiveCompletion:receiveValue:)Принимает два замыкания: первое вызывается при завершении (успешно или с ошибкой); второе — при получении значений.

  • assign(to:on:)Присваивает полученные значения свойству объекта по keyPath.

3) Operators — операторы

Методы, преобразующие данные и потоки. Операторы — это промежуточное звено между издателем и подписчиком. С их помощью строятся цепочки обработки, трансформации и фильтрации данных.

4) Subjects — субъекты

Особый вид Publisher. Объекты, реализующие этот протокол, могут отправлять значения подписчикам через метод .send(_).

Subjects полезны для интеграции императивного кода: позволяют вручную вставлять значения в поток.

Управление подпиской

Publisher продолжает отправку до завершения или ошибки. Если подписка больше не нужна, её можно отменить с помощью метода cancel(). Все подписчики реализуют протокол Cancellable.

Пример использования Combine с URLSession

var cancellable = Set<AnyCancellable>()

func sendURLRequest(_ urlRequest: URLRequest) {
	URLSession.shared.dataTaskPublisher(for: urlRequest) // 1
    	.map(\.data) // 2
    	.decode(type: LocationModel.self, decoder: JSONDecoder()) // 3
    	.mapError { $0.toServerError() ?? .unidentifiedError } // 4
    	.receive(on: DispatchQueue.main) // 5
    	.sink { completion in // 6
        	print("finished stream with: \(completion)")
    	} receiveValue: { value in
        	print("receive value: \(value)")
    	}
    	.store(in: &cancellable) // 7
}

Что происходит:

  1. Создание Publisher — оборачивает загрузку данных по URL.

  2. map(.data) — извлекает Data из ответа.

  3. decode — преобразует Data в модель LocationModel.

  4. mapError — конвертирует ошибку в нужный формат.

  5. receive(on:) — переключает поток на нужную очередь.

  6. sink — обрабатывает завершение и полученные данные.

  7. store(in:) — сохраняет подписку, чтобы поток не завершился сразу.

Такой подход делает код более читаемым, управляемым и реактивным.

Больше про iOS-разработку — в нашем Telegram-канале Surf Mobile Team. Кейсы, лучшие практики, новости индустрии, анонсы наших мероприятий и вакансий.

Присоединяйтесь!

Теги:
Рейтинг0
Комментарии1

Хардкодить допоздна? А может, лучше нет, ворк?

>> Регистрация и программа <<

23 апреля в 20:00 приглашаем воронежских разработчиков на неформальный митап. Для тех, кто не сможет прийти офлайн, будет трансляция.

Никаких скриншотов кода на слайдах. Никакого душного обсуждения документации. Поговорим о том, что окружает нас вне работы. Прокачаем софт-скиллы и нетворкинг.

В программе митапа три доклада:

  • Лёша, Android-разработчик Surf — «Дедлайн "вчера": как работать с приоритетами».

    Как рассеивается внимание? Как ставить приоритеты в работе с командой? Когда нужно выносить переписку в звонок, а когда можно обойтись текстом? Ответим на эти и многие другие вопросы про приоритеты в работе и жизни.

  • Дима, Flutter-разработчик Surf — «Тимлид — друг или враг? Или так»?

    Расскажу о роли тимлида, но со стороны нижестоящего сотрудника. Что мне нравится/что не нравится в лиде, что для меня кажется полезным, а смысл чего я не понимаю.

  • Кирилл, iOS-разработчик, наш друг и гость из Una Financial — «Work-life health для IT-шника среднего возраста».

    Поделюсь жизненными проблемами разработчиков и способами их решения. Внимательный слушатель вообще сможет их избежать! Обсудим, как сделать жизнь лучше, повысить её качество. Максимально продлим трудоспособный возраст.

Митап пройдет 23 апреля, в 20:00, в воронежском пространстве «Eventuki»: ул. Фридриха Энгельса, 52.

Участие в митапе бесплатное, чтобы прийти или получить ссылку на трансляцию, нужно зарегистрироваться 👈

Запись трансляции обязательно сохраним, но если вы из Воронежа, мы очень ждём понетворкать вживую. До встречи 😉

Теги:
Рейтинг0
Комментарии0

Как сократить JSON на 74% при 100 элементах?

Важное преимущество SDUI — возможность внедрять изменения без выпуска новых версий приложений. Но это же преимущество есть его недостаток, ведь передача всех данных по сети зависит от качества соединения и увеличивает объём данных. 

Качество связи мы не можем контролировать, а вот уменьшить количество передаваемой информации посредством сокращения JSON, — вполне.

Нам нужна функция, которая могла бы вынести и переиспользовать общую логику. В нашем SDUI уже существует концепция «функций», и их разнообразные реализации, но ни одна из них не умела сокращать JSON, поэтому нужна была новая.

Функция должна брать общую часть и заменять в ней только те части, которые отличаются от элемента к элементу, оставляя остальное неизменным. Подобный подход давно применяется в виде шаблонизации, что и было необходимо реализовать. Идея в том, чтобы взять шаблон и подставлять в него различные значения. В нашем SDUI мы уже умели подставлять значения из других мест, и для этого у нас есть собственный синтаксис.

Детали реализации шаблонизации в статье.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Kotlin Multiplatform на практике: как работать с технологией (видео-туториал)

Выпустили серию видео о базовых аспектах работы с Kotlin Multiplatform, технологией для мультиплатформенной разработки (iOS, Android, Web, Desktop).

KMP позволяет использовать общую кодовую базу для нескольких платформ. Причём мы можем гибко регулировать, какую часть кода делаем общей (например, оставляем нативный UI-слой, а бизнес-логику делаем общей).

Рассказали, как и для чего применять технологию на практике, и как к ней подступиться.

Уже доступны все шесть выпусков туториала:

1. Что из себя представляет технология KMP?

2. Настройка окружения

3. Структура проекта

4. Верстка на SwiftUI

5. Верстка на Compose

6. Сетевой слой

Посмотреть туториал можно здесь:

К каждому выпуску приложен документ с пояснением некоторых терминов и полезными ссылками (см. в описании видео), которые пригодятся при ознакомлении с материалом.

Теги:
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Ну что, народ, что называется "тащусь" от новой сегодняшней версии ChatGPT CodeCopilot.

Там теперь появились три окна. Слева знакомый чат, в центре код, причём теперь уже с возможностью редактировать прямо здесь. А справа ещё менюшка с несколькими опциями. Там и комментарии, и логи, и борьба с багами и др. В целом, стало даже немного похоже на Xcode.

Мне же особенно понравилась опция Code Review. Это круто! Типа он проходит по коду и даёт рекомендации.

For example:

I've reviewed the code and suggested improvements for logical consistency, potential crash prevention, layout calculations, and readability. Let me know if you need further refinements! 🚀

Даже не знаю, как это назвать. Реально круто!

Теги:
Всего голосов 8: ↑4 и ↓4+2
Комментарии1

Будильник на iPhone с новыми версиями iOS продолжает тормозить. Пользователи жалуются, что мелодия играет с задержкой в несколько часов или не играет вообще. Apple знает о проблеме, но уже год не может её исправить. Временное решение: «Настройки» — «Face ID и код-пароль» — отключите «Распознавание внимания».

Теги:
Рейтинг0
Комментарии0

Всем доброго дня. Представьте, что есть система, которая автоматически генерирует технические спецификации и документацию для разработчиков на основе описания проекта.

Фичи:

Генерация структурированных документов в Markdown/PDF

Интеграция c Jira/Confluence

Возможность автоматической генерации диаграмм (ERD, Sequence)

Полезно ли это/пользовались бы сами?

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии2

В тестовой версии запущена новая соцсеть под названием twocents, где вместо никнейма и количества подписчиков в беседе из информации о пользователе отображается только баланс его банковского счета пользователя. Доступ к мобильной версии проекта для пользователей iPhone можно получить после отправки своей электронной почты и ожидания ответа от разработчиков.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

VK (видео)

📦 API for Any(thing) 2

☝️Возможно ли создать интерфейс для получения любого объекта одинаковым способом? 

Библиотека работает на продакшене в приложениях:
Энергия
NFC Tool
КубГТУ

Во второй части доклада практическая реализация 💡

Хабр
Medium
GitHub

El-Machine.com Apps 🤖

Теория:
Часть 1

Теги:
Рейтинг0
Комментарии0

iOS vs Android: большая битва платформ. Что лучше для разработчика, бизнеса и простого пользователя

В извечном вопросе о «лучшей мобильной платформе» попробовали разобраться вместе с инженерами Сравни: Android-разработчиком Русланом Кадыровым и iOS-разработчиком Константином Китаевым.

Обсудили, как платформы различаются в плане технологий и пользовательского опыта, под какую из них проще разрабатывать и может ли «многообразие Android» успешно конкурировать с «магией Apple».

Также в выпуске:

  • Состояние мобильной разработки — есть ли кризис?

  • Развитие разработчиков для iOS и Android: полезные материалы и практики

  • Превосходство Android Studio над XСode?

  • Когда наступит кроссплатформенное будущее?

Посмотреть или послушать Sravni Podcast можно здесь:

YouTube
RUTUBE
VK
Яндекс Музыка

Оперативно узнавать о наших новых подкастах, докладах, лекциях и других полезных ИТ-материалах можно в тг-канале Sravni Tech.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

YouTube (видео)

📦 API for Any(thing) 

☝️Возможно ли создать интерфейс для получения любого объекта одинаковым способом? 

Продолжаю развивать свою идею архитектуры для 100% инкасуляции, разбития на модули и тестирования всего слоя Model

Хабр
Medium
GitHub

Первая часть доклада теоретическая. В поисках API для любого (Any) объекта

Во второй части доклада практическая реализация 💡

Поделитесь мыслями:
Что думаете про декларативны подход? Описываю результат и получаю нужный объект

Часть 2

Теги:
Рейтинг0
Комментарии0

Ближайшие события

Когда никто не хочет выступать

Самый сложный вопрос для организаторов мероприятий — где найти выступающих и интересные доклады.

В далёком 2019-м на конференции Apple WWDC показали сотню видео про новинки iOS-разработки, каждое по 40-50 минут. За 2 недели я посмотрел лишь пару. С такой скоростью на все ушла бы вечность. 

Когда я рассказал коллеге суть увиденного, мне пришла идея, что можно распределить темы между всеми айосерами. Я так и сделал. За час мы проходили 3-4 темы, это было весело и легко. Мы ещё полгода проводили такие техтолки. 

У нас заговорили разработчики, которые раньше стеснялись. Всё просто: тебе нужно посмотреть демонстрацию фичи и пересказать её. Это была первая ступенька к большим выступлениям многих ребят. 

Атмосфера была максимально ламповой. Мы закупались бутылочками Колы и пиццей, приглушали свет, слушали доклады и обсуждали, как можем внедрить новинки в наше приложение. Те, кто не мог прийти, подключались по Зуму. Тогда это не было мейнстримом, мы ставили Mac в первом ряду, чтобы показать выступающего и слайды.

Безусловно, техтолку предшествовали анонсы в чатах, а я в личках узнавал о планах и выбирал удобное всем время. Тогда я понял, что никакие объявления не заменят личного общения. 

Отвечаю на вопрос, где найти выступающих: всё просто, они среди нас. Нужен всего лишь наблюдательный организатор, который убедит вас, что вы правда интересны.

Что с нашими техтолками сейчас — читайте в статье. И делитесь, как вы сами начали выступать или как находите спикеров.

Теги:
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

Лидерство в коде: технологии, сообщества и корпоративная среда

Привет! Это подкаст «Айтидо» от команды мобильной разработки Альфа-Банка 🎙

Айтидо – путь мобильных технологий. В этом подкасте мастера разработки делятся опытом создания приложений, раскрывая искусство объединения бизнеса, команды и инноваций. Каждый выпуск – это частичка того пути айтидо, который мы выбрали.

В первом выпуске подкаста мы поговорили с Никитой Збитневым, техлидом мобильной разработки

Поговорили о его пути в мобильную разработку через Java, как внедряются новые технологии в финтехе и почему многие переходят из корпораций в стартапы. Никита поделился лайфхаками о том, как он остается на одной волне с командой, развивает сообщество и успевает играть в D&D 🐉

🔗 RuTubehttps://alfa.me/bYzuxc

🔗 YouTubehttps://alfa.me/brD4Lx

🔗 ВКонтактеhttps://alfa.me/66Z_dt

Подписывайтесь на telegram-канал Alfa Digital, там много интересного о нашей корпоративной культуре и технологиях.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии1

Как настроить кастомные горячие клавиши на macOS

Привет, на связи Сергей, iOS‑разработчик из Clevertec. Я подсчитал, что использование шорткатов экономит мне около 10% рабочего времени. Но это с учетом того, что использую и стандартные, и кастомные комбинации. Как создать собственные шорткаты и лучше расположить их? Сохраняйте, чтобы не потерять.

Общепринятые горячие клавиши не трогаем, о них все уже рассказано

Нам нужен гиперключ. Он объединяет стандартные модификаторы ⌃ + ⌥ + ⌘ + ⇧. Эту комбинацию без боли невозможно зажать пальцами, поэтому приложения не используют её для встроенных шорткатов. Значит, есть слой для пользовательских шорткатов, который можно использовать, не беспокоясь о столкновениях. Комбинацию можно переназначить на одну клавишу. Чаще всего это Caps Lock.

MacOS не дает переопределять клавиши стандартными средствами. Нам поможет сторонний софт. Я переназначил Caps Lock с помощью Karabiner Elements, а затем настроил некоторые рабочие процессы в BetterTouchTool. Дальше создал удобные для себя комбинации и сейчас запускаю приложения с помощью гиперключа.

Вот мой список:

  • Caps Lock + J — Safari

  • Caps Lock + K — xCode

  • Caps Lock + L — Zoom

  • Caps Lock +; — Slack

  • Caps Lock + M — Скриншот области

А какими шорткатами пользуетесь вы? Поделитесь любимыми, это может кому‑то пригодится.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии5

Каналы по Android и iOS разработке

Много авторского контента и новостных каналов для Android/iOS-разработчиков находится в tg

Но очень плохая система рекомендаций, поэтому многие о них просто не знают

Собрал тут кажется самую большую коллекцию (ссылки ведут на telegram-папки):

🌸 Android — авторские блоги об Android

🌸 iOS — авторские блоги об iOS

🌸 Компании — bigtech-компании и организации

🌸 Подборки/новости/библиотеки

Список будет пополняться, поддерживаю его актуальным тут - t.me/dolgo_polo_dev/135

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Apple вернула приложение «Авито» в App Store. «Все на месте. Рады, что удалось быстро решить вопрос. Спасибо всем, кто помогал и сопереживал», — пояснили в «Авито».

23 июля Apple удалила мобильное приложение «Авито» из российского AppStore. Разработчики приложения пояснили, что их приложение действительно стало недоступно для скачивания в AppStore и исчезло из магазина приложений без уведомления от Apple.

В «Авито» начали оперативно выяснять причину удаления приложения.

«Друзья, к сожалению, наше приложение в настоящий момент стало недоступно для скачивания в AppStore. Причины выясняем. Рекомендуем не удалять установленное приложение и отключить функцию «Сгружать неиспользуемые приложения». Детали дадим сразу, как будет больше понимания.

Те, у кого приложение не установлено, могут использовать мобильную версию сайта», говорится в сообщении сервиса.

Приложение «Авито» также доступно в Google Play и RuStore для пользователей Android.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии2

Появилось новое приложение NotchNook для Mac, которое превращает вырез на MacBook Air или MacBook Pro в Dynamic Island. «Nook» предлагает базовые элементы управления мультимедиа, которые напоминают Live Activity в iOS и другие настраиваемые виджеты. 

Вкладка «Tray» позволяет переместить файлы или приложения. 

Доступ к «Nook» можно получить по клику или проведя пальцем вниз по трекпаду, когда курсор мыши находится сверху. Также можно настроить его на автоматическое опускание при наведении курсора мыши.

NotchNook работает на компьютерах Mac с вырезами и без них. В приложении скоро появятся возможность архивировать или разархивировать файлы, перетаскивая их в приложение. 

Пока оно поддерживает только некоторые мультимедийные сервисы, такие как Apple Music.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

В «Родительском контроле» на iOS появилась функция, которая следит, чтобы пользователь не держал iPhone/iPad впритык к лицу и не вредил своим глазам. Для работы опции необходима поддержка лидара.

Теги:
Всего голосов 4: ↑3 и ↓1+6
Комментарии2