我正在使用命令行工具(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获取它可以找到的第一个正确证书,因为钥匙串可能没有解锁,所以它将失败。
答案 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