Во многих компаниях используют Continuous Integration.
Например, в Git может быть три ветки: customer, master, test.
Пуш в customer или test инициирует создание сборки, а также ее доставку на устройства заказчика или тестировщиков.
Для распространения тестовых сборок на iOS, используются Ad Hoc профайлы. Суть в том, что сборка должна быть подписана профайлом, в котором указан UUID устройств на которых она может быть установлена.
Процедура добавления/удаления устройства в Ad Hoc профайл требует его пересоздания. После того как профайл обновлен, он должен быть установлен на сборочный нод (компьютер на котором собирается сборка). Обычно процедура обновления профайла выполняется через Xcode, что требует доступ к сборочному ноду через VNC и непосредственного участия человека.
К счастью, все можно автоматизировать, в том числе и процесс обновления профайлов при запуске сборки.
Насколько мне известно, есть два способа автоматизировать обновление профайла с использованием Jenkins.
Храним профайл в репозитории
- Скачиваем с Apple Dev Center нужный профайл и кладём в Git как «profiles/customer.mobileprovision».
- В настройках сборки в поле Embedded Profile пишем путь «profiles/customer.mobileprovision».
- В 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.
Очевидно, что скрипты можно доработать под свои нужды. Например, в случае, если нельзя скачать сертификат (проблема с сетью), то использовать имеющийся и прочее.
Заключение
Автообновление профайлов — это просто и удобно.
Используйте на здоровье.