Jenkins iOS 基于 Mac Sierra 在 xcodebuild 8.2 代码签名期间失败(SecKey API 返回 -25308)

Jenkins iOS builds on Mac Sierra failing during xcodebuild 8.2 code signing (SecKey API returned -25308)

我在 Mac Sierra 上设置了 Jenkins CI,以使用带有自动签名的 Xcode 8.2 构建 iOS 应用程序。使用 Xcode 作为开发人员进行构建时一切正常。但是,使用 xcodebuild 的 Jenkins 失败并显示以下内容:

SecKey API returned: -25308, (null)/Users/Shared/Jenkins/Home/workspace/App/build/Build/Intermediates/ArchiveIntermediates/App/InstallationBuildProductsLocation/Applications/App.app/Frameworks/GTMSessionFetcher.framework: unknown error -1=ffffffffffffffff

我已遵循 中的建议,但无济于事。

我试过将私钥和证书都放入系统钥匙串中,但无济于事。

如果我以 Jenkins 用户身份登录并手动 运行 代码签名命令,我会 "Always Allow" 访问钥匙串,并且它会反复运行。但是,Jenkins CI 调用的 运行ning 不会。 (Jenkins 大师是 Mac,我正在使用同样的 Mac 来构建。)

错误是提到 CocoaPod GTMSessionFetcher。这与 CocoaPods 有关吗?

如有任何想法,我们将不胜感激。

我遇到了完全相同的问题,我很确定它与 CocoaPods 无关,这是一个代码设计问题。我做过的一些事情:

  1. 检查我没有重复的钥匙串条目。 post 对此很有用。原来我有一个条目重复了。

  2. 检查是否允许所有应用程序使用私钥,如解释的那样here

  3. 尝试(请注意,由于 macOS Sierra login.keychain 已更改为 login。keychain-db),这是你提到的建议中的第二个答案,但没有用。

  4. 将私钥和证书都移至系统钥匙串(仅将证书留在登录钥匙串上)。最后一步是让一切顺利的一步。

如果这没有帮助,您可以尝试在 Jenkins 作业中手动解锁登录钥匙串(在我将密钥和证书移动到系统钥匙串之前,这对我有用):

node("macOS-sierra") {

   .........

  stage("Build"){
    sh 'security unlock-keychain -p KEYCHAIN_PASS "/Users/YOUR-CI-USER/Library/Keychains/login.keychain-db" && fastlane beta'

  }

您可以用这个检查您的钥匙串:

$ security list-keychains