XCode 中的“代码签名身份”是什么?
他们是证书吗?
他们是私钥吗?
他们是应用程序ID吗?
它们是配置文件吗?
如果我进入目标构建设置,它会要求提供代码签名身份,所以我需要弄清楚这一点。
我以为我们使用我们的私钥签署了代码。但是,我的私钥名称都没有出现。它显示了证书列表(我认为,虽然我什至不确定。)
XCode 中的“代码签名身份”是什么?
他们是证书吗?
他们是私钥吗?
他们是应用程序ID吗?
它们是配置文件吗?
如果我进入目标构建设置,它会要求提供代码签名身份,所以我需要弄清楚这一点。
我以为我们使用我们的私钥签署了代码。但是,我的私钥名称都没有出现。它显示了证书列表(我认为,虽然我什至不确定。)
您肯定遇到了一个很快就会变得非常深入的话题,并且在尝试构建 iOS 应用程序的设备时,这是一个常见的头痛来源。首先,让我围绕代码签名过程中涉及的每个术语(对您和以后遇到此问题的任何人)提出一个小结构,然后我们可以转向您的主要问题:
代码签名术语
iOS 设备构建的代码签名阶段是我们对应用程序中的特定数据排列进行加密签名和保护的过程,包括应用程序可执行二进制文件本身、任何嵌入式媒体资产(如按钮纹理、自定义图稿、字体等)。 ),以及一组关于我们的应用程序的元数据,代表我们应用程序数据的唯一“指纹”。Apple 和 iOS 使用此指纹来帮助确保我们的应用程序在交付给用户设备或在用户的 iOS 设备上运行时不会被篡改。为了实现这一点,开发人员需要向 Apple 注册、设置应用标识符、申请开发和分发证书、注册一组测试设备,最后为他们的开发工作申请一个配置文件。
正是此文件的存在和指纹检查确定开发人员生成的应用程序是否可以安装到设备上,因为它包含“谁”(证书)、“内容”(AppID)和“位置”的概念'(哪些设备)。
太好了,我明白了……现在这个 Code Sign Identity 怎么样?
在单个构建目标的构建设置的上下文中,术语代码签名身份是指安装在开发人员机器的钥匙串中的那些证书的通用名称。在 Xcode 构建设置中,它显示为一个选项列表,开发人员必须从中选择要用于 CodeSign 的身份 -此菜单的每个部分中都编码了很多信息:
首先看黑色文本——来自上图中的“iPhone 开发者:Bryan Musial (XXXXXXXXXX)”——这确实是 Xcode 用来查找用于 Code Sign 的公钥和私钥的主要项目。选择此项目时,您将指示 Xcode 进入您的钥匙串并尝试查找其“通用名称”字段与该字符串匹配的证书,然后获取该证书(其中包含公钥)和关联的私钥以用于代码签名操作。
如果您打开 Keychain Access 并双击任何“iPhone 开发:...”或“iPhone 分发:...”证书,那么为了彻底一点,证书会显示 Apple 向其开发人员颁发的证书中编码的所有信息。如果我要选择第一张图片中的条目,Xcode 将进入我的钥匙串并拉回此证书(注意:唯一标识详细信息已被 X'd 或更改):
如您所见,来自 Xcode 选择的黑色文本与我的证书中的 Common Name 字段完全匹配,因此 Xcode 将撤回此证书及其链接的私钥,以用于对我的应用程序进行代码签名。
再次回顾 Xcode 设置,我们还注意到该菜单选项中还有更多文本——较浅的灰色文本标识将内置到应用程序中的 Provisioning Profile。在我的示例设置中,Xcode 将获取配置文件“MyiOSApp Testing”,其 AppID 设置为“com.myiosapp.*”。Xcode 非常热衷于存储 Provisioning Profiles,幸运的是,Organizer 为您提供了一个查看已安装的 Provisioning Profiles 并了解它们包含的基本数据的好地方。同样对于第一张图片中的 Xcode Code Sign Identity,我的 Organizer 中的相关 Provisioning Profile 将如下所示:
“名称”列和 App Identifier 列的尾端与我的 Xcode 设置中的浅灰色文本匹配,因此这是在代码签名期间选择使用的配置文件。注意行尾的“状态”列也很重要。在这种情况下,它为绿色并指示“有效配置文件”。这意味着我的钥匙串至少有一个在该配置文件中编码的证书的公钥和私钥。如果此状态不是绿色,则说明您当前的公钥/私钥设置和/或配置文件存在问题——除非您尝试使用的配置文件的状态设置为绿色,否则代码签名无法工作. 其他可能的状态选项包括:
其他可能会绊倒你的物品
除了确保您安装了公钥和私钥以及配置文件设置正确的所有细微差别之外,还有一些其他事情可能会让开发人员感到困惑。首先,Xcode 收集 Provisioning Profiles 并保留它们,直到您告诉它删除它们。从理论上讲,这并不是什么大不了的事情,除非在您更改配置文件、下载并安装更新版本的情况下。很多时候 Xcode 会获取正确的配置文件,但有时它不会正确处理,您将花费数小时查看证书、标识符和配置文件工具以及您的钥匙串,以尝试了解正在发生的事情。
建议 1:在安装更新版本的 Provisioning Profile 时,删除旧版本,这样 Xcode 就不会处于可能需要做出决定的位置。
如果您重新颁发开发或分发证书,可能会发生类似的事情——大多数情况下,Xcode 会在构建期间触发关于不明确证书的警告。
建议2:在构建过程中注意歧义警告。这意味着您有一个符合构建标准的旧证书浮动,并且可能会被无意使用,从而可能导致构建问题。
建议 3:每当您在钥匙串中处理您的证书时,请查找带有红色“X”的“iPhone 开发人员:...”或“iPhone 分发:...”证书。这是证书已过期或已被吊销的指示符。无论哪种方式,此公钥(以及可能链接的私钥)都不再用于构建目的,并且可以删除。
最后,代码签名身份设置还有一个选项,列为“自动配置文件选择器”。在许多情况下,您将希望使用此选项,因为它会尽力从构建目标的设置中自动查找您的 AppID,查找与该 AppId 匹配并包含您拥有公钥和私钥的证书的配置文件. 在某些自定义构建情况下,可能无法使用此选项,您必须使用其中一个固定的特定选项,例如我在第一张图片中的演示设置。如果您使用固定选项,请注意 - 任何时候更新配置文件时,您还需要更新代码签名身份构建设置以匹配较新的版本。
关键要点
祝您的构建配置好运,如果您有任何其他后续问题,请告诉我!