Что такое инкрементальная сборка в iOS-разработке?

«Что такое инкрементальная сборка в iOS-разработке?» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инкрементальная сборка – это подход, при котором система сборки (например, Xcode) перекомпилирует и релинкует только те файлы, которые были изменены с момента последней сборки, или которые зависят от изменённых файлов.

Как это работает в Xcode:

  1. Система отслеживает зависимости между файлами (.swift, .m, .h, ресурсы).
  2. При изменении файла пересобирается только он и все модули, которые от него зависят.
  3. Объектные файлы (.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.