【发布时间】:2012-03-26 10:54:48
【问题描述】:
我们的 Jenkins CI 构建服务器设置在运行 OSX Lion (10.7.3) 的 Mac Mini 上,我无法让它签署 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
部分问题似乎是当进程从启动时启动时只有系统钥匙串可用。我在构建过程中添加了一个脚本来列出钥匙串:
[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 上启动时运行进程吗?
【问题讨论】:
-
如果登录和系统钥匙串中都相同的钥匙,Xcode还会有问题吗?
-
我认为将钥匙放在两个地方是另一种解决方法,但根据过去的经验,我知道它确实会导致钥匙串访问程序出现问题。它似乎很困惑,不会删除两个钥匙串中存在的钥匙。
-
查看此堆栈交换问题以获得可能的解决方案:stackoverflow.com/questions/6827874/…
-
如果接受的答案对你来说还不够,试试这个..egeek.me/2013/02/23/…