Видеокурс по SwiftData
Бесплатный цикл роликов на YouTube с разбором всех особенностей работы со SwiftData:
👉CRUD операции
👉Динамические сортировки и фильтры
👉Легковесные миграции
👉Связи один ко многим и много ко многим
👉Работа с CloudKit
abegehr/testing-swiftdata-migrations-7a612da2c91c">Тестирование миграций в SwiftData
На примере семпла SwiftDataAnimals разбирается, как написать миграцию с одной версии схемы на другую и правил но ее протестировать. Результат можно посмотреть на GitHub.
Примеры Dynamic Island от Apple
Дизайнер Apple поделился подборкой анимаций в Dynamic Island, появившихся в iOS в последних релизах.
Организация онбординга с помощью паттерна Сага
Сага – паттерн, который помогает описать процессы, затрагивающие сразу много различных компонентов. Например, в условном финтехе Сагой можно представить последовательность запросов к различным сервисам: прайсингу, чекауту, проверки транзакции. Этот паттерн можно использовать и в разработке UI. В статье разбирается, как с его помощью управлять последовательностью онбординговых экранов.
Как устроен протокол iMessage
Все про устройство протокола iMessage: работа с APNs, сервис ключей и шифрование сообщений. А если захотите закопаться подробнее, в конце статьи куча ссылок на более детальный анализ.
Добавление описаний к изображениям с помощью OpenAI Vision API
Автор Mastodon-клиента Ice Cubes рассказывает, как с помощью Vision API добавил в свое приложение фичу автоматической генерации описаний публикуемых изображений.
Arc браузер, написанный на Swift, вышел на Windows
Первое большое десктопное приложение, целиком написанное на Swift, вышло на Windows. Я все еще считаю эту идею абсолютно сумасшедшей. Если хотите узнать больше деталей про разработку, вот видео. Весь наработанный тулчейн обещают заопенсорсить.
Обновлен вводный курс в SwiftUI
Apple обновили курс для тех, кто только вкатывается в SwiftUI. За четыре часа вы изучаете основы фреймворка, работу с анимациями, лэйаут сложных интерфейсов и интероп с UIKit.
Импорт макросов в проект без SwiftPM
Иногда вам может потребоваться импортировать макрос в проект в CocoaPods зависимости или напрямую. В статье разбирается, как скомпилировать макрос в бинарник и корректным образом подключить его к проекту.
Подробный гайд по SwiftData
Кажется, самый подробный гайд по SwiftData из всех, что я видел: миграции, тестирование, связка с CloudKit, transformable types и куча других аспектов работы с фреймворком.
25 бесплатных часов Xcode Cloud остаются навсегда
На старте Xcode Cloud всем участникам обещали 25 бесплатных часов в месяц на протяжении всего периода обкатки. Случилось замечательное – Apple решили продлить бесплатный доступ бессрочно.
sapsan94/an-effective-and-deterministic-way-to-track-uiview-position-on-screen-98f11a4d68c5">Как трекать позицию view в скроллящихся списках
Иногда вам нужно отслеживать позицию какой-то конкретной вьюхи в таблице. Например, чтобы отслеживать отображаемый видеоплеер, или репортить отображение рекламы или рекомендаций в аналитику. При решении задачи в лоб можно довольно сильно испортить перфоманс скролла. В статье разбираются способы отслеживания как элементов внутри скролла, так и любой вьюшки в произвольной иерархии.
Privacy манифесты для сторонних SDK
Теперь, если ваше приложение использует сторонние библиотеки, которые под капотом вызывают потенциально небезопасные для пользователя API, вам надо добавлять их в специальный манифест. Вот некоторые из таких SDK:
👉AFNetworking и Alamofire
👉Cordova
👉FBSDKLoginKit и FBSDKShareKit
👉FirebaseAuth
👉Flutter
👉Lottie
👉RxSwift
👉SDWebImage
👉SwiftyJson
Все зависимости надо держать в VCS
Автор топит за то, что под Git надо держать вообще все зависимости проекта – начиная от библиотек, заканчивая тулчейном компилятора. Склонированного репозитория должно быть достаточно, чтобы выключить интернет и собрать проект с нуля на новой машине. Плюсы такого подхода, ограничения реального мира и фантазии о том, как могла бы выглядеть оптимизированная под такой сценарий VCS будущего – в статье.
Прячем API ключи в on-demand ресурсах
Неожиданный способ использовать on-demand ресурсы – после первой установки приложения скачивать файл, в котором зашиты API ключи для работы с сервером. От анализа бинарника оно, конечно, защитит, но кто мешает посмотреть на файлы после их скачивания, непонятно.
Код можно чекнуть тут.
Выпуски Подлодки для айосеров
Подлодка семь лет назад начиналась как подкаст про iOS разработку. Спустя год от этой концепции мы отошли и начали охватывать более широкий круг тем. Но все равно, айосников среди наших слушателей по прежнему очень много. Держите подборку выпусков за 2023 год, которые могут вам зайти:
👉Цвета и цветовые пространства с Андреем Ситником про то, чем отличаются друг от друга CMYK, RGB, OKLCH и другие способы представления цветов на экранах.
👉Ruby c Дмитрием Цепелевым про язык, с которым вы периодически сталкиваетесь, работая с CocoaPods и Fastlane.
👉Мобильные фермы с Антоном Малинским про то, как управлять сотнями девайсов на уровне софта и железа.
👉Backend driven UI с Александром Казарцевым с полным обзором плюсов, минусов и сложностей перехода к нему.
👉Теория сложности с Александром Куликовым с разбором вообще всех стыдных вопросов про алгоритмы.
👉Сыр с Александром Крупецковым, потому что плох тот айосник, который не любит сыр.
👉Рендеринг текста с Никитой Прокоповым про путь, который проходит строчка от хранения в переменной до отображения на экране.
Если вам понравились эти или другие выпуски – напишите нам что-то хорошее в отзывах в Apple Podcasts, или прямо в чатике подкаста!
Typestate – новый паттерн в Swift 5.9
С появлением Noncopyable типов в Swift 5.9 стало возможным реализовать паттерн Typestate. По сути, это стейт-машина на типах, с помощью которой проверку корректности бизнес-логики можно переложить на компилятор. В статье на простом примере показывают, как этот паттерн реализовать.
Swift Evolution дайджест за декабрь
В декабре были приняты три интересных пропозала.
SE-0413: Typed throws
SE-0404: Nested Protocols in Non-Generic Contexts
SE-0409: Access-level modifiers on import declarations
Как дизайнить bounding box handles
Небольшое эссе про то, как можно накосячить в UX такой стандартной штуки, как управление границами выделенного объекта.
Зачем айосеру учить другие языки
Разработчик из Альфы рассказывает, почему ему нравится изучать языки программирования помимо Swift, и что вообще это может дать айосеру. Список причин такой:
👉Меньше выгораешь от рутины.
👉Получаешь навыки, которые могут пригодиться в будущем. Например, когда захочешь где-то поднять бэкенд.
👉Расширяешь свою картину мира, узнаешь про новые подходы.
👉Быстрее и проще решаешь повседневные задачи и выбираешь подходящие инструменты для автоматизации.
👉Обеспечиваешь себе ветку роста в фуллстека или техлида.
Кстати, мы когда-то писали офигенный выпуск Подлодки с Брагилевским как раз про то, как учить языки программирования.
Как регулируется accessibility
Обзор стандартов, законов и регулировок, которые существуют в разных странах для того, чтобы увеличивать доступность сайтов и приложений.
Google AI SDK для Swift
Google выпустили SDK, который дает удобный доступ ко всем их моделям, включая совсем свежую Gemini. SDK умеет:
👉Генерировать текст по текстовому вводу
👉Генерировать текст по мультимодальному вводу из текста и изображений
👉Работать в режиме чата
Как работает модификатор fixedSize()
В зависимости от типа вьюшки модификатор fixedSize() может как растянуть ее до границ родительской, так и сжать до какого-то небольшого размера. Под капотом там такая логика:
👉Взять пропозал по размеру от родителя
👉Выбрать размер, который идеально подходит самой вьюшке в зависимости от ее контента
Apple запустили новостную рассылку для разработчиков
Apple продолжает менять свою стратегию взаимоотношений с разработчиками и становиться более открытым. В этот раз запустили регулярную рассылку, в которую будут включать все ключевые новости, произошедшие за последнее время. В декабрьском выпуске:
👉Использование App Store Connect для работы с Game Center
👉Разбор вопросов про spatial design
👉App Store 2023 awards
👉Интервью с разработчиком Ancient Board Game Collection
Journaling Suggestion API
Вышел новый Tech Talk от Apple. В нем разбирается новый Journaling Suggestion API, с помощью которого любое приложение сможет получать саджесты от Journal app, который появится в iOS 17.
Вышли первые Mobile Interview — неформальные беседы про мобильную разработку в Яндексе
Ребята из разных команд мобильной разработки Яндекса рассказывают, какие задачи решают каждый день и почему им нравится эта работа. Первые выпуски уже можно посмотреть на YouTube-канале Yandex for Mobile:
🔸 В первом выпуске обсудили инфраструктуру Такси. Как и зачем собирать команду мобильной инфраструктуры приложения и чем ребята занимаются на ежедневной основе.
🔸 Во втором выпуске разбирались в разработке Карт. Какие задачи ребята решают, как адаптируются под сложности определения геолокации, развивается ли MapKit, как уживаются приложения Карт и Навигатора.
🔸 В третьем выпуске беседовали о разработке под iOS. Как мы делали браузер под iOS, легко ли переключаться между платформами и под какую проще разрабатывать, что нужно сделать, чтобы завоевать авторитет в большой команде, и в чём заключается специфика разработки браузеров.
🔸 В четвёртом выпуске поговорили с деврелом. Что за люди делают мероприятия для мобильных разработчиков, как организовать большую конференцию и не сойти с ума, чем ещё занимаются DevRel-команды и зачем простым разработчикам связываться с ними.
Смотрите интервью и подписывайтесь на YandexforMobile?utm_source=tg&utm_medium=social&utm_campaign=yfm&utm_content=iosgr&erid=2VtzqvQT9pv">канал — скоро там выйдет пятый выпуск Mobile Interview.
Визуализация иерархии вьюшек на SceneKit
Если вам не подходит FLEX и другие решения для того, чтобы визуализировать иерархию компонентов в дебажном меню, такую штуку вполне можно собрать самостоятельно. Ребята из Альфы делятся своим опытом борьбы с возможными проблемами.
_mkowalski/parametrizing-unit-tests-with-xctestparametrizedmacro-c44b243888b5">Макрос для параметризованных тестов
Параметризованные тесты позволяют не дублировать кучу кода и делать покрытие кода более полным. Макрос XCTestParametrizedMacro позволяет легко задавать массив входных данных, ожидаемых результатов теста и лейблов, которые поммогут идентифицировать упавший тест.
AeroSpace – оконный менеджер для macOS
Мой коллега выпустил крутейший оконный менеджер, который работает вне нативных macOS Spaces. Работает очень быстро, удобные хоткеи, поддерживает несколько мониторов.
👉Демка на YouTube
Unit тесты на Observation
Observation framework выпустили уже довольно давно, а про лучшие практики тестирования кода с ним еще никто не написал. В статье разбирается, чем отличается тестирование Combine от Observation, и какие хелперы могут помочь в тестах.