Используем CircleCI для тестирования и деплоя iOS приложений
CircleCI — это continuous integration сервис для веб и мобильных приложений. В статье опишу процесс настройки CircleCI для тестирования и последующего деплоя билда на Crashlytics.
Одно из преимуществ данного сервиса — сборка билда в облаке, то есть не нужна локальная билд-машина. Сервис позволяет гибко настраивать тестирование сборки, так как у пользователя есть доступ к sudo. Также существует возможность устанавливать сторонние пакеты. На данный момент поддержка iOS находится в бете, поэтому надо писать в support, чтобы открыли доступ.
Кого заинтересовал — прошу под кат.
Экспорт сертификатов
Для подписи билда понадобится экспортировать из keychain сертификаты и provisioning profile.
— Экспортируем «Apple Worldwide Developer Relations Certification Authorit» как «cer» и называем файл apple.cer;
— Экспортируем Distribution сертификат как «cer» и называем dist.cer;
— Экспортируем Distribution сертификат как «p12» и называем dist.p12. При экспорте попросят ввести пароль для защиты файла. Его надо запомнить, он понадобится в дальнейшем;
— Скачиваем adhoc provisioning profile из «Certificates, Identifiers & Profiles» портала и называем его dist.mobileprovision.
Складываем все 4 файла в папке scrips в корне нашего репозитория. Добавляем в эту же папку скрипты «add-key.sh», «remove-key.sh» и «crashlytics.sh» из примера на гитхабе.
— add-key.sh добавляет keychain с нашими ключами, а также копирует provisioning profile из нашей папки в папку »~/Library/MobileDevice/Provisioning Profiles/» билд-машины;
— remove-key.sh удаляет созданный нами keychain и скопированный provisioning profile;
— crashlytics.sh собирает, подписывает билд и отправляет на Crashlytics.
Настройка xcode
Добавляем Adhoc конфигурацию для сборки билдов и выставляем ее для сборки через коммандную строку.
Дальше выставляем Code Signing Identity следующим образом.
Основная схема и схема для тестирования должны быть в состоянии «shared».
Настройка окружения CircleCI
Пароли для keychain и ключи crashlytics лучше хранить как переменные окружения в настройках CircleCI. Для этого заходим в Project settings → Environment variables
Добавим переменные с названиями KEYCHAIN_PASSWORD, KEY_PASSWORD, CRASHLYTICS_API и CRASHLYTICS_SECRET, где:
KEYCHAIN_PASSWORD — нужно придумать;
KEY_PASSWORD — пароль, которым мы зашифровали «dist.p12»;
CRASHLYTICS_API и CRASHLYTICS_SECRET можно взять из настроек Fabric или Crashlitycs.
Теперь заходим в Project settings →Experimental Settings и выставляем Build iOS Projects в состояние «On»
Настройка конфигурационного файла CircleCI
Для того чтобы задать настройки сборки и тестирования билда нужно добавить файл с их описанием в корень директории проекта и назвать его «circle.yml».
machine:
xcode:
version: "6.3.1"
environment:
XCODE_SCHEME: use-bdd
XCODE_WORKSPACE: use-bdd.xcworkspace
DEVELOPER_NAME: 'iPhone Distribution'
APPNAME: use-bdd
PROFILE_UUID: dist
MAIL_LIST: firstmail@gmail.com,secondmail@gmail.com
test:
override:
- xctool
-reporter pretty
-reporter junit:$CIRCLE_TEST_REPORTS/xcode/results.xml
-reporter plain:$CIRCLE_ARTIFACTS/xctool.log
CODE_SIGNING_REQUIRED=NO
CODE_SIGN_IDENTITY=
PROVISIONING_PROFILE=
-destination 'platform=iOS Simulator,name=iPhone 6,OS=latest'
-sdk iphonesimulator
-workspace $XCODE_WORKSPACE
-scheme $XCODE_SCHEME
build analyze build-tests run-tests
deployment:
crashlytics:
branch: [master, dev]
commands:
- ./scripts/add-key.sh
- ./scripts/crashlytics.sh
- ./scripts/remove-key.sh
В секции «xcode» можем задать какой имеено версией xcode собирать проект. На данный момент доступны »6.1.1.»,»6.2» и »6.3.1». В секции «environment» задаем переменные окружения:
— XCODE_SCHEME — название xcode схемы;
— XCODE_WORKSPACE — название xcode workspace;
— DEVELOPER_NAME — должно совпадать с code signing identity выставленным в xcode;
— APPNAME — название приложения;
— PROFILE_UUID — название provisioning profile;
— MAIL_LIST — список мейлов, на которые будут приходить уведомления о новых билдах через crashlytics.
В секции «test» собираем, анализируем и тестим приложение. В секции «deployment» все коммиты из веток master и dev собираем и отправляем на crashlytics.
Список источников
— Документация circleci;
— Marry CircleCI to Hockey;
— Fabric Distribution with iOS Build Tools