Добавить объявление

Ошибки iOS-разработчиков при работе с Derived Data

Сегодня поговорим о Derived Data - одной из самых загадочных, но важных папок в жизни iOS-разработчика. Хотя мы редко взаимодействуем с ней напрямую, именно здесь Xcode хранит кэш для ускорения сборки проектов.

Обсудим основные ошибки, которые совершают разработчики при работе с Derived Data:

Непонимание предназначения папки:


Derived Data это не просто папка для мусора. Здесь хранится:

  • Кэш компиляции модулей.

  • Информация о Swift packages.

  • Символы для отладки.

  • Собранные бинарные файлы.


Папки с суффиксом .noindex (ModuleCache, SDKStatCaches, SymbolCache) лучше не трогать без необходимости. Хотя иногда их очистка помогает решить проблемы с симулятором, в 90% случаев достаточно работать только с папкой конкретного проекта.

Ручной поиск папки:


Не ищите Derived Data вручную через Finder! Есть простой способ:

Xcode -> Settings -> Locations -> Derived Data


Маленькая синяя стрелка - это кнопка, которая мгновенно откроет папку в Finder.

Удаление папки Derived Data:


Классическая ошибка, когда Xcode «заглючил», многие удаляют всю папку Derived Data. Правильный подход:

  • Сбросить настройки симулятора.

  • Сделать Clean Build в Xcode.

  • Удалить ТОЛЬКО папку проблемного проекта.


Удаляя всю Derived Data, вы заставляете Xcode пересобирать ВСЕ проекты с нуля, что может занять много времени.

Игнорирование метрик сборки:


Это особенно критично для команд. Представьте:

  • Сборка замедлилась на 30 секунд.

  • В команде 20 разработчиков.

  • Каждый делает 10 сборок в день.


Итого: команда теряет полтора часа в день!

Решение: использование инструменты вроде RocketSim Team Insights для мониторинга:

  • Время типичной и максимальной сборки.

  • Разницу между чистыми и инкрементальными сборками.

  • Влияние версий Xcode и macOS на производительность.


Эти данные помогают обосновать покупку новых MacBook для команды, иногда это дает до 30% прироста скорости!

Отсутствие анализа сборок:


В подпапках проекта в Derived Data лежит собранное приложение. Если заглянуть внутрь (Show Package Contents), то можно обнаружить следующие папки и ресурсы:

  • Resources: могут содержать неиспользуемые ассеты.

  • Frameworks: иногда там остаются ненужные зависимости.

  • Bundles: сторонние библиотеки могут добавлять лишние ресурсы.


Это напрямую влияет на размер приложения! Однажды нам удалось уменьшить размер приложения на 70 МБ, благодаря удалению неиспользуемых ресурсов и лишних библиотек.

Неиспользование кэша для CI/CD:


Многие команды напрасно игнорируют Derived Data в процессах непрерывной интеграции. При каждой сборке на CI-сервере Xcode заново компилирует все зависимости. Правильный подход: кэшировать папку Derived Data между сборками, особенно:

  • Кэш компиляции Swift Packages.

  • Скомпилированные модули зависимостей.

  • Кэш Asset Catalog.


Игнорирование проблем с инкрементальной сборкой:


Если вы замечаете, что Xcode постоянно пересобирает файлы, которые не менялись - проблема часто кроется в Derived Data. Типичные причины:

  • Поврежденный кэш модулей.

  • Неправильные временные метки файлов.

  • Конфликт версий Swift компилятора.


Решение: использовать флаг -driver-show-incremental в настройках сборки, чтобы увидеть, что именно заставляет Xcode пересобирать файлы. Это помогает выявить проблемы с зависимостями и оптимизировать структуру проекта.

Вывод:


Derived Data не враг, а мощный инструмент для оптимизации процесса разработки. Правильная работа с ним экономит часы и нервы.
05.10.2025 9 76