iOS
July 10

Интеграция XCMetrics

Что такое XCMetrics?

XCMetrics — инструмент, разработанный инженерами Spotify, предназначенный для обработки и отправки метрик сборок Xcode.

По своей сути, XCMetrics является «оберткой» над XCLogParser, который анализирует логи Xcode и xcodebuild, представленные в формате xcactivitylog.

Для чего нужен XCMetrics?

XCMetrics используется для отправки логов сборок на ваш сервер, что позволяет аккумулировать обширные данные.

Это открывает возможности для глубокого анализа, сравнения и понимания факторов, влияющих на скорость сборки вашего проекта.

С помощью XCMetrics вы можете более точно определить узкие места и улучшить процесс сборки, что в конечном итоге приведет к повышению эффективности разработки.

Как интегрировать XCMetrics в проект?

Интеграцию XCMetrics условно можно разделить на 3 этапа:

  • Разворачивание backend-части
  • Интеграция в iOS проекте
  • Подключение плагинов в backstage

Интеграция 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 - вы сможете видеть наглядно информацию по вашим сборкам с инфографикой и детальной информацией по каждой отдельной сборке

Полезные ссылки:


Telegram-канал Теплица

Обратная связь