В статье автор делится не самым удачным опытом разделения приложения на мелкие модули для улучшения производительности компиляции. Несмотря на то что Xcode эффективно параллелит компиляцию отдельных не связанных модулей, при переходе на Xcode 16 этот подход стал «играть против» времени сборки, т.к. каждый модуль компилятор дополнительно начал проверять.
Конфигурация проекта: 36 отдельных фреймворков, 33 из них статические. Все статические фреймворки бандлятся в один динамический фреймвок.
Если профилировать компиляцию (
Product > Perform Action > Build with Timing Summary
), можно заметить что львиную часть времени занимает процесс верификации. Согласно документации, верификация позволяет выявлять и устранять проблемы с модулем фреймворка перед его распространением. Вот некоторые примеры таких проблем:""
в 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👍3❤1
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
XCTest использует простые комментарии для добавления контекста в тестовые примеры. Swift Testing предоставляет специальный признак
bug
для передачи краткого описания ошибки. Ключевым преимуществом является видимость названия ошибки в результатах тестирования и в интерфейсе Xcode. Особенно удобно, если вы придерживаетесь TDD, предоставляя доказательства устранения ошибки своими тестами. В статье приводится сравнение с XCTest, скорее, для того чтобы показать что именно заменяет новый синтаксис. Врядли кто-то осознанно выберет XCTest для нового проекта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2⚡1
Очень полезная статья для новичков с пошаговым разбором хороших практик по обеспечению параллелизма со Swift Concurrency. Реальные приложения записывают данные в локальное хранилище, удалённые сервисы и, как правило, используют изменяемое состояние. В статье создают SwiftUI приложение, которое работает с состоянием, размещённым в (придуманной) удалённой сетевой службе.
Новичкам я бы не советовал "просто" повторять все что приводится в статье, а скорее вдумчиво прочитать и повторить в своем pet-проекте подглядывая в статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Атрибут
@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
Любимая фишка Xcode 16 - возможность вырезать блоки кода в отдельные файлы без их предварительного создания. Просто вырезаю содержимое, выбираю нужный каталог и вставляю его из буфера обмена. Обратите внимание, что название соответствует структуре в выделенном коде
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19
В каком соотношении у вас UI на SwiftUI и UIKit в проекте? (примерные цифры)
Anonymous Poll
17%
11%
5%
26%
13%
13%
6%
9%
👏1
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
Подробный обзор контейнера List для новичков в SwiftUI. Даже если весь проект на UIKit, можно внедрить в Debug или QA экраны конфигурации. В статье покрыты следующие темы:
Если статья покажется вам полезной, советую обратить внимание на:
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