在我的工作场所,我们已经在一个iOS应用程序上完成了开发,并即将开始使用。
在此之前,我想澄清一些有关证书和配置文件以及构建环境的内容:
问题1:我认为Apple帐户只能拥有一个分发证书是正确的,因此这将在两个应用程序中使用吗? (通过它出现在配置文件中,我将创建一组包含新应用程序ID的新配置文件。)
第二季度:因为它是证书而不是安装在钥匙串中的配置文件,我假设新应用程序应该只构建当前为当前应用程序设置的构建机器。 第三季度:与Q2相关,我想知道是否有必要或者一个好主意,将当前应用程序和新应用程序的构建通过将它们放在不同的物理构建机器上(或将构建机器分区为虚拟机)。如果两个应用程序使用不同的证书,我认为这是必要的(或至少分区钥匙串)。 我担心会出现证书和钥匙串问题。 但是,如果Q1的答案是只有一个分发证书,那么理论上应该不需要为每个应用程序配备单独的构建机器?问题4:两个应用程序都使用推送通知,是否可以为两者使用相同的推送证书(当然在不同的配置文件中)?
TIA
答案 0 :(得分:4)
证书和配置可能是一个棘手的话题,所以在不经意间给自己造成一些痛苦之前先询问一定是个好主意!
Q1:每个帐户只有1个分发证书?
是的,个人和公司帐户仅限于每个会员年度的单个有效分发证书,但如果个人或公司认为有必要,可以随时撤销和重新签发此证书(受损的公钥/私钥,终止可以访问私钥的员工等)。我最近回答了一个问题"What are Code Signing Identities?",它可能有助于提供有关编码到配置文件中的信息的一些其他上下文,以及Xcode在执行设备构建时如何查找此信息。请记住,根据所使用的供应配置文件的类型(开发与分发),将改变供应配置文件中编码的证书和测试设备的数量和类型。
您也绝对正确,因为您将使用一组全新的配置文件重用现有的分发证书,这些配置文件使用您准备/正在编写的第二个应用程序的App Id / Bundle ID进行编码。
Q2:证书而不是配置文件是在Keychain安装的吗?构建机器将如何受到影响?
是的,这是正确的。您可以将开发证书和分发证书安装到Keychain中,同时将Provisioning Profiles安装到Xcode中的特殊目录中,以便与代码签名操作一起使用。
假设您已经为自己的第一个应用设置了自己的构建计算机,那么您已经完成了很多艰苦的工作。您仍需要执行的高级别事项列表:
这些高级任务的具体HOWTO在某种程度上取决于您设置项目和构建系统的方式,但通常应遵循构建第一个应用程序时使用的相同工作流程。
问题3:将构建环境分区到不同的计算机上是否有必要/好主意?
至于必要的'这个问题的一部分,不,您不需要在构建环境中进行物理或虚拟分离,以便能够并排构建这些应用程序,但是如果您的业务可以选择这样做需求是您需要基于每个应用程序的专用构建环境。
从技术角度来看,Provisioning Profiles提供了99%的并行构建所必需的分区。如果您是两个或更多iOS开发计划的成员,并且“公共名称”是一个成员,那么您唯一一次遇到可能需要进行物理或虚拟分区的情况。在每个这些团队签发的证书上匹配(例如," iPhone发布:MyCompany"是Team1证书的通用名称,与Team2颁发的证书完全相同)。如果遇到这种情况,您可以在Xcode中看到警告和错误,如下所示:
代码签名错误:证书身份' iPhone发布:MyName'在钥匙串中出现不止一次。代码签名工具只需要一个。
在所有其他情况下,假设您同时安装了证书和配置文件以及正确设置了代码签名标识值,则代码签名可以自行处理。
问题4:可以为两个应用重用相同的推送证书吗?
这是一个坚实的“没有”。每个App Id都有自己的供应配置文件集,其中包含一组权利,其中一个是推送通知。使用推送通知权利构建新的配置文件时,系统会要求您生成新的推送证书 - 没有机会向Apple提供现有证书。这样做是为了确保推送通知提供商' (您的服务器创建发送到Apple的推送网关的推送通知有效负载)的沙箱方式类似于iOS生态系统中的方式 - 每个AppId一个提供商...每个AppId一个沙箱。
从安全角度来看,这可以防止攻击者通过在Apple的推送网关上提供有效的推送令牌和有效负载,向您的用户发送垃圾推送通知。设置提供商代码的第二个实例并使用在创建新配置文件时生成的推送证书或更新现有提供商以在每个应用程序级别跟踪推送通知令牌,并在发送推送通知有效负载时使用正确的证书到Apple。遗憾的是,只有您(或您的同事)才能做出此决定,因为该决定将受到现有提供商的技术能力以及您/贵公司愿意在同一提供商实例上统一推送通知的风险程度的控制。 / p>
其他人可能会在这里进行管理,并提供一些关于他们如何设置自己的提供商的额外见解,但我已经选择完全独立的实例来防止一个应用程序的推送通知的更新可能会破坏推送的情况通知完全不同的应用程序。