2011-12-16 87 views
10

我试图打开某个钥匙串,并关闭另一个钥匙串。 我需要这个,因为我们的企业& appstore身份被称为相同。CLI:切换钥匙串以签署xcodebuild

现在,我做了一个“安全解锁钥匙串”,后面跟着一个“安全默认钥匙串”,以打开正确的钥匙串并对我不希望使用的钥匙串执行“安全锁钥匙串”。

但xcodebuild仍然看到两个钥匙串中的条目并放弃。

iPhone Distribution: Company name.: ambiguous (matches "iPhone Distribution: Company name." in /Users/user/Library/Keychains/login.keychain and "iPhone Distribution: Company name" in /Users/user/Library/Keychains/enterprise.keychain) 

如何防止系统找到我锁定的钥匙串中的条目?

回答

3

解决方案: 我已将所有与appstore相关的东西放入登录钥匙串中,并将企业内容放入单独的钥匙串文件中。

# 1. Only activate the System and either the Appstore(=login) or Enterprise keychain. 
security list-keychains -s $KEYCHAIN_NAME $SYSTEM_KEYCHAIN 

# 2. Loop through App Schema's 
for APP_SCHEME in ${APP_SCHEMES[@]}; do 
    echo "--= Processing $APP_SCHEME =--" 
    xcodebuild -scheme "${APP_SCHEME}" archive 
done ### Looping through App Schema's 

# 3. Restore login & system keychains 
security list-keychains -s $APPSTORE_KEYCHAIN $ENTERPRISE_KEYCHAIN $SYSTEM_KEYCHAIN 
+0

但是,在并行构建的情况下,当任务可能同时切换错误的钥匙串时,这可能不是期望的选项。我仍然希望PackageApplication脚本采取选项为证书查找设置首选钥匙串。 – lef 2016-01-24 09:06:15

0

为xcode的版本6和下面的另一个解决方案:通过SHA1,而不是通过(模糊的)名称指定证书

在buildscript,我那些之间如下进行切换。从“人的协同设计”:

If identity consists of exactly forty hexadecimal digits, it is instead 
interpreted as the SHA-1 hash of the certificate part of the desired iden- 
tity. In this case, the identity's subject name is not considered. 

而且从“安全性帮助找到证书”

-Z Print SHA-1 hash of the certificate 

不幸的是,这种方法需要使用PackageSign脚本,它一直deprecated in Xcode 7

+0

听起来很有希望......但我看不出我如何在xcode中指定SHA1。我可能不得不通过脚本进行签名。无论如何,谢谢你的提示。我会仔细研究,看看它能否帮助我们。 – P5ycH0 2013-06-02 10:25:34

+1

@ P5ych0对不起,直到现在还没有看到。是的,我们执行登录脚本,例如使用“xcrun -sdk iphoneos PackageApplication --sign --embed ” – 2013-07-29 19:19:13

9

你可以告诉Xcode使用哪个钥匙串:

xcodebuild "OTHER_CODE_SIGN_FLAGS=--keychain '$PATH_TO_KEYCHAIN'" 

或者,如果你打电话给codesign直接:

codesign --keychain "$PATH_TO_KEYCHAIN" 

如果使用PackageApplication,则没有办法设置它。然而,PackageApplication是一个非常简单的脚本,如果需要的话可以重新实现(如果要与更大的系统/脚本集成,则非常有用)。