如何熟悉代码签名问题?

4
每次处理代码签名和配置文件时,我都会遇到奇怪的问题。大多数情况下出现“未找到代码签名身份”,如果没有,则会出现“未找到匹配的配置文件”、“没有具有有效签名身份的配置文件”的类似错误。
尽管我对代码签名和配置背后的理论和知识很熟悉,但仍然有许多坑我每次都无法应对。有时在设置新应用程序时会失败,有时不会。
有5*2种不同的选择代码签名身份的方法。它们之间有何区别?如果我为调试和发布选择一个不同的身份,那么"任何iOS SDK"的原因是什么?
此外,有两个地方提供此对话框:Project-Settings->Buildsettings是第一个地方,也适用于Build Settings下的Target。两者不同步,因此如果我在第一个位置更改代码签名,我必须在第二个位置再次更改。是否有一种方法可以使它们保持同步?
哪个代码签名身份最适合各行(调试、调试->任何iOS SDK、发布、发布 -> 任何iOS SDK),因为我可以选择开发者身份和分发身份(我可以想象分发身份用于发布,而开发人员身份用于调试,但由于所有内容都失败了,我不知道)。
我的做法:
为我们团队的每个开发人员在成员中心存储了有效的证书,并为团队创建了一个用于Ad Hoc分发的证书。我们还创建了AppIDs,其在项目设置中完全反映了相同的设置。在此期间,我们避免使用变量,并在项目设置中使用完全相同的应用程序ID,以减少这方面的风险并简化事情。
将配置文件从“自动”切换到此应用程序的特定配置文件时,代码签名身份会更改为不同的值,在项目设置和目标构建设置之间也不同步:
在Target->Build Settings上,我们得到以下结果: enter image description here 在Project->Build Settings上,我们得到不同的结果: enter image description here 哪一个更准确? 在“产品” -> “归档” -> “验证”之后,我们会收到以下错误消息: enter image description here 这里无论我们是否选择了不同的代码签名身份都没有关系。实际上,只是为了玩“试验和错误”,我们尝试了几乎所有多个代码签名身份的组合,以了解XCode会做什么。
在来自存档 ->验证的此错误消息之后,先前选择的配置文件将被替换为由随机生成的字符串命名的另一个配置文件。

输入图像描述 输入图像描述

有谁能告诉我这里发生了什么,以及如何解决这些问题?

我已经阅读了很多关于此主题的文档。但是,大多数关于此主题的教程都已过时,因为在XCode 4和XCode 6之间发生了几次更改。即使苹果文档也基本上是基于过时的XCode版本和过时的成员开发人员中心版本的截屏。

更新

正如Ian McDonald正确指出的那样,最后一个问题(由最后两个截图涵盖)已得到回答。重新创建Provisioning Profile后,它不会被随机生成的字符串替换,但IPA创建仍然无法使用“未找到代码签名标识”。

现在看起来是这样的: 输入图像描述


4
请有人将这个 Stack Overflow 的问题转发给 Tim Cook。 - Adam Jenkins
1
那不是“随机生成的字符串”,而是一个在您的计算机上不再安装的配置文件的标识符。 - Ian MacDonald
谢谢指出这个问题,Ian。我重新创建了一个配置文件,现在不会再被随机字符替换了。但是,代码签名身份仍然无法找到,就像问题的更新部分所描述的那样(在末尾)。 - itinance
2个回答

1

您的问题比较长,但如果您在存档或发布应用时遇到问题,则需要按照以下步骤进行操作

第一步:代码签名

如果您使用 Debug 构建应用,则必须使用 iPhone 开发者的签名 --> 通用(如果您使用多个)或特定签名(根据您在密钥链中拥有的证书而定)

但是,如果您使用 release 构建应用,则应使用 iPhone 发布的签名 ---> 通用或特定签名

第二步:配置文件

如果您使用 Debug 进行构建,则配置文件 Debug 应匹配您的包详细信息并为开发目的

release 则应该是分发配置文件,您可以在 Apple 开发者网站上创建

希望这能帮到您,同时请查看this


1
据我所读,您已将目标中的配置文件从“xxx.xxx”更改为“xxx.xxxTests”,这实际上是不同的包标识符,因此错误有效。你确实有两个选择:
  1. 将您的包标识符更改回“xxx.xxx”。这是最合适的选择。
  2. 在门户网站上创建一个新的包标识符“xxx.xxxTests”,以及一个绑定到相同证书的“xxx.xxxTests”的新的配置文件。在XCode关闭时,将新的配置文件拖到您的XCode应用程序图标上,然后打开您的项目。
进行测试时,您不必更改包标识符。当您进行部署时,您只需更改您的目标正在编译的配置文件(开发 vs 分发)。
编辑: 我在这里有一些关于配置文件的技巧:How to become familiar with code signing issues? 快速且简单的配置文件工作方式如下:
  • 当您被添加到Apple供应商门户时,您的证书是打开大门的钥匙。任何您编译的代码都必须与您的证书关联,否则您将无法正确地编译/导出您的代码。
  • 您的bundle identifier本质上是iOS识别您的应用程序的方式。从概念上讲,如果您想在同一设备上多次安装应用程序,请创建多个bundle标识符。
  • 您的provisioning profile将所有组件绑定在一起。prov文件告诉XCode,您计划使用您的证书编译由您的bundle identifier标识的应用程序。如果它是开发版本,则仅门户中专门分配给prov文件的设备才能安装您的应用程序。

在XCode中,您需要确保您的目标bundle标识符与provisioning profile中的bundle标识符匹配。同样,请确保您的代码签名身份与您在门户中设置并与provisioning profile绑定的证书相匹配。最后,在代码签名身份下拉列表中选择适当的provisioning profile。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接