CLI:切换钥匙串以便签署xcodebuild

时间:2011-12-16 14:50:20

标签: xcode xcodebuild keychain

我正在尝试打开某个钥匙串,并关闭另一个钥匙串。 我需要这个,因为我们的企业和appstore身份被称为相同。

现在,我执行“安全解锁钥匙串”,然后打开“安全默认钥匙串”,打开正确的钥匙串,并在我不希望使用的钥匙串上执行“安全锁钥匙扣”。

但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 个答案:

答案 0 :(得分:9)

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

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

或者,如果您直接致电codesign

codesign --keychain "$PATH_TO_KEYCHAIN"

如果您使用PackageApplication,则无法设置此项。但是,PackageApplication是一个非常简单的脚本,必要时可以重新实现(如果要与更大的系统/脚本集成,则非常有用)。

答案 1 :(得分:3)

解决方案: 我把所有与appstore相关的东西放在登录密钥链中,将企业内容放在一个单独的钥匙串文件中。

在buildscript中,我按如下方式切换:

    # 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

答案 2 :(得分:0)

xcode版本6及更低版本的另一种解决方案:通过SHA1而不是(不明确的)名称指定证书。来自" man codesign":

 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