[不再是下文解释的类似问题的重复]
我在Jenkins中运行XCodeBuild时遇到代码签名错误,但是它可以从命令行或Xcode中构建。
过去有几个人遇到过这个问题,与他们共同的主题是Jenkins在启动时作为守护进程用户运行,因此尝试访问系统密钥链。 人们已经应用的解决方案是将凭证复制到系统钥匙串或运行命令来设置要使用的钥匙串。
但是在我的情况下,如果我在活动管理器中查看launchd,则用户显示为我登录到计算机的用户,因此Jenkins应该以此用户身份运行,而不是作为守护程序用户运行。
我尝试在运行XCodeBuild之前通过将此命令添加到Jenkins脚本来设置要使用的钥匙串
security list-keychains -s /Users/[user]/Library/Keychains/login.keychain
但这并没有解决问题。
我得到的错误是:
Code Sign error: The identity 'iPhone Developer: NNNNN (9TYX5WAM63)' doesn't match any valid, non-expired certificate/private key pair in your keychains"
所以我尝试将凭据移动到系统密钥链,但现在在Jenkins中出现此错误,但从命令行仍然可以正常:
Code Sign error: Provisioning profile 'F152C66E-B99A-47F6-B262-376CE4403D71' can't be found
此外,当我将凭据移动到系统密钥链时,我无法再在XCOde中构建 - 我得到与上面的顶部错误消息相同的错误。
我还尝试编辑org.jenkins-ci.plist文件,将用户设置为我登录到机器的人,按照这个,但是也没有效果。
我接下来会尝试什么想法?
答案 0 :(得分:6)
当我们最后一次搞砸这个时,我觉得你很有挑战性。我们在为项目设置CI服务器时执行了此操作。如果我没记错(广泛地说),我们遵循以下步骤:
1)将Jenkins设置为Apple Dev帐户的开发人员
2)专门为Jenkins创建了证书和开发配置文件
3)在CI服务器上设置Jenkins用户并从该用户的xcode中删除任何以前的证书/ prov配置文件
4)将Jenkins证书添加到AD-Hoc Dist配置文件中(如果您尝试将.ipa分发到HockeyApp,则需要将其用于存档构建。)
5)进入xcode项目文件并删除对Provisioning Profiles的任何现有引用
6)下载并安装此用户的证书和相应的Prov Profiles。
7)在构建解锁之前,Jenkins用户密钥链。仅当Jenkins用户不是运行xcode构建的用户时才执行此操作。
以Jenkins用户身份登录时,验证Xcode在组织者中显示Prov Profile是否有效。
我知道我的回答有点模糊,我的意图是要有所帮助。这种类型的错误通常是由三件事之一引起的。 Xcode无法找到配置文件,Xcode无法找到证书或Xcode发现多于一个配置文件(应该产生不同的错误,但并不总是)并且有某种不匹配。通常重做Prov Profiles是最不痛苦的解决方案。
祝你好运。你会解决它,这只是一个巨大的麻烦!
答案 1 :(得分:2)
可能不是你要找的答案,但我放弃了XCodeBuild插件有很多原因,并通过“执行Shell”步骤运行我的构建。
您说您的命令行构建有效,因此您已经知道所需的命令。把它放进壳里。
xcodebuild -verbose -alltargets -configuration Debug clean build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE=${PROVISIONING_PROFILE}
&&
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}.app" -o "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}-Debug-${shortVer}.${revVer}.ipa" --sign "${CODE_SIGN_IDENTITY}" --embed "/Users/[youruser]/Library/MobileDevice/Provisioning Profiles/${PROVISIONING_PROFILE}.mobileprovision"
在上方,${CODE_SIGN_IDENTITY}
是iPhone Developer: blah
的样子
${PROVISIONING_PROFILE}
是个人资料的十六进制数,如F152C66E-B99A-47F6-B262-376CE4403D71
答案 2 :(得分:0)
使用Jenkins我收到了这个错误:
/Users/Shared/Jenkins/Home/jobs/ExampleTabbed-Integration/workspace/build/Debug-iphoneos/ExamplesTabbed.app: User interaction is not allowed.
命令/ usr / bin / codesign失败,退出代码为1
我通过执行以下操作修复了它:
将以下内容添加为执行命令:
security unlock-keychain -p“passwordhere”$ {HOME} /Library/Keychains/login.keychain
在XCode(通过插件)配置中,我使用以下内容:
有可能删除前一步并使用实际的xcode配置来执行此操作,但它的工作原理没有问题。
请注意,这还没有考虑使用更安全的解决方案,但这是我解决xcode签名问题的方法。我正在使用Jenkins安装程序在OSX上运行并作为launchctl命令运行,由默认的Jenkins安装程序应用程序使用。如果这有帮助。
答案 3 :(得分:0)
如果在构建计算机上未显示此提示,则可以通过运行构建计算机上终端失败的codesign命令强制显示该提示:/ usr / bin / codesign --force --sign“iPhone Distribution :.....
以Jenkins用户身份从终端执行失败的签名命令,并选择“始终允许”
答案 4 :(得分:0)
假设您的构建/代码签名/发布过程运行良好。唯一的障碍是您尝试在Jenkins中运行完全相同的进程。
可能是钥匙串被锁定,不是为用户锁定的,而是为Jenkins子进程锁定的。
用于解锁钥匙串的安全命令仅需要作为Jenkins作业运行一次。即使相同的登录用户已经在终端中解锁了钥匙串。
因此,在Jenkins中设置一个简单的自由式作业,并添加以下shell命令作为构建阶段。
security unlock-keychain -p PASSWORD /Users/your_username/Library/Keychains/login.keychain-db
(确保包括正确的PASSWORD
和指向login.keychain-db
的路径)
一旦运行了此作业,请再次尝试常规发布作业,如果您的登录钥匙串中具有所有必需的Apple证书,则该作业应该可以工作。