Используем 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 конфигурацию для сборки билдов и выставляем ее для сборки через коммандную строку. image

Дальше выставляем Code Signing Identity следующим образом. image

Основная схема и схема для тестирования должны быть в состоянии «shared». image

Настройка окружения CircleCI


Пароли для keychain и ключи crashlytics лучше хранить как переменные окружения в настройках CircleCI. Для этого заходим в Project settings → Environment variables
image

Добавим переменные с названиями KEYCHAIN_PASSWORD, KEY_PASSWORD, CRASHLYTICS_API и CRASHLYTICS_SECRET, где:
KEYCHAIN_PASSWORD — нужно придумать;
KEY_PASSWORD — пароль, которым мы зашифровали «dist.p12»;
CRASHLYTICS_API и CRASHLYTICS_SECRET можно взять из настроек Fabric или Crashlitycs.
image

Теперь заходим в Project settings →Experimental Settings и выставляем Build iOS Projects в состояние «On»
image

Настройка конфигурационного файла 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

© Habrahabr.ru