DocC туториалы по Composable Architecture
Если вы хотите вкатиться в ТСА, но смотреть кучу видеоуроков не ваш формат, то попробуйте новый интерактивный туториал на DocC, в котором разбирается создание новой фичи, работа с сайд-эффектами и покрытие всего тестами.
Как Uber трекает время старта приложения
В iOS 15 появился автоматический прогрев приложений. Иногда операционная система сама запускает процесс приложения, чтобы, если пользователь захочет его включить, ждать пришлось бы меньше. Эта фича сильно усложнила мониторинг времени старта приложения, и в статье инженеры Uber рассказывают, как перепилили свою систему мониторинга.
Если кратко – с помощью MetrikKit собираются pre-launch метрики, с помощью собственной логики – post-launch метрики. Дальше они отправляются на сервер, там склеиваются, и попадают в мониторинг.
Обзор CI в Airbnb
Команда Airbnb рассказывает, как они используют AWS, Terraform и Packer, чтобы управлять фермой из 300 Mac устройств и легко обновлять их окружение.
DeviceDiscoveryUI – системный фреймворк для соединения tvOS и iOS
Год назад Apple выпустили DeviceDiscoveryUI – фреймворк, который позволяет приложению на Apple TV обмениваться данными с iPhone, iPad и Apple Watch по локальной сети.
Статья – золото, так как официальная документация практически отсутствует, тестовые примеры не компилируются и используют не существующий API, а сам фреймворк работает не особо надежно.
Дайджест Swift Evolution за апрель-май
✅SE-0314: AsyncStream and AsyncThrowingStream
✅SE-0388: Convenience AsyncStream.makeStream methods
✅SE-0389: Attached Macros
✅SE-0391: Package Registry Publish
✅SE-0393: Value and Type Parameter Packs
✅SE-0394: Package Manager Support for Custom Macros
Squirrel – приложение, которое чинит скроллинг в симуляторе
В iOS симуляторе не работает скроллинг. Вернее работает, но он не интегрируется с колесиком мыши или трекпадом. Squirrel – приложение, которое висит в трее, следит за скроллом, и с помощью Accessibility делает нужный жест в симуляторе.
DSL на Swift
Большое количество примеров того, как на Swift можно определять свои DSL, и строить на их основе архитектуру всего приложения.
Кастомный SegmentedControl на SwiftUI
Стандартный SegmentedControl практически не кастомизируется, поэтому, если ваш дизайн отличается от стандартного, компонент придется реализовывать самому. Автор начинает с самой наивной реализации, и заканчивает гибким контролом с плавными анимациями.
Overlays в SwiftUI
Как можно использовать накладывающиеся друг на друга вьюхи для того, чтобы обеспечить структурную идентичность, и для того, чтобы реализовать кастомную анимацию навигации.
Анимация песочных часов на SwiftUI
Эффект реализован с помощью заблюренных линейных градиентов и SpriteKit частиц. Код можно посмотреть здесь.
ETTrace – новый фреймворк для профилирования приложений
Основные отличия от Time Profiler:
- Более простой интерфейс для поиска проблем в перфомансе
- Более быстрый, менее флакующий профилировщик
- Корректная символизация
- Готов к работе в CI
Несколько советов про Reachability
👉Вместо проверок на наличие соединения перед каждым запросом используйте флаг waitsForConnectivity
, благодаря которому активный запрос будет дожидаться появления сети.
👉Если вам надо ограничить приложение работой только по WiFi, настройте URLSessionConfiguration
таким образом, чтобы разрешать только определенные типы соединений.
Предсказания анонсов на WWDC’23
Bloomberg подбили все известные утечки в одном материале:
😎Reality Headset, премиальная AR/VR гарнитура
📱Новая операционка для гарнитуры, xrOS
⌚️Крупный апдейт в watchOS 10, в котором должны сильно переработать интерфейс
💻Новые макбуки, но вроде как все еще на М2
✋Никаких крупных апдейтов в iOS/macOS не ожидается, не считая возможности загружать приложения на iOS в обход официального магазина
Перевод на русский язык
Foundation на Swift
В конце прошлого года Apple заанонсили, что переписывают Foundation на Swift, параллельно разбивая его на маленькие пакеты. Спустя всего четыре месяца первое превью уже выпущено на GitHub!
Пока в библиотеке доступна только часть типов, например AttributedString, Date и Calendar. Ключевая особенность – улучшенный перфоманс. Например, Calendar показывает 20% улучшение, а форматирование дат через FormatStyle – 150%. Самое крутое, конечно, JSONEncoder/JSONDecoder, которые показывают прирост в 2-5 раз.
Следующие планы – перенести URL
, Bundle
, FileManager
, FileHandle
, Process
, SortDescriptor
, SortComparator,
а заодно – обрабатывать фичереквесты и баги от коммьюнити.
Как пропустить экран логина с помощью брейкпойнтов в Xcode
Xcode позволяет автоматически выполнять различные lldb команды при остановке на брейкпойнте. В статье разбирается как настроить брейкпойнты таким образом, чтобы автоматически заполнять логин и пароль при дебаге приложения.
Ищем инженера, который займется интеропом Kotlin и Swift
Одно из главных направлений развития Kotlin Multiplatform – хороший интероп с iOS экосистемой. Сейчас интероп Kotlin со Swift работает только через Objective-C. Мы хотим это улучшить, в том числе за счет интеропа напрямую со Swift. В команду, которая занимается этой задачей, мы ищем сильного инженера с iOS бэкграундом.
Какие основные требования у вакансии (сразу предупреждаю, что опыта разработки языков и рантаймов мы не ожидаем):
💻Сильный бэкграунд в любых нативных языках (C++/Swift/Objective-C/Rust)
🤔Базовое понимание того, как работают виртуальные машины, рантаймы и операционные системы.
Вакансия с релокацией: Нидерланды, Германия, Кипр, Сербия или Армения. Отправляйте резюме, а если будут вопросы – пишите напрямую мне (@etolstoy).
*️⃣А если вы работали в платформенных командах, занимались инфрой, сборками и CI/CD, то вот еще одна кайфовая вакансия в тему.
Дизайнерский гайд по паттернам навигации
Human Interface Guidelines не очень подробно распространяются на тему навигации. Вместо них держите супер-подробный сторонний гайд, в котором рассматриваются все часто встречающиеся способы организации структуры экранов, и детали поведения их интерфейсов.
SwiftFiddle – онлайн Swift плейграунд
SwiftFiddle – онлайн редактор Swift кода. Из интересного:
➡️Можно шарить сниппеты по ссылке.
➡️Код можно собирать любой версией компилятора, начиная со Swift 2, заканчивая последними nightly сборками.
➡️Можно использовать некоторые официальные библиотеки, например swift-collections.
Dynamic Island как индикатор прогресса чтения
Обязательно посмотрите весь тред – там еще две реализации. Эта, правда, моя любимая.
Code Scanning и Dependabot для Swift на GitHub
GitHub анонсировали расширенную поддержку Swift. Во-первых, на пулл реквестах вы будете автоматически получать уведомления о различных потенциальных дырах в безопасности. Во-вторых, Dependabot будет сообщать о том, что в ваших зависимостях найдены уязвимости.
Пока поддержка в Beta, но вы можете попробовать ее на своем опенсорсном проекте и оставить команде фидбэк.
Jenkins для iOS разработки
Подробный гайд по тому, как поднять CI сервер на Jenkins: настроить окружение, сконфигурировать джобы и написать Jenkinsfile.
Перевод на русский язык
Mojo – новый язык от Криса Латтнера
Новость не про iOS, но зато про Латтнера, человека, который раньше стоял за Swift. Так вот, на прошлой неделе он запустил новый язык Mojo, с синтаксисом, похожим на Python, и производительностью, стремящейся к С++. Основной юзкейс – обучать модели и работать с ними на сервере, используя один и тот же язык.
Фреймворк TabularData для ежедневных задач
TabularData – системный фреймворк для того, чтобы готовить данные для обучения ML моделей. Если работали с DataFrame в Python – вот это он.
В статье разбирается, как с помощью этого фреймворка можно работать с данными в ваших повседневных задачах. И самое интересное – как с его помощью реализовать красивые логи для ваших структур данных.
Как оптимизировать count запросы в Core Data
В статье приводится 12 способов писать более эффективные count запросы к данным. Для каждого из них разбирается сгенерированный в итоге SQL.
Проблемы MVx архитектур
В статье разбирается три проблемы, из-за которой типичные «слоистые» архитектуры вроде MVC, MVP и MVVM плохо ложатся на большинство приложений.
🤏Проблема остатка: не все фичи идеально раскладываются на все слои, в результате приходится иметь много бесполезного бойлерплейта.
🔎Проблема масштабирования: при расширении фичи ее код начинает сильно разбухать, так как вместо нормальной декомпозиции ее пытаются впихнуть в уже написанный юзкейс.
🤔Проблема разрывов в логике: архитектура пишется таким образом, который зависит от строгой последовательности выполнения действий в разных компонентах, в то время как механизмов, обеспечивающих эту последовательность, нет.
Любви достоин только VIPER.
Когда пользователь лучше всего конвертится во внутреннюю покупку
Феликс Краузе, бывший ментейнер Fastlane, сейчас запускает новый продукт – ContextSDK. Он предсказывает, когда лучше всего предложить пользователю совершить внутреннюю покупку, основываясь на анализе кучи факторов. Вот несколько примеров того, что может значимо влиять на конверсию:
🌟Хуже всего люди совершают покупки, когда пользуются приложением на ходу, когда телефон лежит на столе, у него остается мало заряда батареи, или когда он воспроизводит музыку.
🌟Лучше всего конвертятся те, кто лежит или сидит.
🌟Чем новее модель телефона и чем свежее версия операционной системы, тем выше конверсия в покупку.
🌟Время суток тоже влияет. В первой половине дня конверсии в целом лучше.
VK запускает Weekend Offer для мобильных разработчиков
Получите возможность присоединиться к командам VK Мессенджера, VK Видео, Почты Mail.ru и Облака Mail.ru всего за одни выходные — 20–21 мая. Разработчики требуются на направления iOS и Android.
Отправить отклик можно до 18 мая включительно.
Swift для TensorFlow все
Вторая новость про Swift чуть менее радостная. Google тихо прикрыл все работы, связанные со Swift для TensorFlow, и заархивировал проект. Из заметных достижений за время их работы:
👉В компилятор добавили поддержку differentiable programming, причем ее саппорт продолжится.
👉Запустили несколько проектов, которые продолжат поддерживаться: PythonKit для интеропа с Python, swift-jupyter для возможности использовать ноутбуки, swift-benchmark для, как ни удивительно, бенчмарков кода.
Результаты Swift Community Awards
Подборка самых высоко оцененных сообществом инструментов, сервисов, опенсорсных проектов и докладов. Загляните, может быть, пропустили интересные штуки! Вот несколько классных:
🍍TelemetryDeck – легковесная аналитика с упором на приватность собираемых данных
🍍IceCubes – очень красивый опенсорсный клиент для Мастодона
🍍Bakery – простой конструктор иконок приложений
for-case-let
Вместо того, чтобы писать if let
внутри for цикла, вы можете использовать case let
прямо при его объявлении. Уровень вложенности кода падает, да и выглядит чище.