Live Activity доступны в Beta
В beta 4 версии iOS 16 подвезли Live Activities – виджеты, которые отображаются на Lock-скрине, и отображают информацию из вашего приложения в реальном времени. Для их разработки можно использовать новый фреймворк ActivityKit.
Важно – Live Activities не попадут в стабильный релиз iOS 16, а докатятся в одном из следующих обновлений.
В beta 4 версии iOS 16 подвезли Live Activities – виджеты, которые отображаются на Lock-скрине, и отображают информацию из вашего приложения в реальном времени. Для их разработки можно использовать новый фреймворк ActivityKit.
Важно – Live Activities не попадут в стабильный релиз iOS 16, а докатятся в одном из следующих обновлений.
Релиз библиотеки Get 1.0
Get – аналог Alamofire, написанный с использованием async/await. Основные преимущества – в библиотеке сильно меньше кода, и есть много классных интеграций с инструментами вроде Pulse и CreateAPI.
Get – аналог Alamofire, написанный с использованием async/await. Основные преимущества – в библиотеке сильно меньше кода, и есть много классных интеграций с инструментами вроде Pulse и CreateAPI.
Расширение функциональности UIViewController через паттерн Pluginable
На многих экранах требуется реализовывать одинаковую логику – обрабатывать клавиатуру, показывать ошибки, делать всякие штуки, связанные с жизненным циклом контроллера. В статье рассказывается, как завести базовый контроллер, который даст возможность расширения функциональности своих дочерних классов на основе плагинов.
На многих экранах требуется реализовывать одинаковую логику – обрабатывать клавиатуру, показывать ошибки, делать всякие штуки, связанные с жизненным циклом контроллера. В статье рассказывается, как завести базовый контроллер, который даст возможность расширения функциональности своих дочерних классов на основе плагинов.
Открытый воркшоп по Swift Charts
Я уже публиковал десяток статей про то, как работать со Swift Charts. Но самый лучший способ научиться чему-то – сходить на воркшоп эксперта с релевантным опытом, а затем повторить все задания самому. Подключайтесь 4 августа в 20:00 на вебинар Антона Марунько, и вкатитесь в красивые графики!
Вебинар является частью онлайн-курса «iOS Developer» от OTUS.
Я уже публиковал десяток статей про то, как работать со Swift Charts. Но самый лучший способ научиться чему-то – сходить на воркшоп эксперта с релевантным опытом, а затем повторить все задания самому. Подключайтесь 4 августа в 20:00 на вебинар Антона Марунько, и вкатитесь в красивые графики!
Вебинар является частью онлайн-курса «iOS Developer» от OTUS.
iOSRef – подборка шпаргалок по iOS разработке
📱Особенности каждого девайса: разрешение, тип экрана, железо, доступные версии ОС
🛠Инструменты: HEX to UIColor, NSDateFormatter, Auto Layout helper
🔗Ссылки на различные гайдлайны
📱Особенности каждого девайса: разрешение, тип экрана, железо, доступные версии ОС
🛠Инструменты: HEX to UIColor, NSDateFormatter, Auto Layout helper
🔗Ссылки на различные гайдлайны
Iosref
iOS Ref
Quick reference tables, tools, and links for iOS developers. iOS Ref has iOS compatibility tables, a beautiful Swift cheatsheet, a hex code to UIColor converter, device screen resolution tables, and more.
Compile-time проверка URL
Если вам не нравится постоянно использовать
Если вам не нравится постоянно использовать
guard let
для проверки валидности URL, попробуйте этот Swift Package. Он проверяет валидность URL прямо во время компиляции.GitHub
GitHub - jhonatn/SwiftSafeURL: [DEPRECATED by Swift Macros and Xcode 15] Compile-time-checked URLs
[DEPRECATED by Swift Macros and Xcode 15] Compile-time-checked URLs - jhonatn/SwiftSafeURL
Малоизвестные возможности цветовой палитры в Xcode
- Палитру можно вызывать не только через меню инструментов, но и через цветовые литералы прямо из кода
- Можно создавать свои палитры цветов и переиспользовать их между проектами
- Цветам в палитре можно задавать названия и использовать их как литералы
- Можно прямо в Xcode сгенерировать свою цветовую палитру на основе любого изображения
- Палитру можно вызывать не только через меню инструментов, но и через цветовые литералы прямо из кода
- Можно создавать свои палитры цветов и переиспользовать их между проектами
- Цветам в палитре можно задавать названия и использовать их как литералы
- Можно прямо в Xcode сгенерировать свою цветовую палитру на основе любого изображения
Как работать с типом Measurement в Swift Charts
Foundation предоставляет удобный тип для работы с любым типом измерений – Measurement. Но по умолчанию он пока что не работает со Swift Charts. В статье рассматривается несколько вариантов, как решить эту проблему.
Foundation предоставляет удобный тип для работы с любым типом измерений – Measurement. Но по умолчанию он пока что не работает со Swift Charts. В статье рассматривается несколько вариантов, как решить эту проблему.
TableView: reload vs reconfigure
Начиная с iOS 15 в UITableView и UICollectionView появился метод reconfigure. В отличие от reload он не пересоздает ячейку с нуля, а обновляет существующую. По ссылке можно прочитать детали про алгоритм его работы.
Начиная с iOS 15 в UITableView и UICollectionView появился метод reconfigure. В отличие от reload он не пересоздает ячейку с нуля, а обновляет существующую. По ссылке можно прочитать детали про алгоритм его работы.
Twitter
iOS 15 introduces a new way for you to conveniently update content displayed in existing cells in UICollectionView and UITableView: reconfigure.
When and why should you use reconfigure? How is it different from reloading an item or row?
Let’s dive in with…
When and why should you use reconfigure? How is it different from reloading an item or row?
Let’s dive in with…
Советы по тестированию кастомных Codable инициализаторов
- Кастомную сериализацию нужно тестировать так же, как и другую бизнес-логику
- Кастомный codable init лучше объявлять в экстеншне, чтобы не потерять memberwise init, генерируемый компилятором
- Проверочный объект создаете вручную через memberwise init, а проверяемый – на основе JSON
- Чтобы получить полезный аутпут теста о том, что конкретно отличается в объектах, попробуйте библиотеку Difference
- Кастомную сериализацию нужно тестировать так же, как и другую бизнес-логику
- Кастомный codable init лучше объявлять в экстеншне, чтобы не потерять memberwise init, генерируемый компилятором
- Проверочный объект создаете вручную через memberwise init, а проверяемый – на основе JSON
- Чтобы получить полезный аутпут теста о том, что конкретно отличается в объектах, попробуйте библиотеку Difference
Как включить Stage Manager в iPad симуляторе
Стандартный ответ на вопрос – внести правки в .GlobalPreferences.plist на симуляторе, что не очень удобно. Но есть вариант попроще:
Стандартный ответ на вопрос – внести правки в .GlobalPreferences.plist на симуляторе, что не очень удобно. Но есть вариант попроще:
xcrun simctl spawn booted defaults write -g SBChamoisWindowingEnabled -bool true.
Loco – линтер для Localization.strings
Линтер умеет делать следующие проверки:
- Непереведенные строки в Swift коде
- Пропущенные ключи в каких-то из локализаций
- Ключи-дубликаты
- Неиспользуемые ключи
Линтер умеет делать следующие проверки:
- Непереведенные строки в Swift коде
- Пропущенные ключи в каких-то из локализаций
- Ключи-дубликаты
- Неиспользуемые ключи
Подробный пост про Grids в SwiftUI
👀Сравнение разных типов контейнеров
☎️Разбор настройки Spacing, Alignment, Width/Height
✡️Реализация шестиугольных ячеек
💻Семпловый проект Grid Trainer, в котором можно поиграться самостоятельно со всеми настройками
👀Сравнение разных типов контейнеров
☎️Разбор настройки Spacing, Alignment, Width/Height
✡️Реализация шестиугольных ячеек
💻Семпловый проект Grid Trainer, в котором можно поиграться самостоятельно со всеми настройками
Когда вы интегрируете рекламные SDK в приложение, готовьтесь: будет много проблем. Не всегда очевидных. Но всегда сильно раздражающих.
Ребята из FUNCORP подготовили список таких «граблей» — а заодно объяснили, как работает реклама в приложениях под капотом. Бонус: в статье есть код, который решает самые бесячие проблемы.
Читать здесь.
Ребята из FUNCORP подготовили список таких «граблей» — а заодно объяснили, как работает реклама в приложениях под капотом. Бонус: в статье есть код, который решает самые бесячие проблемы.
Читать здесь.
Лайфхак для тестирования готовности приложения к интернационализации строк
Если вы укажете
Есть еще несколько способов включить этот режим:
- Scheme Editor -> Application Language -> Double Length Pseudolanguage
- Interface Builder -> Preview Assistant Editor -> Double Length
Если вы укажете
NSDoubleLocalizedStrings
в качестве Launch Argument, все строки в приложении автоматически продублируются. Благодаря этому можно посмотреть, как приложение справляется с более длинными строками.Есть еще несколько способов включить этот режим:
- Scheme Editor -> Application Language -> Double Length Pseudolanguage
- Interface Builder -> Preview Assistant Editor -> Double Length
This media is not supported in your browser
VIEW IN TELEGRAM
Туториал по реализации клона Apple Calculator на SwiftUI
- Разбор того, как правильно декомпозировать калькулятор на View слое
- Поэтапная реализация всех компонентов калькулятора
- Исходники на GitHub
- Разбор того, как правильно декомпозировать калькулятор на View слое
- Поэтапная реализация всех компонентов калькулятора
- Исходники на GitHub
Пошаговая реализация анимации с melting эффектом
Разбор сложных анимаций – это всегда интересно. В этой статье рассказывается, как сделать анимацию перехода между экранами с «плавящим» эффектом.
Разбор сложных анимаций – это всегда интересно. В этой статье рассказывается, как сделать анимацию перехода между экранами с «плавящим» эффектом.
SwiftUI не нужен MVVM
Автор сравнивает возможности SwiftUI с майрософтовским WPF, из чего делает вывод, что в SwiftUI ViewModel в большинстве случаев лишняя сущность.
Автор сравнивает возможности SwiftUI с майрософтовским WPF, из чего делает вывод, что в SwiftUI ViewModel в большинстве случаев лишняя сущность.
Неочевидные особенности разработки Live Activity
- Для запуска Live Activity из приложения не требуется явное подтверждение пользователя
- Приложение должно находиться в foreground для старта Activity
- Чтобы Activity обновлялась, нужно либо держать приложение в бэкграунде, либо использовать пуши
- Нет способа подстроить внешний вид и цветовую палитру под обои
- Анимации почти не кастомизируются
- Для запуска Live Activity из приложения не требуется явное подтверждение пользователя
- Приложение должно находиться в foreground для старта Activity
- Чтобы Activity обновлялась, нужно либо держать приложение в бэкграунде, либо использовать пуши
- Нет способа подстроить внешний вид и цветовую палитру под обои
- Анимации почти не кастомизируются