Pull to refresh
108.06
Rating
e-legion
Делаем приложения, которыми пользуются миллионы

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

e-legion corporate blog Development for iOS *Development of mobile applications *

Во многих компаниях используют 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.

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

Заключение


Автообновление профайлов — это просто и удобно.
Используйте на здоровье.
Tags:
Hubs:
Total votes 25: ↑22 and ↓3 +19
Views 5.2K
Comments Comments 6

Information

Founded
Location
Россия
Website
www.e-legion.ru
Employees
101–200 employees
Registered