我的公司使用一台构建机(Mac Mini)作为CI节点来构建我们的iOS应用。目前,我们在mini上构建了Ad-Hoc和App Store配置。我们最近注册了企业计划,并希望也开始构建企业配置。但是,我们的构建过程现在失败,因为我们现在有两个名为“iPhone Distribution:Widget Corporation”的证书。一种是针对AdHoc/AppStore的发行证书,另一种是针对企业版的(苹果公司称之为内部)。

我尝试修改mini的钥匙串(keychain),以便在登录钥匙串(keychain)中包含一个证书,在名为“企业”的新 key 链中包含一个证书,但这只是从构建开始就转移了错误:

CodeSign error: Certificate identity 'iPhone Distribution: Widget Corporation' appears more than once in the keychain.

到构建结束:
iPhone Distribution: Widget Corporation: ambiguous (matches "iPhone Distribution: Widget Corporation" in /Users/hudson.admin/Library/Keychains/login.keychain and "iPhone Distribution: Widget Corporation" in /Users/hudson.admin/Library/Keychains/enterprise.keychain)

我的问题是,是否有办法正确地对两个证书进行沙箱处理,以便可以在同一台计算机上构建应用程序的Ad-Hoc,App Store和内部版本。我尚未尝试过的唯一可能的解决方案是将证书与源一起 bundle 在一起,并使用security在需要时添加和删除证书。显然,该解决方案不是很好,并且会带来安全风险。

有任何想法吗?

最佳答案

与Apple开发人员技术支持人员讨论后,他们建议创建单独的钥匙串(keychain)以容纳不同的证书,然后将--keychain filename参数传递到codesign步骤中,以指向适当的文件。您可以使用OTHER_CODE_SIGN_FLAGS选项将此参数传递到Xcode或xcodebuild中。例如:

xcodebuild -target "<targetname>" -configuration "<configname>" \
  PROVISIONING_PROFILE=A3A47A82-E91F-4E95-8559-601C6C857053 \
  OTHER_CODE_SIGN_FLAGS="--keychain=/Users/username/Library/Keychains/enterprise.keychain" \
  build

另外,在创建新的钥匙串(keychain)之后,默认情况下似乎默认为5分钟后重新锁定-如果您的构建需要花费一些时间,则可能需要更改此设置。

关于objective-c - 开发人员和企业发行版之间的CodeSign冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5158942/

10-10 18:31