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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🔨 Ускоряем сборку, отключая проверку модулей…
В статье автор делится не самым удачным опытом разделения приложения на мелкие модули для улучшения производительности компиляции. Несмотря на то что Xcode эффективно параллелит компиляцию отдельных не связанных модулей, при переходе на Xcode 16 этот подход стал «играть против» времени сборки, т.к. каждый модуль компилятор дополнительно начал проверять.
Конфигурация проекта: 36 отдельных фреймворков, 33 из них статические. Все статические фреймворки бандлятся в один динамический фреймвок.
Если профилировать компиляцию (Product > Perform Action > Build with Timing Summary), можно заметить что львиную часть времени занимает процесс верификации. Согласно документации, верификация позволяет выявлять и устранять проблемы с модулем фреймворка перед его распространением. Вот некоторые примеры таких проблем:
🟡Отсутствующие ссылки на заголовки в umbrella header
🟡Использование "" в import вместо <>
🟡Использование синтаксиса @import в ваших публичных и частных заголовках
🟡Работа с C импортами
🟡Ссылки на приватные заголовки из публичных

Как можно понять, не каждое приложение все еще имеет совместную кодовую базу Swift и Obj-C в каждом фреймворком, и уж точно работа с чистым C не является популярной.
Таким образом, можно отключить эту проверку через флаг ENABLE_MODULE_VERIFIER для DEBUG сборок и сократить время компиляции. В случае автора получился значительный буст, время компиляции сократилось с 3.5 минут до 52 секунд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍31
🖥 Дайджест Apple за январь

🟡Swift Student Challenge. Прием заявок с 3 февраля.
🟡История как в Oko помогают пешеходам с ослабленным зрением. Команда из Бельгии разработала приложение с помощью Swift
🟡Видео с WWDC24 про конфиденциальность и безопасность
🟡Продвижение приложений теперь доступно в новых странах
🟡Новая документация:
🟡 Предоставление контента приложения Siri
🟡 ImagePlayground - отображение системного интерфейса
🟡 Настраиваем широковещательные push-уведомления (iOS 18+)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Преимущества Swift Testing при линковке багов
XCTest использует простые комментарии для добавления контекста в тестовые примеры. Swift Testing предоставляет специальный признак bug для передачи краткого описания ошибки. Ключевым преимуществом является видимость названия ошибки в результатах тестирования и в интерфейсе Xcode. Особенно удобно, если вы придерживаетесь TDD, предоставляя доказательства устранения ошибки своими тестами.
В статье приводится сравнение с XCTest, скорее, для того чтобы показать что именно заменяет новый синтаксис. Врядли кто-то осознанно выберет XCTest для нового проекта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🐥 Гайд по обеспечению современного параллелизма: системы с отслеживанием состояния
Очень полезная статья для новичков с пошаговым разбором хороших практик по обеспечению параллелизма со Swift Concurrency. Реальные приложения записывают данные в локальное хранилище, удалённые сервисы и, как правило, используют изменяемое состояние. В статье создают SwiftUI приложение, которое работает с состоянием, размещённым в (придуманной) удалённой сетевой службе.
🟢Создание удаленной системы
🟢Проблемы с асинхронным кодом
🟢Использование актеров в логике
🟢Использование актеров во View
🟢Различия между параллелизмом и диспетчеризацией
🟢Состояние гонки
🟢Критические секции
🟢Проблемы с асинхронными вызовами
🟢Асинхронные функции и обработчики завершения
🟢Проблемы с акторами
Новичкам я бы не советовал "просто" повторять все что приводится в статье, а скорее вдумчиво прочитать и повторить в своем pet-проекте подглядывая в статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🐥 Атрибут @frozen в Swift
Атрибут @frozen — маркирует enum как неизменяемые, что обеспечивает как преимущества производительности, так и повышенную стабильность, особенно в контексте разработки фреймворков. В статье подробно рассматривается использование @frozen, объясняется его роль в языке Swift, особенно при создании библиотек или фреймворков, и то, как он помогает безопасно и эффективно обрабатывать эволюцию enum. Если коротко:
🟢Используйте @frozen для фреймворков и библиотек, где enum не изменится
🟢Не используйте @frozen для enum, которые могут "эволюционировать"

Атрибут важен для оптимизации кода и стабильности ABI. Использования @frozen делает кодовую базу более надежной и совместимой между версиями Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🔨 Refactor -> Extract selection to file

Любимая фишка Xcode 16 - возможность вырезать блоки кода в отдельные файлы без их предварительного создания. Просто вырезаю содержимое, выбираю нужный каталог и вставляю его из буфера обмена. Обратите внимание, что название соответствует структуре в выделенном коде
Please open Telegram to view this post
VIEW IN TELEGRAM
19
📚 CRUD операции в SwiftData с помощью ModelActor

SwiftData имеет очень простой API, но если вы используете Swift Сoncurrency, API SwiftData можно еще упростить. Статья описывает способ избавиться от явного использования Context:
🔵Работа идет через Sendable типы.
🔵Протокол Sendable определяет основные CRUD-операции с асинхронными методами.
🔵Селекторы обеспечивают типобезопасный способ указания данных для работы.
В статье так же указывается важное замечание о временных идентификаторах: новые элементы имеют временные идентификаторы до сохранения и постоянные после, это нужно держать в голове.
Несмотря на то что я приверженец использования "Pure API" без надстроек и сахара, могу признать, что данное решение имеет право на жизнь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📱 Списки в SwiftUI
Подробный обзор контейнера List для новичков в SwiftUI. Даже если весь проект на UIKit, можно внедрить в Debug или QA экраны конфигурации. В статье покрыты следующие темы:
🔵Пример статического списка
🔵Динамическое заполнение списка
🔵Использование протокола идентификации элементов
🔵Стили списков SwiftUI
🔵Использование разделов
🔵Поддержка выбора
🔵Изменение цвета фона
🔵Оптимизация производительности

Если статья покажется вам полезной, советую обратить внимание на:
🟡Официальную документацию этого компонента, в ней есть дополнительные аспекты использования вне iOS
🟡Отображение данных в списках - статья от Apple про визуализизацию данных в соответствии с внешним видом платформы
🟡Выбор контейнера, исходя из контента - статья Apple про выбор между контейнерами Stack, Grid, List и Form
#swiftui #lists #basics #tutorial
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1