Как стать автором
Обновить

Spotify представила XCRemoteCache — инструмент удаленного кеширования для iOS, сокращающий время чистой сборки на 70%

Время на прочтение 3 мин
Количество просмотров 2.6K

Разработчики Spotify открыли исходный код библиотеки XCRemoteCache, которая помогает ускорить время сборки iOS-проектов. Инженеры компании заявляют, что использование инструмента внутри команды позволило сократить время чистой сборки на 70%. Библиотека построена на принципе использования удаленного кэширования с целью повторного использования целевых артефактов в Xcode. Инструмент совместим кодом, написанным на Swift, Objective-C и на связке двух языков сразу.

Spotify столкнулась с тем, что разработчики компании в среднем тратят более 10 минут на сборку версии мобильного клиента под iOS.  После исследования проблемы выяснилось, что больше всего времени уходит после перенастройки или слияния удаленных веток. Поэтому пришла идея реализовать алгоритм на базе удаленного кэширования, который помог бы ускорить сборку приложения.

Сам принцип удаленного кэширования можно объяснить одной фразой — скомпилируй однажды, используй везде. Пока все входные файлы и параметры компиляции одинаковы, вместо создания отдельного целевого объекта на локальной машине можно загрузить артефакты, которые уже были созданы и использованы на другой машине. Фактор успеха при реализации подобной схемы — поиск оптимального уровня кэширования. Так как мобильный клиент Spotify имеет модульную структуру и состоит из более чем 400 независимы модулей, то было принято решение использовать кэширование целевого уровня.

Принцип работы XCRemoteCache построен на применении уникального, по заявлению Spotify, подхода для автоматической идентификации всех входных файлов компиляции на основе истории коммитов в Git. Режим XCRemoteCache, названный producer mode, вместе с продуктом компиляции создает метафайл, который содержит список всех файлов компиляции, использовавшихся для сборки и полный идентификатор фиксации алгоритма безопасного хеширования SHA-1. Второй режим с названием consumer mode находит самую последнюю фиксацию истории, для которой на удаленном сервере хранится артефакты сборки и создает отпечаток входных файлов, представленных в метафайле.

В блоге Spotify для разработчиков рассмотрели работу библиотеки на примере деятельности двух разработчиков A и B, работающих на отдельных ветках featureA и featureB соответственно. Сами ветки расширяются от основной main и ее коммитов Commit1 и Commit2. По условию артефакты сборки уже готовы для Commit1, Commit2 и Commit4. Commit3 по какой-то причине не готов — сборка либо еще идет, либо завершилась сбоем. Машина разработчика A будет повторно обращаться к артефактам из Commit1, а разработчика B к Commit2, так как для третьего коммита сборка еще не завершена.

Схема, демонстрирующая работу XCRemoteCache
Схема, демонстрирующая работу XCRemoteCache

Во время разработки инструмента инженерам пришлось решить проблему трансфера артефактов сборки между несколькими машинами. Некоторые типы файлов вывода компиляции включают в себя абсолютные пути, поэтому для полной совместимости требуется нормализация. Для проектов под iOS такой шаг необходим для файлов .swiftmodule и отладочных символов. 

Для этого XCRemoteCache вместе с файлом .swiftmodule поставляет отдельный документ, который содержит отпечатки сразу всех файлов, которые использовались при компиляции. Символы отладки и другие данные, которые зависят от пути, добавляются к двоичному пакету. Это позволяет связать машинный код с соответствующим расположением источника при отладке. 

Теперь XCRemoteCache представлен в виде инструмента с открытым исходным кодом и доступен на GitHub. Библиотека включает в себя несколько настроек проекта, включая те, которые управляются с помощью CocoaPods и Carthage. Кроме всего прочего, разработчики инструмента рекомендуют разбить свой проект на несколько целей, иначе можно получить недействительный кеш для сборки.

Также для осуществления бесшовной интеграции открыли исходный код плагина CocoaPods и предоставили автоматизированные сценарии для изменения проекта .xcodeproj.

XCRemoteCache работает с любым HTTP-сервером, который поддерживает запросы PUT, HEAD и GET. В Spotify отмечают, что для этих целей могут подойти и популярные варианты в виде Amazon S3 и Google Cloud Storage.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+7
Комментарии 0
Комментарии Комментировать

Другие новости

Истории

Работа

iOS разработчик
24 вакансии
Swift разработчик
33 вакансии
DevOps инженер
43 вакансии

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн