2011-09-13 201 views
8

我刚刚了解到使用OTHER_CODE_SIGN_FLAGS指定包含构建和签名应用程序所需证书的钥匙串的可能性。但不幸的是我无法让它工作。OTHER_CODE_SIGN_FLAGS 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} 
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

回答

3

答案是升级:在Check dependencies构建步骤中,Xcode 4.3尊重OTHER_CODE_SIGN_FLAGS标志。

+0

感谢和抱歉的延迟:) – mbogh

1

我在尝试为我们的iOS项目设置CI时遇到了同样的问题。我最终更新了PackageApplication Perl脚本以支持传递钥匙串选项。地点:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication 

我仍然从苹果等一些许可澄清,这样我可以发表我的更新脚本的GitHub。

+0

听起来很有趣,请让我知道,当你知道更多。 – mbogh

+0

你是否曾经能够发表这个? – atreat

0

除非您有最简单的脚本构建,否则这些功能都不起作用。就像@Tyler所说的那样,PackageApplication不支持指定钥匙串,并且某些版本的xcode在检查依赖关系时将要求钥匙串中不存在重复的证书。

不要浪费你的时间,只要打电话给Apple,让他们重命名你的证书(他们实际上会重命名你的公司---通过附加后缀---你只需重新生成证书并更新你的配置文件)。

3

我发现如果我没有将钥匙串添加到钥匙串搜索列表中,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} 
+0

这是超级有用,但我发现'ORIGINAL_KEYCHAINS'中的用户钥匙串列表包含每个的撇号;通过代码如'CLEAN_KEYCHAINS =“$ {ORIGINAL_KEYCHAINS // \”}“'来运行该变量(它将无用的替换所有的撇号),完美无缺地完成清理工作。 – Luke