Невозможно подписать сборки iOS с помощью Jenkins

Наш сервер сборки Jenkins CI настроен на Mac Mini под управлением OSX Lion (10.7.3), и у меня возникли проблемы с его подписью сборок iOS, чтобы они могли быть загруженным в TestFlight.

Процесс запускается от имени обычного пользователя jenkins и запускается во время загрузки с помощью launchd. (Машина недоступна для внешнего мира, поэтому никаких проблем с безопасностью при запуске под обычной учетной записью пользователя быть не должно.)

Вот ошибка в консольном выводе от 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

Часть проблемы, похоже, заключается в том, что доступна только системная цепочка ключей, когда процесс запускается из launchd при загрузке. Я добавил скрипт в процесс сборки, чтобы перечислить связки ключей:

[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

Я смог найти два обходных пути, но ни один из них не осуществим:

  1. Если мы войдем на сервер и перезапустим процесс запуска каждый раз, когда машина перезагружается , тогда jenkins может загрузить цепочку для входа в систему и получить доступ к сертификатам для подписи:

    sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
    sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
    
  2. Мы можем добавить сертификаты в системную цепочку для ключей, но это означает, что мы не можем использовать эту машину для создания дистрибутива нашего магазина приложений.. (Xcode не нравится системная цепочка для ключей).

Кто-нибудь еще нашел какие-либо другие жизнеспособные обходные пути? Есть ли что-то еще, кроме launchd, которое я могу использовать для запуска процессов во время загрузки в OSX?

15
задан Anthony F 11 March 2012 в 02:29
поделиться