2017-02-27 199 views
0

我使用命令行工具(xcodebuild)导出App档案。本质上,这是我运行的是什么:codesign --keychain被忽略

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 

这是结果:因为codesign忽略--keychain参数

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 

代码签名失败。现在这里是有趣的部分。我想要使​​用的钥匙串是jenkins.keychain-db(如上所述)。这当然不起作用。这是我的钥匙串搜索列表:

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

显然jenkins.keychain-db不存在,因为它应该是。如果我在搜索列表中添加jenkins.keychain-db,它开始工作。

不幸的是,这不是我的解决方案,因为我确实有多个keychains具有相同的私钥和证书。这导致xcodebuild拿起第一个权利证书,它可以找到哪个将失败,因为钥匙串可能未解锁。

回答

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 
+0

仅为什么从塞拉利昂? –