Connect with us

Разработка

Derived Data: 5 ошибок iOS-разработчиков

Папка Derived Data — важный каталог для iOS-разработчиков.

Опубликовано

/

     
     

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

Тем не менее, у iOS-разработчиков есть множество возможностей максимально эффективно использовать Derived Data. Будь то удаление файлов для оптимизации сборки или просмотр информации о каталоге, все эти действия могут улучшить работу разработчиков. Давайте рассмотрим 5 ошибок, которые совершают iOS-разработчики.

1. Непонимание назначения каталога Derived Data

Во-первых, важно знать о каталоге Derived Data. Хотя можно создавать приложения и без него, я всё же считаю, что понимание его предназначения имеет дополнительную ценность.

Derived Data: 5 ошибок iOS-разработчиков

Папка Derived Data содержит различные типы данных, облегчающие процесс сборки для iOS-разработчиков.

Как видно на скриншоте выше моей папки с производными данными, там много данных, которые могут показаться незнакомыми. Лично мне знакомы такие названия проектов, как SimulatorCapturing и RocketSim, и в них есть три каталога noindex.

Каталоги ModuleCache.noindex, SDKStatCaches.noindex и SymbolCache.noindex — те, которые вы не будете трогать. Иногда я видел, как они влияют на работу Xcode или Simulator. После удаления этих каталогов проблема решалась. Однако в большинстве случаев проблемы можно решить, используя другие каталоги производных данных.

Итак, какие каталоги полезны? Мы рассмотрим это позже.

2. Поиск папки Derived Data вручную

Ещё одна распространённая ошибка разработчиков iOS — попытка открыть папку Derived Data вручную. Если вы не можете её легко найти, вы вряд ли будете ею часто пользоваться!

Xcode предлагает простой способ перейти к папке, перейдя в Settings → Locations:

Derived Data: 5 ошибок iOS-разработчиков

Маленькая синяя стрелка — это кнопка, на которую можно нажать. После нажатия откроется соответствующий каталог в Finder.

3. Удаление всех папок с производными данными при возникновении проблем

Уверен, многие iOS-разработчики знакомы с этим, но если нет: удаление папки с производными данными — часть распространённой стратегии отладки.

Если ваше приложение не собирается или работает с ошибками во время выполнения, попробуйте выполнить следующие 3 шага:

  1. Сбросьте настройки симулятора
  2. Запустите чистую сборку в Xcode
  3. Удалите папку с производными данными

После этого вы запустите проект в чистом состоянии, что, скорее всего, решит ваши проблемы. Если это не решит проблему, по крайней мере, появится более понятное сообщение об ошибке.

Ключевой момент заключается в том, что многие разработчики удаляют всю папку с производными данными. Чтобы понять, почему это неправильно, я объясню, как это работает.

У каждого проекта 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%. Это может оправдать инвестиции в модернизацию оборудования всей команды.

Вот пример обзора панели управления для одного из моих приложений:

Derived Data: 5 ошибок iOS-разработчиков

Аналитика сборки в 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 — вам необходимо знать о нем.

Спасибо!

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: