codesign --keychain被忽略了

时间:2017-02-27 11:30:14

标签: ios xcode jenkins xcodebuild codesign

我正在使用命令行工具(xcodebuild)导出App档案。基本上这就是我的运作:

xcodebuild -workspace "${WORKSPACE_PATH}" \
    -scheme "${SCHEME_NAME}" \
    -archivePath "${PROJECT_ARCHIVE}" \
    -configuration "${CONFIGURATION}" \
    -sdk "${TARGET_SDK}" \
    DEVELOPMENT_TEAM="XXXXXXXX" \
    OTHER_CODE_SIGN_FLAGS="--keychain /Users/user/Library/Keychains/jenkins.keychain" \
    archive

这就是结果:

Check dependencies
No signing certificate "iOS Development" found:  No "iOS Development" signing certificate matching team ID "XXXXXXX" with a private key was found.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'

** ARCHIVE FAILED **


The following build commands failed:
Check dependencies
(1 failure)
$ echo $?
65

代码签名失败,因为codesign忽略了--keychain参数。现在这是有趣的部分。我想使用的钥匙串是jenkins.keychain-db(如上所述)。这当然行不通。这是我的钥匙串搜索列表:

$ security list-keychains
"/Users/user/Library/Keychains/login.keychain-db"
"/Library/Keychains/System.keychain"

显然jenkins.keychain-db不应该在那里。如果我在搜索列表中添加jenkins.keychain-db,它就会开始工作。

不幸的是,这对我来说不是一个解决方案,因为我有多个具有相同私钥和证书的钥匙串。这导致xcodebuild获取它可以找到的第一个正确证书,因为钥匙串可能没有解锁,所以它将失败。

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令使用自定义钥匙串进行编码选择:

security list-keychains -d user -s jenkins.keychain
security default-keychain -s jenkins.keychain

# to unlock the kechain:
security unlock-keychain -p $PW jenkins.keychain

xcodebuild之前......

您可以省略-db扩展名。没有必要使用它会导致混乱的行为。

您可能希望在构建完成后清除它:

security list-keychains -d user -s login.keychain
security default-keychain -s login.keychain