签名无效 - 代码对象根本没有签名

时间:2015-06-04 20:42:27

标签: ios objective-c xcode itunesconnect

我能够通过Xcode 6.3.2完全提交我的应用程序。验证和分析完美传递。一旦它成功提交到应用程序商店,我收到了Apple的电子邮件:

“亲爱的开发者, 我们发现您最近为“App”发送了一个或多个问题。要处理您的交付,必须纠正以下问题: 签名无效 - 代码对象根本没有签名。确保您已使用分发证书(而非临时证书或开发证书)对您的应用程序进行了签名。验证Xcode中的代码签名设置在目标级别是否正确(覆盖项目级别的任何值)。此外,请确保您上传的软件包是使用Xcode中的Release目标而不是Simulator目标构建的。如果您确定您的代码签名设置正确,请在Xcode中选择“全部清除”,删除Finder中的“构建”目录,然后重建您的发布目标。有关详细信息,请参阅https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html 一旦纠正了这些问题,您就可以重新更新已更正的二进制文件。“

我尝试重新下载分发证书,重新生成分发配置文件,将“--deep”添加到代码签名“其他代码签名标志”中。我甚至检查了包名称等,everthing是字母数字。我能够在5月22日提交罚款,现在6月3日一切都破了。

没有任何意义,任何帮助都会受到赞赏!

更新&解决方案:

虽然我没有很好地解释为什么在上周突然发生这种情况,但我今天早上终于找到了解决办法。

我开始使用一个新项目并提交给应用程序商店,除了标识符和正确的版本和内部版本号之外,处理正常。之后,我开始拼接任何不属于我自己的代码的资产,直到我收到“无效的二进制”电子邮件。我把它缩小到Hockey App SDK(嵌入式框架),导致问题,甚至不再使用,所以我从项目中删除它(问题解决了)。令人不安的是,在验证或提交期间我没有任何失败,根据github,这个目录和内容在一年内没有变化,这让我相信苹果公司的服务器端发生了变化。

我确实看到很多帖子都是谷歌说框架需要签名等等,当使用Xcode 6和iOS 8时,它似乎是标准,这就是为什么我认为它可能是这些内容。

我不确定这对我有多大帮助,因为我正在为iOS构建,本文引用了Mac,但是HockeyApp解释为了分发到应用程序商店,您需要在此处使用您自己的身份签署框架:

http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/hockeyapp-for-mac-os-x

如果有人对此有任何技术性说明或为什么这突然改变我喜欢更好地理解这一点。

6 个答案:

答案 0 :(得分:1)

我已经检查过各种各样的地方,似乎有几件事现在被iTunes Connect拒绝了。解决方案通常是从目标中删除违规资源 - >构建阶段 - >复制捆绑资源(如@azizus提及)。不幸的是,Apple没有告诉你什么文件导致你的构建问题,所以你必须自己去寻找。以下是我发现的一些项目:

  • Shell脚本(查找.sh文件,尽管它们可能有所不同 扩展)
  • 此外,请注意列出的可执行文件 不应该。那些可能是寻找shell脚本的好地方 你可能错过了。
  • 框架(框架捆绑,甚至.a或.o文件 - 你 不需要它们,因为它们将被编译成可执行的二进制文件)
  • DocSets(我不知道为什么,但我发现了HockeyApp SDK 包括一个DocSet包,这是我的经验中的原因)
  • 有时候,由于一些奇怪的权利,也可能会发生这种情况 问题。您拥有的权利可能与之中的应用程序不匹配 供应门户。
  • 注意您的应用名称或文件名中的无效字符(例如 通配符)

这是一个相当广泛的列表,我在搜索中帮助的是构建存档,然后使用finder在存档中显示.app的内容,按文件类型排序。奇怪的是,这些文件实际上存在于_CodeSignature / CodeResources文件中。

我自己关于为什么会发生这种情况的理论是Apple因为Extensions和WatchKit应用程序而做了一些更改(或正在进行一些更改)。从本质上讲,您在打包的IPA(手机应用程序,扩展程序,手表应用程序)中包含了几个二进制文件。他们可能希望确保您不包含可能被执行的其他内容。不幸的是,对于大多数人来说,错误信息太模糊(实际上它是不正确的)。

答案 1 :(得分:1)

我花了3天的时间来调试。

最后,这是由于我创建的外部框架(我称之为X),我通过carthage导入。 X有自己的依赖关系,它也是通过carthage导入的。为了链接这些框架,它在构建设置中有一个名为Framework Search Paths的路径,设置为框架的位置。由于某种原因,这个框架中的这个标志导致了问题中指定的问题。我最终使用Git子模块导入了X的依赖项,因此我不必设置Framework Search Paths标志。我导出框架并手动将其添加到我提交给AppStore的项目中。然后它奏效了。

答案 2 :(得分:0)

我联系了HockeyApp,他们建议不要将SDK添加到应用包中。所以我导航到Target - >构建阶段 - >复制Bundle Resources并从那里删除HockeySDKResources.bundle。 iTunes Connect接受我的二进制文件。

答案 3 :(得分:0)

在我的情况下,它是一个未使用的重复的info.plist。 (找出问题并不容易)。我删除了我项目中的几乎所有文件,直到删除了这个文件并且它已经工作了

答案 4 :(得分:0)

清除每个目标中代码签名资源规则路径的值解决了这个问题。

答案 5 :(得分:0)

当我为我的资源文件夹“创建文件夹引用”而不是在添加时“创建组”时,我可以重现这一点。