iOS Broadcast
3.4K subscribers
1.74K photos
85 videos
989 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
Как не надо создавать StateObject

Статья посвящена ошибке при использовании @StateObject. Проблема возникает из-за сохранения промежуточного результата в локальной переменной, @autoclosure важен для предотвращения создания новой ViewModel каждый раз при обновлении View
🟢Если не передать полный код инициализации, оболочка StateObject не сможет управлять созданием ViewModel
🟢В результате, каждый раз при выполнении инициализатора View будет создаваться новая ViewModel, которая никогда не будет использоваться
🟢Это может привести к лишнему созданию экземпляров ViewModel и плавающим ошибкам
🟢Важно передавать полный код инициализации при создании StateObject
Please open Telegram to view this post
VIEW IN TELEGRAM
👌4👍2
Депрекейты в iOS 18
Сегодня состоялся резиз iOS 18, а значит пора взглянуть, чего же мы лишились с этим релизом:
🔘Депрекейты в API в StoreKit. Важно обратить внимание на устаревшие API, если приложение использует покупки внутри приложения. Необходимо перейти на StoreKit 2
🔘Изменения в UIKit. UIImage(named:) теперь возвращает nil вместо неопределенного изображения.
🔘Качество съемки в Vision Framework. Качество захвата лица изменилось с faceCaptureQuality на captureQuality.score. Устаревший API FaceObservation остается доступным, но новые версии API VisionRequest и VisionObservation могут скоро стать устаревшими.
🔘Порядок расположения объектов в RealityKit Порядок расположения дочерних объектов может измениться неожиданно. Разработчики не полагаются на порядок расположения объектов, поэтому изменения не являются критическими.
🔘Устаревание расширений для Today Widgets. Расширения для просмотра Legacy Today устарели, и разработчики должны были отказаться от них 4 года назад 😥
В целом, ничего интересного, кроме более корректного поведения UIImage(named:)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Все что нужно знать о дисплеях текущей линейки iPhone
🟣Из-за увеличения размеров Pro линейки, теперь у 16 iPhone 4 размера экрана
🟣У iPhone 16 Pro рамки дисплея еще тоньше, размер увеличился с 6.1" до 6.3"
🟣У iPhone 16 Pro Max размер увеличился с 6.7" до 6.9"
🟣Scale factor остался тот же - 3x
🟣Для AppStoreConnect теперь достаточно выгружать один размер скриншота 6.9" или 6.5"
🟣Дизайн Dynamic island не изменился, так что размер Safe Area в портретном режиме остался прежним
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2
Анонсируем Swift 6

Поздравляю всех iOS разработчиков с релизом Swift 6! Мы планомерно разбирали все нововведения в деталях, но стоит еще раз их перечислить:
🟢Новый подход к многопоточности, новый Swift будет избавлять нас от состояния гонки
🟢Typed throws, теперь можно указывать тип выбрасываемой ошибки
🟢Swift Testing - новый продвинутый фреймворк для тестирования
🟢Модель "владения" через некопируемые типы и ~Copyable
🟢Интероп с C++ напрямую из Swift
🟢Новая модель компиляции подмножества языка для встроенных систем
🟢Улучшения производительности и стабильности
🟢Поддержка 128-битных целых чисел
🟢Улучшенная отладка с помощью @debugDescription
🟢Улучшенная производительность при запуске с explicit модулями
🟢Foundation типы JSONDecoder, URL, Calendar, FileManager, ProcessInfo, и многие другие, наконец, переписаны на Swift. Теперь это часть языка а не Apple экосистемы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍1
Потокобезопасность с мьютексами в Swift 6

А еще нам теперь "доступен" новый фреймворк Synchronization со всеми основными примитивами для работы с многопоточностью
1. Берем классический пример не безопасного менеджера для работы с кэшем
2. При использовании привычного GCD прийдется отказаться от прелестей Swift Concurrency и пометить его @unchecked Sendable
3. Но если заменить DispatchQueue то можно оставить class - Sendable и код станет еще и понятнее
4. Но Mutex доступен только с iOS 18, так что напишем свой, с низкоуровневым C-API и pthread_mutex_t
5. Добавляем к нашему коду Legacy и ограничение на таргет пропадает

От себя бы еще добавил не использовать сразу Legacy а сделать Backport, который будет выбирать нужную реализацию, в зависимости от таргета и пометил бы его @deprecated чтобы не забыть его удалить. Подробнее про такой подход в SwiftUI писал ранее
👍91
🔨 Xcode группы и папки
В Xcode 16 значительно переработали подход для работы с группами и папками. Что изменилось? Файлы и папки проекта расположены по-другому в навигаторе проектов, то, как раньше вели себя группы, теперь ведут себя папки.
🟢Раньше файлы и папки были сгруппированы, а в Xcode 16 можно только перетаскивать файлы в папки или из них, но я нельзя перемещать их на одном уровне
🟢При добавлении нового файла в Xcode 16 он помещается в корень проекта, а не после выбранного файла
🟢Изменение структуры папок в Finder позволяет Xcode 16 получать доступ к файлам.
Apple, наконец, решила, что папки - это правильный путь: они используются по умолчанию для новых проектов в Xcode.
Если вам это не нравится или вы хотите обновить старый проект, вы всегда можете поменять его местами. Щелкните правой кнопкой мыши папку проекта в навигаторе и выберите "Convert to Group" или "Convert to Folder".
Лично я давно сам выбрал подход с папками, а вы?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍5