Обновление сертификатов на билд сервере

в 9:53, , рубрики: continuous integration, iOS, Jenkins, mobile development, provisioning, Блог компании e-Legion Ltd., разработка под iOS, метки: , , ,

Обновление сертификатов на билд сервере
Во многих компаниях используют Continuous Integration.
Например, в Git может быть три ветки: customer, master, test.
Пуш в customer или test инициирует создание сборки, а также ее доставку на устройства заказчика или тестировщиков.

Для распространения тестовых сборок на iOS, используются Ad Hoc профайлы. Суть в том, что сборка должна быть подписана профайлом, в котором указан UUID устройств на которых она может быть установлена.

Процедура добавления/удаления устройства в Ad Hoc профайл, требует его пересоздания. После того, как профайл обновлен, он должен быть установлен на сборочный нод (компьютер на котором собирается сборка). Обычно процедура обновления профайла выполняется через Xcode, что требует доступ к сборочному ноду через VNC и непосредственного участия человека.

К счастью все можно автоматизировать, в том числе и процесс обновления профайлов при запуске сборки.

Насколько мне известно, есть два способа автоматизировать обновление профайла с использованием Jenkins.

Храним профайл в репозитории

1. Скачиваем с Apple Dev Center нужный профайл и кладём в Git как «profiles/customer.mobileprovision».
2. В настройках сборки в поле Embedded Profile пишем путь «profiles/customer.mobileprovision».
3. В XCode для соответствующей конфигурации в Build Settings выбираем профайл — None и identity — automatic

Обновляем профайл перед сборкой

Очень хороший человек по имени Matt Thompson (рекомендую его Блог) создал клиент для работы с Apple Dev Center из консоли. Клиент называется Cupertino, написан на Ruby и ставится одной строчкой:

gem install cupertino

Теперь можно не класть «profiles/customer.mobileprovision» в Git, а вместо этого прописать в bash скрипте что-то вроде:

rm -rf profiles
mkdir profiles
update_cert "TestCert" profiles/customer.mobileprovision

Аналогично предыдущему способу, надо в XCode для соответствующей конфигурации в Build Settings выбрать профайл — None и identity — automatic.

Скрипт update_cert выглядит так:

#!/bin/bash

if [ ! $# == 2 ]; then
	echo "Usage: $0 (certificate name) (file name)"
	exit
fi
 
cert_name=$1
new_file_name=$2

res=`ios profiles:download "${cert_name}" --username some_user_name --password some_password --team some_team_name -type distribution`
 
if [ $? -gt 0 ]; then
    echo "ERROR!"
    exit
fi

echo "$res"
file_name=$(echo "$res" | cut -d"'" -f 2)

mv "${file_name}" "${new_file_name}"

Можно обойтись без update_cert, но в этом случае имя скаченного сертификата будет таким же как и в Apple Dev Center.

Очевидно, что скрипты можно доработать под свои нужды. Например в случае, если нельзя скачать сертификат (проблема с сетью), то использовать имеющийся и прочее.

Заключение

Автообновление профайлов это просто и удобно. Используйте на здоровье.)

Автор: Fanruten

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js