开发人员和企业分发之间的CodeSign冲突

kev*_*boh 20 continuous-integration hudson objective-c codesign ios

我的公司使用一台构建机器(Mac Mini)作为CI节点来构建我们的iOS应用程序.我们目前在mini上构建了一个Ad-Hoc和一个App Store配置.我们最近注册了企业计划,并希望开始构建企业配置.但是,我们的构建过程现在失败了,因为我们现在有两个名为"iPhone Distribution:Widget Corporation"的证书.一个是AdHoc/AppStore的分发证书,一个是Enterprise(Apple称之为In-House).

我已经尝试修改mini的钥匙链,使得一个证书在登录钥匙串中,一个在一个名为"enterprise"的新钥匙串中,但这只是从构建开始转移了错误:

CodeSign error: Certificate identity 'iPhone Distribution: Widget Corporation' appears more than once in the keychain.
Run Code Online (Sandbox Code Playgroud)

到构建结束时:

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)
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有办法正确沙箱两个证书,以便我可以在同一台机器上构建应用程序的Ad-Hoc,App Store和内部版本.我还没有尝试的唯一可能的解决方案是将证书与源捆绑在一起,并根据security需要添加和删除证书; 显然,解决方案不是很漂亮,并带来安全风险.

有任何想法吗?

kev*_*boh 17

在与Apple Developer Technical Support讨论后,他们建议创建单独的钥匙串来存放不同的证书,然后将--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  
Run Code Online (Sandbox Code Playgroud)

此外,在创建新的钥匙串后,它似乎默认在5分钟后重新锁定 - 如果你的构建需要一段时间,你可能想要更改它.


hom*_*son 9

另一种帮助我的方法是将签名身份作为SHA1哈希给codeign.脚步:

  1. 在所需证书的钥匙串访问中查找SHA1哈希
  2. 将SHA1哈希值与返回的哈希值进行比较: security find-identity -v -p codesigning
  3. 使用步骤2中的右SHA1进行编码: codesign -s "SHA1_FROM_STEP2" ...

  • 只是为了确认,我尝试在xcrun中使用哈希码工作,并防止任何模糊的命名冲突! (3认同)

Jos*_*phH 5

在与WWDC的xcode团队交谈之后,他们提出了一个更简单的解决方案 - 我可以请求重命名我的企业证书,这样就不会发生冲突.

通过点击在"管理您的帐户"链接为此,接触开发者服务开发者联系页面,然后选择"的iOS Provisioning户"为主题的-他们这样做对我来说我一天之内询问.

这比任何其他方式都简单得多 - 我现在在我的钥匙串中有两套证书,并且可以愉快地为appstore或企业分发构建,而不需要做任何事情而不是选择正确的实体进行协同设置.