在xcodebuild 8.2代码签名期间,Jenkins iOS构建在Mac Sierra上失败(SecKey API返回-25308)

时间:2017-02-12 08:36:32

标签: jenkins xcodebuild codesign

我在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

我遵循了security / codesign in Sierra: Keychain ignores access control settings and UI-prompts for permission中的建议,但没有用。

我已尝试将私钥和证书放入系统密钥链,但无济于事。

如果我以Jenkins用户身份登录并手动运行codesign命令,我将永远允许"访问钥匙串,它反复运作。但是,由Jenkins CI调用的运行不会。 (Jenkins大师是Mac,我使用同样的Mac来构建。)

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

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:4)

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

  1. 检查我没有重复的钥匙串条目。这个post对此非常有用。事实证明我有一个条目重复。

  2. 检查所有应用程序是否允许私钥,如here所述

  3. 尝试this(请注意,因为macOS Sierra login.keychain 已更改为 login.keychain-db ),这是第二个回答你提到的建议,但没有成功。

  4. 将私钥和证书移至系统密钥链(仅在登录密钥链上保留证书)。最后一步是使事情有效的步骤。

  5. 如果这没有帮助,您可以尝试在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