Сегодня поговорим о
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 не враг, а мощный инструмент для оптимизации процесса разработки. Правильная работа с ним экономит часы и нервы.