我刚刚了解了使用OTHER_CODE_SIGN_FLAGS指定钥匙串的可能性,其中包括构建和签署应用程序所需的证书。但不幸的是,我无法让它发挥作用。
我的脚本看起来像这样:
#!/bin/bash
TARGET="MyProject"
CONFIGURATION="Release"
SDK="iphoneos"
IDENTITY="iPhone Developer: John Doe (XX22RR22O)"
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain"
PASSWORD=""
security unlock-keychain -p ${PASSWORD} ${KEYCHAIN}
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"
但那失败了:
Check dependencies
[BEROR]Code Sign error: The identity 'iPhone Developer: John Doe (XX22RR22O)' doesn't match any valid certificate/private key pair in the default keychain
但是如果我首先切换到钥匙串它可以工作,但是在多个构建可能同时发生的构建服务器上是不可用的:
#!/bin/bash
TARGET="MyProject"
CONFIGURATION="Release"
SDK="iphoneos"
IDENTITY="iPhone Developer: John Doe (XX22RR22O)"
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain"
PASSWORD=""
security unlock-keychain -p ${PASSWORD} ${KEYCHAIN}
security default-keychain -s ${KEYCHAIN}
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"
希望你们能提供帮助 -Morten
答案 0 :(得分:4)
我发现如果我没有将钥匙串添加到钥匙串搜索列表中,xcodebuild将不会尊重OTHER_CODE_SIGN_FLAG --keychain
设置。我不得不添加这段代码:
// Early in the script
ORIGINAL_KEYCHAINS=`security list-keychains -d user`
// After I create my keychain, add it to the list
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} "${KEYCHAIN_NAME}"
// On cleanup
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS}
毋庸置疑,我花了好几个小时搞清楚这一点。
同样有帮助,确保钥匙链在构建时保持打开状态。正如advised here:
security -v set-keychain-settings -lut 7200 ${KEYCHAIN_NAME}
答案 1 :(得分:3)
答案是升级:Xcode 4.3在OTHER_CODE_SIGN_FLAGS
构建步骤中尊重Check dependencies
标志。
答案 2 :(得分:1)
我在尝试为iOS项目设置CI时遇到了同样的问题。我最终更新了PackageApplication
Perl脚本以支持传递keychain选项。位置:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
我还在等待Apple的一些许可澄清,以便我可以将更新的脚本发布到GitHub。
答案 3 :(得分:0)
除非你有最简单的脚本化版本,否则这些都不会真正起作用。就像@Tyler所说的那样,PackageApplication不支持指定密钥链,而某些版本的xcode在检查依赖关系时会要求密钥链上没有重复的证书。
不要浪费你的时间,只需致电Apple并要求他们重命名你的一个证书(他们实际上会重命名你的公司---附加一个后缀---你只需重新生成你的证书并更新你的简档)。