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

2024-03-06

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

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

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

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

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

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

TIA


证书和配置可能是一个棘手的话题,因此在无意中给自己带来一些痛苦之前先询问一下无疑是个好主意!

Q1:每个账户只能有一张分发证书吗?

是的,个人和公司帐户每个会员年度仅限于一个有效的分发证书,但是如果个人或公司认为有必要,可以随时撤销并重新颁发该证书(公钥/私钥泄露、解雇员工可以访问私钥等)。我最近回答了一个问题“什么是代码签名身份?” https://stackoverflow.com/questions/15996468/what-are-code-signing-identities/16070915#16070915这可能有助于提供一些有关编码到配置文件中的信息以及 Xcode 在执行设备构建时如何查找此信息的额外上下文。请记住,根据所使用的配置文件类型(开发与分发),将改变配置配置文件中编码的证书和测试设备的数量和类型。

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

问题 2:在钥匙串中安装的是证书而不是配置文件,对吗?构建机器会受到什么影响?

是的,这是正确的。您的开发证书和分发证书都会安装到钥匙串中,而配置文件则安装到 Xcode 中的特殊目录中以用于代码签名操作。

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

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

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

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

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

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

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

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

Q4:两个应用程序可以重复使用相同的推送证书吗?

这是一个坚定的“不”。每个应用程序 ID 都有自己的一组配置文件,并附有一组权利,其中一个是推送通知。使用推送通知权利构建新的配置文件时,系统会要求您生成新的推送证书 - 没有机会向 Apple 提供现有证书。这样做是为了确保推送通知“提供程序”(创建发送到 Apple 推送网关的推送通知有效负载的服务器)以类似于 iOS 生态系统中的方式进行沙箱处理 - 每个 AppId 一个提供程序...一个每个 AppId 的沙箱。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个产品的证书和配置文件组织 的相关文章

随机推荐

  • 如何检查使用堆栈安装的软件包版本?

    在我的项目的 cabal 文件中 我有以下内容executable部分 executable ArchPkgstatsScraper hs source dirs app main is Main hs ghc options thread
  • Selenium 启动的 ChromeDriver 在后台保持运行

    I am not able to completely delete a project because the chromedriver instance is running in the background even when th
  • UWP Composition Api 是否支持颜色替换?

    我一直在尝试寻找与颜色替换相关的示例 这是一个使用 Photoshop 的示例 例如 它可以采用蓝色阴影并将其替换为红色阴影 BEFORE AFTER 使用最新版本的 Composition Api 中的 Composition Effec
  • 关于在线HTML5视频系统离线模式的解决方案

    我们有在线网站系统 具有很多功能 例如播放视频等 目的是我们想要为iPad制作具有UIWebView支持的离线模式应用程序 两种选择 使用HTML5清单实现离线模式 here http blog cubeanywhere com 2010
  • JAVA中类的引用大小

    Java中类的引用大小是多少 对于特定的 JVM 和操作系统 它是否恒定 与引用的类无关 Class A Class B Class C A a B b C c 尺寸是a b and c无论大小都相同A B and C课程 是的 所有引用都
  • 使用 ADODB 记录集在 Excel VBA 中查询非常慢的查询以获得先前值

    我在 Access 中有这个查询 它的工作速度非常快并且具有出色的性能 但是 当我想使用 ADODB REORDSET 在 Excel 中使用此查询时 通过复制记录集信息大约需要 15 分钟Range CopyFromRecordset S
  • 使用 NewSequentialID 有什么缺点吗?

    正如问题所述 使用 NewSequentialID 作为表的默认值与 NewID 相比有何缺点 明显的优点是它不会使我们的索引碎片太多 是否担心序列会被最大化 我不认为字段上的默认值真的会成为一个缺点 如果您想在插入某些记录之前控制它们的
  • 如何正确验证 AngularJS 客户端到服务器的身份

    我正在构建一个使用 RESTful API Jersey 的 AngularJS Web 应用程序 在服务器端 我使用 Java 应用程序服务器 具体为 Glassfish 4 我的设置如下 AngularJS webapp 作为单个 wa
  • Xamarin iOS 内存泄漏无处不在

    过去 8 个月我们一直在使用 Xamarin iOS 并开发了一款具有许多屏幕 功能和嵌套控件的不平凡的企业应用程序 我们已经按照 推荐 完成了自己的 MVVM 架构 跨平台 BLL 和 DAL 我们在 Android 之间共享代码 甚至我
  • 我应该使用 while(true) 从 Socket 接收数据吗?

    请参考我之前的问题获取代码示例套接字 有时 很少 数据包在接收过程中丢失 https stackoverflow com questions 9826194 sockets sometimes rarely packets are lost
  • 如何使用 x'abc' 二进制字符串文字语法显示 blob 值?

    您可以使用 x abc 语法轻松输入 blob 值 但是是否也可以以这种方式显示它 如下所示 直接选择或使用连接隐式转换为字符串不起作用 并且显示垃圾 此处为 Windows DOS 提示符 sqlite gt create table b
  • 多重使用块c#

    我正在开发需要访问数据库的应用程序 使用 using 语句很好 因为 using statement is to ensure that the object is always disposed correctly and it does
  • 我想删除所有花芹菜历史/日志,但它不起作用

    我不知道如何删除花的任务相关数据 我需要清除我的 Flower 数据以进行调试 但我不知道该怎么做 我的花和芹菜在泊坞窗上运行 即使我删除了泊坞窗及其相应的卷 我的花和芹菜历史数据中仍然有数据 我的 docker compose 配置 ce
  • 是否可以使用JS检查哪个浏览器支持哪个视频/音频“编解码器”?

    更准确地说 我想检查可以在浏览器中对 HTML5 中的视频 音频元素使用哪些编解码器 例如 Safari 支持 H 264 但我也想知道我可以使用哪些编解码器 由于规范随着时间的推移而变化 我想以某种方式自动完成它 而不是基于浏览器编解码器
  • Python 计算列表长度的方法

    我想知道 len 是如何工作的 每次我调用 len 时 它是否从列表的开头到结尾进行计数 或者 由于 list 也是一个类 len 是否只返回列表对象中记录列表长度的变量 另外 我希望有人能告诉我在哪里可以找到 len map 等内置函数的
  • 查找向量矩阵的最频繁行或众数 - Python / NumPy

    我有一个形状 n 的 numpy 数组 表示 n 维向量的向量 我想找到最频繁的行 到目前为止 最好的方法似乎是迭代所有条目并存储计数 但 numpy 或 scipy 没有内置的东西来执行此任务 这似乎很淫秽 这是一种使用的方法NumPy
  • 我的应用程序启动颠倒

    我已经开发了一段时间并发布了游戏的引擎现在正在颠倒地启动我当前的项目 并立即按预期的方式旋转 UIView 我用代码创建了界面 它的外观如下 BOOL application UIApplication application didFin
  • 按类别列出项目

    我有3张桌子 类别doesnt matter 项目2猫 itemID catID item id name desc 我想列出给定类别中的项目 但我不知道如何以简单的方式做到这一点 使用 PHP 和 MySQL 我需要这个表结构 因为我想要
  • CSS 属性选择器在 href 中不起作用

    我需要使用 css 中的属性选择器来更改不同颜色和图像上的链接 但它不起作用 我有这个html a href manual pdf A PDF File a 还有这个CSS a display block height 25px paddi
  • 多个产品的证书和配置文件组织

    在我的工作场所 我们已经完成了一个 iOS 应用程序的开发 即将开始第二个应用程序的开发 在此之前 我想澄清一些有关证书和配置文件以及构建环境的事情 问题 1 我认为一个 Apple 帐户只能有一个分发证书 因此这将在两个应用程序中使用 这