Ответ
Инкрементальная сборка – это подход, при котором система сборки (например, Xcode) перекомпилирует и релинкует только те файлы, которые были изменены с момента последней сборки, или которые зависят от изменённых файлов.
Как это работает в Xcode:
- Система отслеживает зависимости между файлами (
.swift,.m,.h, ресурсы). - При изменении файла пересобирается только он и все модули, которые от него зависят.
- Объектные файлы (
.o) от неизменённых модулей используются повторно.
Пример графа зависимостей:
Main.swift -> зависит от -> ViewModel.swift -> зависит от -> Model.swift
(изменён) (пересобирается) (пересобирается)
Если изменить только Model.swift, пересоберутся Model.swift, ViewModel.swift и Main.swift. Если изменить только Main.swift – только он.
Преимущества:
- Значительное ускорение сборки для больших проектов.
- Экономия ресурсов CPU и времени разработчика.
Проблемы и решения:
- Некорректное состояние кэша: Иногда система не замечает изменения (например, в макросах или скриптах фазы сборки). Решение:
Clean Build Folder(Cmd+Shift+K). - Изменение публичного интерфейса модуля: Требует пересборки всех модулей-клиентов. Swift Package Manager и Xcode обычно обрабатывают это автоматически.
- Настройка: Для корректной работы необходимо правильно настраивать Header Maps и Module Dependencies.