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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
Все что нужно знать о дисплеях текущей линейки 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
Swift Testing. Использование трейтов для аннотации тестов
Отличный пример использования Swift Testing трейтов в повседневной работе. примеры использования из статьи:
🟢Отключение "флакающего" теста из кода с комментарием. Такой подход максимально явный для системы контроля версии
🟢Условное отключение теста, в зависимости от энвайромента. В статье есть пример с запуском только на физическом устройстве, но можно применить и для запуска в определенных тестовых сценариях или планах тестирования, например только для нагрузочного тестирования.
🟢Отключение теста с линковкой к задаче в рамках которой этот тест будет исправлен. Сильно лучше чем комментарий формата TODO: Fix
🟢Отключение теста из-за известного бага с линковкой на issue. Детальная документация по поддерживаемым трекерам
🟢Ограничение по времени прогона теста. Для отсутствие регрессии приложения зачастую требуется не только верифицировать бизнес логику но и отсутвтие деградации перформанса кода
🟢Плохо написаные тесты могут аффектить энвайромент и влиять друг на друга при параллельном запуске. Для таких кейсов есть костыль @Suite(.serialized)
🟢Swift Testing опенсорсный, так что можно подключить исходники, форкнуть или даже внести изменения. Например автоматически переоткрывать баг если тест упал
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1