什么是代码签名身份?

时间:2013-04-14 06:40:59

标签: xcode4.5

XCode中的“代码签名身份”是什么?

他们是证书吗?

它们是私钥吗?

他们是app app吗?

他们是配置文件吗?

如果我转到目标构建设置,它会询问代码签名身份,所以我需要弄明白这一点。

我以为我们使用私钥签署了代码。但是,我的私人密钥名称都没有显示出来。它显示了证书列表(我想,虽然我甚至不确定。)

1 个答案:

答案 0 :(得分:127)

在尝试制作iOS应用程序的设备时,您肯定会遇到一个非常快速的主题,并且是一个令人头疼的常见问题。首先,让我围绕代码签名过程中涉及的每个术语设置一个小结构(对于您和之后遇到此问题的任何人),然后我们可以转向您的主要问题:

CodeSign术语

iOS设备构建的代码签名阶段是我们在应用程序中加密签名和保护特定数据排列的过程,包括应用程序可执行二进制本身,任何嵌入式媒体资产(如按钮纹理,自定义图稿,字体)等等,以及一组关于我们的应用程序的元数据,并代表一个独特的指纹'我们的应用程序数据。此指纹是Apple和iOS使用的指纹,有助于确保我们的应用程序在交付给用户的设备时或在用户的iOS设备上运行时不会被篡改。为此,开发人员需要向Apple注册,设置应用程序标识符,请求开发和分发证书,注册一组测试设备,最后请求供应配置文件以进行开发。每个元素的作用如下:

  • 应用标识符(或AppID) - 反向DNS样式的字符串,可以唯一标识AppStore上的一个iOS应用程序。
  • 开发和分发证书 - 这些是由Apple加密签名的数字文档,用于证明颁发文档的个人身份。对于那些熟悉公钥基础结构的人来说,证书本身包含一个公钥,可用于在过程的后期验证签名的完整性。
  • 测试设备 - iOS软件唯一获得批准的标准分销渠道是通过AppStore。通过注册测试设备,开发人员可以规避AppStore并将软件直接安装到设备以进行开发和测试。在给定会员年中允许的测试设备总数为100个测试设备。
  • 供应配置文件 - 包含三个主要组件的文档:1)正好一个App ID,2)一个或多个iOS Developer证书,以及3)零个或多个已注册的测试设备,其中名为iOS app可能会直接安装。本文档的内容由Apple加密签名,以确保其内容不会被篡改。

此文件的存在以及指纹检查确定是否可以将开发人员生成的应用程序安装到设备,因为它包含“谁”的概念。 (证书),'什么' (AppID),以及' Where' (哪些设备)。

很好,我明白了......现在这个Code Sign Identity会怎么样?

在单个构建目标的构建设置的上下文中,术语代码签名标识指的是安装在开发人员的密钥链中的那些证书的公用名称&#39;的机器。在Xcode构建设置中,它显示为一个选项列表,开发人员必须从中选择要用于CodeSign的标识 - 在此菜单的每个部分中编码很多信息:< / p>

Xcode Code Sign Identity

首先看看黑色文字 - 来自上面的图片&#39; iPhone开发者:Bryan Musial(XXXXXXXXXX)&#39; - 这实际上是Xcode用于查找用于代码签名的公钥和私钥的主要项目。选择此项目时,您正在指示Xcode进入您的钥匙串,并尝试找到一个名为“公共名称”的证书。字段匹配该字符串,然后获取该证书(包含公钥)和相关的私钥,以便在代码签名操作中使用。

如果您打开Keychain Access并双击iPhone开发中的任何一个,只需要彻底:...&#39;或者&#39; iPhone发行:......&#39;证书显示Apple向其开发人员颁发的证书中编码的所有信息。如果我要在第一张图片中选择条目,Xcode会进入我的钥匙串并取回此证书(注意:唯一识别详细信息已被X&#39; d或更改):

Keychain Certificate Common Name Example

正如您所看到的,Xcode选择中的黑色文本与我的证书中的Common Name字段完全匹配,因此Xcode将撤回此证书及其链接的私钥,以便在代码签名我的应用程序中使用。

再次回顾Xcode设置,我们还注意到该菜单选择中还有更多文本 - 浅灰色文本标识将在应用程序中构建的Provisioning Profile。在我的示例设置的情况下,Xcode将获得配置文件&#34; MyiOSApp Testing&#34;它的AppID设置为&#39; com.myiosapp。*&#39;。 Xcode非常贪婪地使用存储配置文件,幸运的是,管理器为您提供了一个查看已安装的配置文件的好地方,并了解它们包含的基本数据。再次对于第一张图片中的Xcode代码签名身份,我的管理器中的相关配置文件将如下所示:

Organizer Provisioning Profile

&#39;姓名&#39;应用标识符列的列和尾端与我的Xcode设置中的浅灰色文本匹配,因此这是在代码签名期间选择使用的配置文件。同样重要的是要注意“状态”和“状态”。行末尾的列。在这种情况下,它是绿色并指示“有效配置文件”。这意味着我的钥匙串具有至少一个在该供应配置文件中编码的证书的公钥和私钥。如果此状态不是绿色,则表示您当前设置公钥/私钥和/或供应配置文件时出现问题 - 除非您尝试使用的供应配置文件的状态设置为绿色,否则代码签名将无法工作。其他可能的状态选项包括:

Organizer Provisioning Status Options

  • 找不到有效的签名身份:您没有此供应资料中编码的至少一个证书的公钥和私钥。从管理器中删除配置文件,然后返回到证书,标识符和developer.apple.com/ios上的配置文件工具,确保您的开发证书包含在配置文件中。验证Keychain Access中的证书是否已过期或已撤销,并且私钥已链接到公钥证书。
  • 个人资料已过期:供应资料的到期日已过期。从管理器中删除此配置文件,然后重新访问证书,标识符和developer.apple.com/ios上的配置文件工具,并重新发出此配置文件(如果实际上仍然需要)

可以绊倒你的其他物品

除了确保安装了公钥和私钥以及配置文件设置恰到好处的所有细微差别之外,还有一些其他因素可以帮助开发人员。首先,Xcode收集供应配置文件并挂起,直到您告诉它删除它们。从理论上讲,除非您在更改供应配置文件,下载和安装新版本的情况下,这不是一件非常重要的事情。很多时候,Xcode会抓住正确的个人资料,但有时候它并没有做到正确,而且你会花费数小时查看证书,标识符&amp;配置文件工具以及您的钥匙串,以尝试了解正在发生的事情。

建议1:安装较新版本的配置文件时,请删除较旧版本,以便Xcode不会被置于可能需要做出决定的位置。

如果您重新签发开发或分发证书,则会发生类似情况 - 大多数情况下,Xcode会在构建期间触发关于模糊证书的警告。

建议2:在构建过程中注意歧义警告。这意味着您有一个符合构建标准的旧证书,可能会被无意中使用,从而可能导致构建问题。

建议3:只要您在Keychain处理证书,请寻找iPhone开发人员:...&#39;或者&#39; iPhone发行:......&#39;有红色&#39; X&#39;在他们。这表明证书已过期或已被撤销。无论哪种方式,此公钥(以及可能链接的私钥)对于构建目的都没有进一步的用处,可以删除。

最后,代码签名身份设置还有一个选项,列出为&#39;自动配置文件选择器&#39;。在许多情况下,您将需要使用此选项,因为它将尽最大努力从构建目标的设置中自动查找AppID,查找与该AppId匹配的Provisioning Profile并包含您同时拥有的证书和私钥。在某些自定义构建环境中,可能无法使用此选项,您必须使用其中一个固定的特定选项,例如第一张图像中的演示设置。建议您使用固定选项 - 每次更新配置文件时,您还需要更新代码签名身份构建设置以匹配较新版本。

关键要点

  • 确保将Keychain和Xcode Provisioning Profile列表保持清洁和重复数据删除。
  • 安装证书和配置文件后,请确保管理器将配置文件的状态报告为绿色(&#39;有效的配置文件&#39;)。任何其他状态表示您的密钥链和配置文件之间存在问题,在您考虑运行构建之前需要解决该问题。
  • 尝试使用&#39;自动配置文件选择器&#39;。如果他们也不必考虑代码签名身份设置,您的团队成员和任何自动构建系统都会对您更满意。
  • 如果您无法使用自动配置文件选择器,请确保始终将该设置保持为最新的配置文件迭代。

您的构建配置祝您好运,如果您有任何其他后续问题,请告诉我们!