OTHER_CODE_SIGN_FLAGS钥匙串标志被忽略了吗?

时间:2011-09-13 08:51:06

标签: iphone xcode xcodebuild codesign

我刚刚了解了使用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

4 个答案:

答案 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并要求他们重命名你的一个证书(他们实际上会重命名你的公司---附加一个后缀---你只需重新生成你的证书并更新你的简档)。