【问题标题】:Certificates and profile organization for multiple products多种产品的证书和配置文件组织
【发布时间】:2013-03-25 19:58:51
【问题描述】:

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

在这样做之前,我想澄清一些关于证书和配置文件以及构建环境的事情:

Q1:我认为 Apple 帐户只能有一个分发证书,因此这将在两个应用程序中使用,这是否正确? (通过它出现在配置文件中,我将创建一组新的配置文件,其中包含新应用的新应用 ID)。

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

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

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

TIA

【问题讨论】:

    标签: ios xcode provisioning-profile


    【解决方案1】:

    证书和配置可能是一个棘手的话题,所以在无意中给自己带来一些痛苦之前先问清楚当然是个好主意!

    Q1:每个帐户只有 1 个分发证书?

    是的,个人和公司帐户在每个会员年度仅限于一个有效的分发证书,但是如果个人或公司认为有必要这样做(泄露的公钥/私钥,终止有权访问私钥的员工等)。我最近回答了一个问题"What are Code Signing Identities?",这可能有助于提供一些关于编码到配置文件中的信息以及 Xcode 在执行设备构建时如何查找此信息的额外上下文。请记住,根据使用的配置文件的类型(开发与分发)将改变配置文件中编码的证书和测试设备的数量和类型。

    您也绝对正确,因为您将使用一组全新的配置文件重用现有分发证书,这些配置文件使用您准备/正在编写的第二个应用程序的 App Id/Bundle Id 进行编码。

    Q2:在钥匙串中安装证书而不是配置文件是什么?构建机器会受到怎样的影响?

    是的,这是正确的。您的开发证书和分发证书都安装到 Keychain 中,而 Provisioning Profiles 安装到 Xcode 中的一个特殊目录中,用于代码签名操作。

    假设您已经设置好构建机器并为您的第一个应用程序工作,那么您已经完成了很多艰苦的工作。您仍然需要做的事情的高级列表:

    • 使用现有证书为新的 AppId 生成一组配置文件
    • 在构建环境中安装 Provisioning Profile(s)
    • 确保将 Xcode 项目的“代码签名身份”构建设置配置为使用新创建的配置文件,或者如果您的项目配置允许,最好使用“自动配置文件选择器”。
    • 配置您的构建系统以实际制作新应用。

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

    Q3:是否有必要/好主意将构建环境分区到不同的机器上?

    就这个问题的“必要”部分而言,不,您不需要物理或虚拟分离构建环境才能并行构建这些应用程序,但是您可以 如果您的业务需求需要基于每个应用程序的专用构建环境,请选择这样做。

    从技术角度来看,Provisioning Profiles 提供了能够并行构建所需的 99% 的分区。唯一会遇到可能需要物理或虚拟分区的情况是,如果您是两个或多个 iOS 开发计划的成员,并且每个团队颁发的证书上的“通用名称”匹配(例如。 “iPhone Distribution: MyCompany”是 Team1 证书的通用名称,与 Team2 颁发的证书完全相同)。如果是这种情况,您会在 Xcode 中看到如下警告和错误:

    代码签名错误:证书身份“iPhone Distribution: MyName”在钥匙串中出现多次。协同设计工具只需要一个。

    在所有其他情况下,假设您同时安装了证书和配置文件并且正确设置了代码签名身份值,那么代码签名可以自行处理。

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

    这是一个坚定的“不”。每个 App Id 都有自己的一组配置文件,这些配置文件伴随着一组权利,其中一个是推送通知。在构建具有推送通知权利的新供应配置文件时,系统会要求您生成新的推送证书——没有机会向 Apple 提供您现有的证书。这样做是为了确保推送通知“提供者”(创建发送到 Apple 推送网关的推送通知有效负载的服务器)以类似于 iOS 生态系统中的方式被沙盒化——每个 AppId 一个提供者...一个每个 AppId 的沙盒。

    从安全角度来看,这可以防止攻击者通过在 Apple 的 Push Gateway 上提供有效的 Push 令牌和有效负载来向您的用户发送垃圾邮件推送通知。设置提供程序代码的第二个实例并使用在制作新的配置文件时生成的推送证书,或者更新现有的提供程序以跟踪每个应用程序级别的推送通知令牌,并在发送推送通知有效负载时使用正确的证书给苹果。不幸的是,只有您(或您的同事)才能做出此决定,因为该决定将取决于您现有提供商的技术能力以及您/您的公司愿意在同一提供商实例上采取统一推送通知的风险程度。

    其他人可能会在这里提供一些关于他们如何设置自己的提供程序的额外见解,但我已经使用完全独立的实例来防止出现这样的情况:一个应用程序的推送通知的更新可能会破坏一个完全不同的应用程序的推送通知.

    【讨论】:

    • 再问一个问题:同一组织的两个不同游戏的开发证书可以相同吗?或者如果它们属于同一个苹果帐户,则可以使用一个开发证书来开发两个不同的游戏。
    • “iPhone Developer: ”是您的签名身份;其公钥作为允许的签署者包含在各个配置文件中。只要您的开发证书没有被吊销或过期,并且与每个目标 AppID 一起存在于同一帐户中,并且您为每个包含您的开发证书的 AppID 设置了至少 1 个配置文件,您就可以使用您的“iPhone开发人员”证书,适用于您想要的任意数量的应用程序。更多:stackoverflow.com/questions/15996468/…
    • 不确定 2013 年 @BryanMusial 回答这个问题时的情况,但我目前拥有三个不同应用程序的三个不同证书,这是在个人帐户中。
    • 为了支持每个团队策略一个分发证书,Apple 的文档说 > 分发证书属于团队,并且每个团队允许一种类型的分发证书(开发人员 ID 证书除外)。 [链接](help.apple.com/xcode/mac/current/#/dev3a05256b8)@ppetree
    • 有趣的是,当我更新我的开发者帐户时,我突然被禁止拥有多个分发证书。在那之前,我有几个,只是从 adhoc 更改为 dist 设备配置文件。每个团队只有一个实际上更容易管理。
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2012-10-10
    • 2021-11-16
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多