多产品的证书和配置文件组织

5

在我的工作场所,我们已经完成了一款iOS应用程序的开发,并即将开始第二个应用的开发。

在此之前,我想澄清一些关于证书、配置文件和构建环境的事情:

问题1:我的理解是否正确,一个苹果账户只能拥有一个发布证书,因此这个证书将会在两个应用程序中使用?(通过它存在于新的配置文件中,我将为新的应用程序创建一个包含新应用程序ID的新配置文件集)。

问题2:由于安装到钥匙串中的是证书而不是配置文件,我认为新的应用程序应该只能在当前为当前应用程序设置的构建机器上构建。

问题3:与问题2相关,我想知道是否有必要或者是一个好主意,将当前应用程序和新应用程序的构建分开,将它们放在不同的物理构建机器上(或将构建机器划分为虚拟机)。如果两个应用程序使用不同的证书,我认为这是必要的(或至少是划分钥匙串)。 我担心会出现证书和钥匙串问题。 但是,如果问题1的答案是只有一个发布证书,那么理论上不需要为每个应用程序单独设置构建机器?

问题4:两个应用程序都使用推送通知,是否可以在两者中使用相同的推送证书(当然是在不同的配置文件中)?

谢谢。

1个回答

5
证书和配置文件可能是一个棘手的话题,因此在不经意间给自己带来痛苦之前,最好先询问一下!
问1:每个账户只能有一个发布证书吗?
答:是的,个人和公司账户每个会员年度仅限一个活动的发布证书,但如果个人或公司认为有必要这样做(公钥/私钥被破解、终止具有私钥访问权限的员工等),则可以随时撤销并重新颁发该证书。我最近回答了一个问题"什么是代码签名标识?",它可能有助于提供有关编码到配置文件中的信息以及Xcode在执行设备构建时如何查找此信息的其他上下文。请记住,根据使用的配置文件类型(开发与分发),配置文件中编码的证书和测试设备的数量和类型将发生变化。
您也完全正确,您将重复使用现有的发布证书,并使用第二个应用程序的应用程序ID /包ID编码的全新一组配置文件。

Q2: 证书而不是配置文件安装在Keychain中,对构建机器会有什么影响?

是的,这是正确的。您的开发证书和发布证书都会被安装到Keychain中,而配置文件则会被安装到Xcode的特殊目录中,以供代码签名操作使用。

假设您已经为第一个应用程序设置并运行了构建机器,则已完成了大部分艰苦的工作。以下是您仍需要完成的任务:

  • 使用现有证书为新的AppId生成一组配置文件
  • 在构建环境上安装配置文件
  • 确保Xcode项目的“代码签名身份”构建设置已配置为使用新创建的配置文件,或更理想地使用“自动配置文件选择器”,如果您的项目配置允许。
  • 配置您的构建系统,以实际制作新的应用程序。

这些高级任务的具体操作方法将在某种程度上取决于您如何设置项目和构建系统,但通常应遵循构建第一个应用程序时使用的相同工作流程。

Q3: 将构建环境分区到单独的机器上是必要的/好主意吗?

就这个问题的“必要”部分而言,不需要将构建环境物理或虚拟地分开才能并行构建这些应用程序,但是如果您的业务需求需要按应用程序的基础设置专用的构建环境,则可以选择这样做。从技术角度来看,配置文件提供了99%的分区支持,以便能够并行构建。只有在您是两个或更多iOS Development Program的成员且由每个团队颁发的证书上的“常用名称”匹配时(例如,“iPhone Distribution:MyCompany”是Team1的证书的常用名称,并且与Team2颁发的证书完全相同),您才会遇到可能需要物理或虚拟分区的情况。如果出现这种情况,您将在Xcode中看到以下警告和错误:验证码错误:证书标识“iPhone Distribution:MyName”在钥匙串中出现了多次。codesign工具要求只有一个。在所有其他情况下,假设您已安装了您的证书和配置文件,并正确设置了代码签名身份值,则代码签名可以自行处理。

Q4:是否可以重复使用同一个推送证书作为两个应用的证书?

不可以。每个应用程序ID都有自己的一组配套配置文件,其中包括一组许可,其中之一就是推送通知。当使用推送通知许可构建新的配置文件时,需要生成新的推送证书--无法向苹果提供现有证书。这样做是为了确保推送通知提供程序(创建发送到苹果推送网关的推送通知有效负载的服务器)在类似于iOS生态系统中找到的方式下被封装 - 每个AppId只有一个提供者...每个AppId只有一个沙箱。

从安全角度来看,这可以防止攻击者仅通过提供有效的Push标记和有效负载而向用户发送垃圾邮件式的推送通知。要么设置您的提供者代码的第二个实例并使用创建新的配置文件时生成的Push证书,要么更新您现有的提供者以按应用程序级别跟踪Push通知标记,并在向Apple发送Push通知有效负载时使用正确的证书。不幸的是,只有您(或您的同事)可以做出此决定,因为该决策将受现有提供程序的技术能力和您/您的公司愿意在同一提供程序实例上统一Push通知的风险程度的支配。

其他人可能会在这里发言,提供一些关于如何设置他们自己的提供商的额外见解,但我选择完全分开的实例来防止一个应用程序的推送通知更新可能会破坏完全不同应用程序的推送通知的情况。


只有一个问题:在同一组织中,开发证书可以用于两个不同的游戏吗?或者如果它们属于同一个苹果账户,一个开发证书可以用于开发两个不同的游戏。 - gmuhammad
“iPhone开发者:<你的名字>”是你的签名标识,其公钥包含在各自的预配文件中作为可允许签署者。只要你的开发证书没有被吊销或过期,并且与每个目标AppID位于同一帐户中,而且你至少为每个AppID设置了一个包含你的开发证书的预配文件,你就可以将你的“iPhone开发者”证书用于任意数量的应用程序。更多信息请参见:https://dev59.com/_2Qo5IYBdhLWcg3whPgi#16070915 - Bryan Musial
不确定 @BryanMusial 在回答这个问题时是什么情况,但我目前在个人账户中有三个不同应用程序的三个不同证书。 - ppetree
为了支持每个团队只有一个分发证书的政策,苹果的文档指出:
分发证书属于团队,每个团队只允许一种类型的分发证书(除了开发者 ID 证书)。 链接 @ppetree
- CasualCoder
有趣的是,当我更新我的开发者账户后,突然被禁止拥有多个分发证书。在那之前,我有好几个,只是从adhoc到dist设备配置文件进行了更改。每个团队只能拥有一个证书实际上会更容易管理一些。 - ppetree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接