iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT
12.4K subscribers
654 photos
64 videos
3.95K links
Самые интересные статьи, видео и новости, связанные с iOS разработкой. Не больше трёх материалов в день.

Лучшее iOS сообщество в Телеге: @iosgt

Размещение рекламы: @tanyasanovna
Download Telegram
iOSRef – подборка шпаргалок по iOS разработке

📱Особенности каждого девайса: разрешение, тип экрана, железо, доступные версии ОС
🛠Инструменты: HEX to UIColor, NSDateFormatter, Auto Layout helper
🔗Ссылки на различные гайдлайны
Compile-time проверка URL

Если вам не нравится постоянно использовать guard let для проверки валидности URL, попробуйте этот Swift Package. Он проверяет валидность URL прямо во время компиляции.
Малоизвестные возможности цветовой палитры в Xcode

- Палитру можно вызывать не только через меню инструментов, но и через цветовые литералы прямо из кода
- Можно создавать свои палитры цветов и переиспользовать их между проектами
- Цветам в палитре можно задавать названия и использовать их как литералы
- Можно прямо в Xcode сгенерировать свою цветовую палитру на основе любого изображения
Как работать с типом Measurement в Swift Charts

Foundation предоставляет удобный тип для работы с любым типом измерений – Measurement. Но по умолчанию он пока что не работает со Swift Charts. В статье рассматривается несколько вариантов, как решить эту проблему.
TableView: reload vs reconfigure

Начиная с iOS 15 в UITableView и UICollectionView появился метод reconfigure. В отличие от reload он не пересоздает ячейку с нуля, а обновляет существующую. По ссылке можно прочитать детали про алгоритм его работы.
Советы по тестированию кастомных Codable инициализаторов

- Кастомную сериализацию нужно тестировать так же, как и другую бизнес-логику
- Кастомный codable init лучше объявлять в экстеншне, чтобы не потерять memberwise init, генерируемый компилятором
- Проверочный объект создаете вручную через memberwise init, а проверяемый – на основе JSON
- Чтобы получить полезный аутпут теста о том, что конкретно отличается в объектах, попробуйте библиотеку Difference
Как включить Stage Manager в iPad симуляторе

Стандартный ответ на вопрос – внести правки в .GlobalPreferences.plist на симуляторе, что не очень удобно. Но есть вариант попроще: xcrun simctl spawn booted defaults write -g SBChamoisWindowingEnabled -bool true.
Loco – линтер для Localization.strings

Линтер умеет делать следующие проверки:
- Непереведенные строки в Swift коде
- Пропущенные ключи в каких-то из локализаций
- Ключи-дубликаты
- Неиспользуемые ключи
Подробный пост про Grids в SwiftUI

👀Сравнение разных типов контейнеров
☎️Разбор настройки Spacing, Alignment, Width/Height
✡️Реализация шестиугольных ячеек
💻Семпловый проект Grid Trainer, в котором можно поиграться самостоятельно со всеми настройками
Когда вы интегрируете рекламные SDK в приложение, готовьтесь: будет много проблем. Не всегда очевидных. Но всегда сильно раздражающих.

Ребята из FUNCORP подготовили список таких «граблей» — а заодно объяснили, как работает реклама в приложениях под капотом. Бонус: в статье есть код, который решает самые бесячие проблемы.
Читать здесь.
Лайфхак для тестирования готовности приложения к интернационализации строк

Если вы укажете 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
Пошаговая реализация анимации с melting эффектом

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

Автор сравнивает возможности SwiftUI с майрософтовским WPF, из чего делает вывод, что в SwiftUI ViewModel в большинстве случаев лишняя сущность.
Неочевидные особенности разработки Live Activity

- Для запуска Live Activity из приложения не требуется явное подтверждение пользователя
- Приложение должно находиться в foreground для старта Activity
- Чтобы Activity обновлялась, нужно либо держать приложение в бэкграунде, либо использовать пуши
- Нет способа подстроить внешний вид и цветовую палитру под обои
- Анимации почти не кастомизируются
This media is not supported in your browser
VIEW IN TELEGRAM
ReMafoX – инструмент для простой локализации текстов

- ReMafoX – GUI для уже существующей CLI утилиты BartyCrouch
- Новые строки в Localizable.strings добавляются сразу же при определении их в Swift-файле
- Автоматический перевод строк на 40 языков
- Линтинг на тот случай, если какой-то ключ все-таки не перевелся
- Упрощенная работа с pluralized – их тоже можно определять и переводить, не закрывая исходный файл кода
- Скачать текущую актуальную версию можно здесь
SQLite – структуры данных под капотом

SQLite – одна из самых простых и благодаря этому надежных баз данных. В статье подробно рассматриваются алгоритмы кодирования данных в ней, используемые структуры данных и алгоритмы поиска по ним.
Успеть за 60 секунд

У вашего приложения есть 60 секунд на то, чтобы стартовать, иначе системный watchdog его убьет. Посмотрите на интересный кейс со стектрейсом – приложение не успевает запуститься за выделенное время, потому что система не выделяет ему на это ресурсы и занимает CPU чем-то другим.
Content transition в SwiftUI

В последней версии SwiftUI появился встроенный механизм анимаций для изменений контента вьюшки. Например, текста или прозрачности TextView. Чтобы это заработало, достаточно просто использовать view modifier .contentTransition.