Интеграция XCMetrics
Что такое XCMetrics?
XCMetrics — инструмент, разработанный инженерами Spotify, предназначенный для обработки и отправки метрик сборок Xcode.
По своей сути, XCMetrics является «оберткой» над XCLogParser, который анализирует логи Xcode и xcodebuild, представленные в формате xcactivitylog.
Для чего нужен XCMetrics?
XCMetrics используется для отправки логов сборок на ваш сервер, что позволяет аккумулировать обширные данные.
Это открывает возможности для глубокого анализа, сравнения и понимания факторов, влияющих на скорость сборки вашего проекта.
С помощью XCMetrics вы можете более точно определить узкие места и улучшить процесс сборки, что в конечном итоге приведет к повышению эффективности разработки.
Как интегрировать XCMetrics в проект?
Интеграцию XCMetrics условно можно разделить на 3 этапа:
Интеграция XCMetrics в iOS проекте
Подготовка executable файлов
Для начала необходимо склонить XCMetrics проект. Далее компилируем executable файл XCMetrics. Для этого в терминале переходим в склоненный проект и запускаем команду
swift build --product XCMetrics -c release
Скомпилировнный файл будет находится по пути XCMetrics/.build/arm64-apple-macosx/release и будет наименован как XCMetrics
Альтернативный вариант - скачать готовые скомпилированные executable файлы.
Далее копируем скомпилированный файл, а также файл XCMetricsLauncher из root-папки XСMetrics и вставляем в root-папку вашего проекта.
На этом предварительная работа закончена. Теперь можем внести изменения в самом Xcode.
Внесение изменений в Xcode
Для того, чтобы после каждого билда вашего проекта отправлялись метрики необходимо добавить post action скрипт. Выбираем нужную вам схему в Xcode → Edit Scheme → Build → Post-Actions.
Сюда добавляем следующий скрипт:
../XCMetrics/XCMetricsLauncher ../XCMetrics/XCMetrics --name `Наименование вашей схемы` --buildDir ${BUILD_DIR} --serviceURL `https://example.com`
Давайте разберем содержание скрипта:
- ../XCMetrics/XCMetricsLauncher ../XCMetrics/XCMetrics — путь до файлов XCMetrics и XCMetricsLauncher
- --name — сюда вставляем наименование вашей схемы, либо название проекта
- --buildDir ${BUILD_DIR} — путь до логов ваших билдов в Derived Data
- --serviceURL
https://example.com
— адрес, по которому будут отправляться метрики
Помимо этого существуют и другие дополнительные параметры, с которыми можно ознакомиться в документации XCMetrics. На этом работа с XCMetrics в Xcode закончена и теперь после каждого билда вашего проекта соответствующие логи будут передаваться на ваш сервер.
Локальный Backend и тестирование
В рамках XCMetrics, инженеры Spotify предлагают готовый Docker образ XCMetrics. С помощью него мы сможем развернуть backend составляющую локально и протестировать отправку метрик.
- Для начала необходимо установить Docker.
- В проекте XCMetrics (который вы ранее склонили) имеется готовый конфигурационный файл docker-compose, необходимый для развертывания инстансов Redis и Postgres. Запускаем команду и получаем готовый к работе backend XCMetrics.
docker-compose -f docker-compose-local.yml up
Так как теперь мы имеем полностью готовый к использованию локальный backend, можно приступить к тестированию отправки метрик. Заменяем —serviceUrl ****
в ранее добавленном в Xcode post-action скрипте на http://localhost:8080/v1/metrics
Можно билдить проект и тестировать отправку метрик.
Запросы XCMetrics можно отследить используя различные снифферы, наподобие Proxyman.
Проанализировать содержание метрик можно используя инструменты для работы с PostgreSQL, наподобие Postico. Креды для работы с базой Postgres XCMetrics хранятся в файле docker-compose-local.yml.
XCMetrics и Fastlane
XCMetrics является отличным решеним для отправки метрик в рамках CI. Для этого достаточно добавить в ваш lane вызов sh-скрипта. Пример скрипта использующийся в проектах Tele2/Altel.
sh("../XCMetrics/XCMetricsLauncher ../XCMetrics/XCMetrics --name 'Название вашей схемы' --buildDir '#{ENV["PWD"]}/DerivedData/Logs/Build' --isCI true --serviceURL <https://example.com>")
Давайте разберем отличия от post-action скрипта в Xcode:
- Изменен параметр —buildDir, т.к. в рамках CI мы используем кастомные пути для DerivedData. Файлы c расширением .xcactivitylog хранятся именно в DerivedData/Logs/Build.
- Добавлен параметр —isCI true для разграничения метрик в backstage.
Backstage
При подключении плагинов Xcmetrics к вашему Backstage - вы сможете видеть наглядно информацию по вашим сборкам с инфографикой и детальной информацией по каждой отдельной сборке