Папка Derived Data (производные данные) — один из важнейших каталогов, используемых iOS-разработчиком. Хотя вы не работаете с ней напрямую, Xcode активно использует её для кэширования информации и оптимизации разработки.
Тем не менее, у iOS-разработчиков есть множество возможностей максимально эффективно использовать Derived Data. Будь то удаление файлов для оптимизации сборки или просмотр информации о каталоге, все эти действия могут улучшить работу разработчиков. Давайте рассмотрим 5 ошибок, которые совершают iOS-разработчики.
1. Непонимание назначения каталога Derived Data
Во-первых, важно знать о каталоге Derived Data. Хотя можно создавать приложения и без него, я всё же считаю, что понимание его предназначения имеет дополнительную ценность.
Папка Derived Data содержит различные типы данных, облегчающие процесс сборки для iOS-разработчиков.
Как видно на скриншоте выше моей папки с производными данными, там много данных, которые могут показаться незнакомыми. Лично мне знакомы такие названия проектов, как SimulatorCapturing и RocketSim, и в них есть три каталога noindex.
Каталоги ModuleCache.noindex, SDKStatCaches.noindex и SymbolCache.noindex — те, которые вы не будете трогать. Иногда я видел, как они влияют на работу Xcode или Simulator. После удаления этих каталогов проблема решалась. Однако в большинстве случаев проблемы можно решить, используя другие каталоги производных данных.
Итак, какие каталоги полезны? Мы рассмотрим это позже.
2. Поиск папки Derived Data вручную
Ещё одна распространённая ошибка разработчиков iOS — попытка открыть папку Derived Data вручную. Если вы не можете её легко найти, вы вряд ли будете ею часто пользоваться!
Xcode предлагает простой способ перейти к папке, перейдя в Settings → Locations:
Маленькая синяя стрелка — это кнопка, на которую можно нажать. После нажатия откроется соответствующий каталог в Finder.
3. Удаление всех папок с производными данными при возникновении проблем
Уверен, многие iOS-разработчики знакомы с этим, но если нет: удаление папки с производными данными — часть распространённой стратегии отладки.
Если ваше приложение не собирается или работает с ошибками во время выполнения, попробуйте выполнить следующие 3 шага:
- Сбросьте настройки симулятора
- Запустите чистую сборку в Xcode
- Удалите папку с производными данными
После этого вы запустите проект в чистом состоянии, что, скорее всего, решит ваши проблемы. Если это не решит проблему, по крайней мере, появится более понятное сообщение об ошибке.
Ключевой момент заключается в том, что многие разработчики удаляют всю папку с производными данными. Чтобы понять, почему это неправильно, я объясню, как это работает.
У каждого проекта Xcode есть своя собственная папка с производными данными. Она хранит информацию для повышения скорости сборки и сокращения времени загрузки пакетов Swift. Другими словами, если вы удалите папку проекта, вам придётся скомпилировать его с нуля и снова загрузить все пакеты Swift.
В случае возникновения проблемы с отдельным проектом убедитесь, что вы удалили только папку с производными данными для этого проекта. В противном случае вам придётся пересобрать все остальные проекты с нуля, даже если в них не было никаких проблем.
4. Неиспользование расширенных инсайтов о сборке
Команды разработчиков могут сильно выиграть от этого. Xcode предоставляет большой объём информации о сборке в интерфейсе обзора сборки. Однако он изолирован от вашего локального компьютера, и кто на самом деле часто в него заглядывает?
Работая в команде, полезно знать подробности о производительности сборки.
Подумайте: если ваша сборка замедляется на 5 секунд, и:
- В вашей команде 20 разработчиков iOS
- Каждый из них собирает проект примерно 100 раз в день
Это означает, что ваша команда внезапно будет ждать завершения сборки почти на 3 часа дольше в день.
Вот почему так важно настроить метрики для времени сборки. Это незаметно снижает производительность, особенно когда проекты становятся всё более сложными.
Папка Derived Data в Xcode содержит каталог с логами сборки: Derived Data → <папка проекта> → Logs → Build. Существуют решения с открытым исходным кодом для парсинга этих данных в HTML-страницы, например, XCLogParser. Однако гораздо эффективнее использовать готовый инструмент.
Использование RocketSim Team Build Insights
RocketSim — это инструмент для iOS-разработчиков, добавляющий более 30 утилит в симулятор Xcode. Команды отмечают, что после его использования работа стала до двух раз быстрее, и отчасти это связано с возможностью отслеживать производительность сборки.
RocketSim работает на локальном компьютере каждого разработчика и отслеживает длительность сборки в рамках схемы проекта. Он синхронизирует эту информацию о сборке со своим бэкэндом, объединяя данные о длительности локальной сборки Xcode для каждого разработчика iOS.
Вместо использования непрерывной интеграции (CI) для отслеживания времени сборки теперь вы можете отслеживать реальную производительность.
- У каждого разработчика iOS может быть своя конфигурация MacBook
- Разница в рабочей среде может влиять на производительность локальной сборки
Знание этих показателей показывает, что новейший MacBook может ускорить работу всей вашей команды на 10%. Это может оправдать инвестиции в модернизацию оборудования всей команды.
Вот пример обзора панели управления для одного из моих приложений:
Аналитика сборки в RocketSim может существенно повлиять на производительность команды.
На панели инструментов отображается следующая информация:
- Наибольшее время сборки (p95) и типичное время сборки (p75)
Типичное время сборки представляете большинство сборок, выполняемых вашей командой. - Разница между чистыми и инкрементальными сборками
Оптимизация для инкрементальных сборок более эффективна, поскольку они встречаются чаще всего. - Информация об используемых версиях Xcode и ОС
Новый Xcode или ОС может повлиять на производительность сборки.
Представьте: к команде присоединяется новый коллега с совершенно новым компьютером. Он обновляет Xcode и ОС до последних версий, и ваша панель инструментов показывает, что производительность сборки значительно возросла. Это отличный момент, чтобы обсудить с вашим руководителем переход всей команды на новейший MacBook.
Преимущество заключается в том, что вы можете начать бесплатный 14-дневный пробный период со своей командой.
Вот что сказал Макс Годфри, разработчик iOS в Tilt:
«RocketSim Team Insights наконец-то даёт нам представление о времени сборки, а не просто интуитивное ощущение. Мы можем реально оценить влияние добавления SDK или улучшения конфигураций, наблюдая результаты в инкрементальных и чистых сборках. Это оказалось бесценным для принятия таких решений, как обновление оборудования — мы можем использовать реальные данные, показывающие, как разные машины влияют на время сборки. Метрики прекрасно детализированы, не требуется никаких дополнительных настроек или хаков на этапе сборки — всё работает незаметно в фоновом режиме. Честно говоря, мы никогда бы не оправдали разработку этого решения собственными силами, но это полностью изменило ситуацию».
5. Не углубление в сборку продуктов
Ещё один каталог, который стоит изучить подробнее, находится в папке Derived Data → <Имя проекта> → Build → Products → Debug → <имя_приложения>.app.
В большинстве случаев этот же файл можно найти в обзоре файлов Xcode в папке Products.
Этот файл .app — скомпилированная версия вашего приложения. Хотя перед изучением лучше ознакомиться с конфигурацией схемы выпуска, вы можете получить дополнительную информацию и из отладочных продуктов.
Вот как это сделать:
- Щелкните правой кнопкой мыши по файлу .app и выберите «Показать содержимое пакета».
- Просмотрите каталоги и найдите непредвиденные файлы.
Вот несколько распространённых примеров, с которыми вы можете столкнуться:
- Каталог
Resourcesможет содержать неиспользуемые или неоптимизированные ресурсы, что приводит к увеличению размера приложения. - Каталог
Frameworksможет содержать встроенные фреймворки, которые больше не используются. - Сторонняя зависимость могла незаметно внедрить разного рода ресурсы через файл
.bundle.
Каждое из этих действий может повлиять на размер вашего приложения, что в конечном итоге может повлиять на бизнес-показатели, такие как количество установок.
Заключение
Папка Derived Data — важный каталог для iOS-разработчиков. Хотя мы не работаем с ней ежедневно, он может стать источником улучшения производительности. Очистка данных сборки или мониторинг метрик с помощью RocketSim — вам необходимо знать о нем.
Спасибо!

