在 Xcode 中,“代码签名标识”是什么?
它们是证书吗?
它们是私钥吗?
它们是应用程序 ID 吗?
它们是预配配置文件吗?
如果我进入目标构建设置,它会要求输入代码签名标识,因此我需要弄清楚这个问题。
我以为我们使用自己的私钥来签名代码。然而,我的私钥名称没有显示出来,它显示了一张证书列表(我觉得是,但我也不确定)。
在 Xcode 中,“代码签名标识”是什么?
它们是证书吗?
它们是私钥吗?
它们是应用程序 ID 吗?
它们是预配配置文件吗?
如果我进入目标构建设置,它会要求输入代码签名标识,因此我需要弄清楚这个问题。
我以为我们使用自己的私钥来签名代码。然而,我的私钥名称没有显示出来,它显示了一张证书列表(我觉得是,但我也不确定)。
首先看黑色文本 - 从上面的图片看到 'iPhone Developer: Bryan Musial (XXXXXXXXXX)' - 这实际上是 Xcode 用来查找用于代码签名的公钥和私钥的主要项目。选择此项目时,您指示 Xcode 访问您的 Keychain 并尝试查找其“通用名称”字段与该字符串匹配的证书,然后提取该证书(其中包含公钥)和相关联的私钥以用于代码签名操作。
为了全面,如果您打开 Keychain Access 并双击任何 'iPhone Development:...' 或 'iPhone Distribution:...' 证书,将显示 Apple 发布给其开发人员的证书中编码的所有信息。如果我选择第一张图像中的条目,Xcode 将访问我的 Keychain 并获取此证书(注意:唯一的标识详细信息已被屏蔽或更改):
正如您所看到的,Xcode 选择的黑色文本与我的证书中的“通用名称”字段完全匹配,因此 Xcode 将返回此证书及其关联的私钥以用于代码签名我的应用程序。
再回头看 Xcode 设置,我们还注意到此菜单选项中有更多文本 -- 浅灰色文本标识将构建到应用程序中的预配配置文件。在我的示例设置中,Xcode 将获取其 AppID 设置为 'com.myiosapp.*' 的预配配置文件“MyiOSApp Testing”。Xcode 对于储存预配配置文件非常贪心,幸运的是 Organizer 提供了一个很好的地方来查看已安装的预配配置文件并了解其所包含的基本数据。对于第一张图片中的 Xcode 代码签名身份,我的 Organizer 中相关的预配配置文件如下:
'名称'列和 App 标识符列的末尾匹配了我 Xcode 设置中的浅灰色文本,因此这是将用于代码签名的预配配置文件。还要注意行末的 '状态' 列。在这种情况下,它是绿色的,表示“有效配置文件”。这意味着我的 Keychain 至少具有该预配配置文件中编码的证书的公钥和私钥之一。如果此状态不是绿色,则您当前的公钥/私钥和/或预配配置文件设置存在问题 - 只有将您正在尝试使用的预配配置文件的状态设置为绿色,才能进行代码签名。其他可能的状态选项包括:
其他可能会导致问题的因素
除了确保安装了公钥和私钥,并且配置文件设置正确之外,还有一些其他因素可能会使开发人员遇到问题。首先,Xcode会收集和保留配置文件直到您告诉它将其删除。在理论上,这不是一个超级大的问题,除非您对配置文件进行更改,下载并安装更新版本。许多时候,Xcode会选择正确的配置文件,但有时却会出现错误,导致您花费数小时查看“证书、标识符和配置文件”工具以及您的钥匙链,试图了解发生了什么。
建议1:在安装新版本的配置文件时,删除旧版本,以便Xcode不必做出决策。
如果您重新签发开发或分发证书,类似的情况也会发生——在构建期间,大多数时候Xcode会触发警告,指出存在模糊的证书。
建议2:在构建过程中注意模糊警告。这意味着您有一个旧的证书符合构建条件,并且可能会被无意中使用,从而导致构建问题。
建议3:每当您在Keychain中处理您的证书时,请查找带有红色“X”的“iPhone Developer: …”或“iPhone Distribution: …”证书。这表示该证书已过期或被撤销。无论如何,这个公钥(以及可能链接的私钥)对于构建目的已经没有用处,可以删除。
最后,Code Sign Identity设置还有一个名为“自动配置文件选择器”的选项。在许多情况下,您将希望使用此选项,因为它将尽力自动查找您的AppID是否与构建目标设置相对应,查找匹配该AppId并包含您具有公钥和私钥的证书的预配文件。在某些自定义构建情况下,可能无法使用此选项,您将不得不使用其中一个固定的特定选项,例如第一张图中的演示设置。请注意,如果您选择固定选项,则每次更新预配文件时,都需要更新代码签名身份生成设置以匹配更新版本。
要点总结
你只能使用证书签署你的应用程序。
该证书可以是以下之一:
以下内容将列出您在 Mac 上可用于签名的证书。
security find-identity -p codesigning -v
我的示例返回:
1) A0D1B4FBH9768DA909766DC27D6882088A994473 "Apple Development: Mohammad F (5ABCS7TRT6)"
2) 5404044732CF2A011D95C28222DCF0000D3B84E "Apple Development: mfaani@foo.com (97ENL333NA)"
我的两个证书可以通过以下任一方式进行识别:
A0D1B4FBH9768DA909766DC27D6882088A994473 或 "Apple Development: Mohammad F (5ABCS7TRT6)"
5404044732CF2A011D95C28222DCF0000D3B84E 或 "Apple Development: mfaani@foo.com (97ENL333NA)"
代码签名标识是能够唯一标识您的证书的任何东西。