Наш сервер сборки Jenkins CI настроен на Mac Mini, работающем с OSX Lion (10.7.3), и у меня возникли проблемы с его подпиской на сборки iOS, чтобы их можно было загрузить в TestFlight.
Процесс выполняется как обычный пользователь с именем jenkins, и он запускается во время загрузки с помощью запуска. (Машина не доступна для внешнего мира, поэтому не должно быть никаких проблем с безопасностью при работе с обычной учетной записью пользователя.)
Вот ошибка на выходе консоли от jenkins:
[workspace] $ /usr/bin/xcodebuild -target iMobileStCloud -configuration Release clean build
=== CLEAN NATIVE TARGET MyApp OF PROJECT MyProject WITH CONFIGURATION Release ===
Check dependencies
[BEROR]Code Sign error: The identity 'iPhone Distribution' doesn't match any valid certificate/private key pair in the default keychain
Отчасти проблема заключается в том, что доступен только системный брелок, когда процесс запускается с запуска при загрузке. Я добавил процесс script в процесс сборки, чтобы перечислить цепочки ключей:
[workspace] $ /bin/sh -xe /var/folders/1y/1q3st_ss58z9ffj4dwbkdw8r0000gt/T/hudson8514187812830984272.sh
+ /usr/bin/security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/applepushserviced.keychain"
"/Library/Keychains/System.keychain"
+ /usr/bin/security find-identity
Мне удалось найти два обходных пути, но ни один из них не выполним:
-
Если мы заходим на сервер и перезапускаем процесс запуска каждый раз, когда машина перезагружается, тогда jenkins может загрузить логин-логин и получить доступ к сертификатам для подписания:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
-
Мы можем добавить сертификаты в системную брелок, но это означает, что мы не можем использовать этот компьютер для создания наших дистрибутивов дистрибутива хранилища. (Xcode не любит системный брелок).
Кто-нибудь еще нашел какие-нибудь другие жизнеспособные обходные пути? Есть ли что-то еще помимо launchd, которое я могу использовать для запуска процессов во время загрузки на OSX?