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

我能够通过Xcode 6.3.2提交我的应用程序非常好。 validation和分析通过完美。 一旦它成功提交到应用程序商店,虽然我收到来自苹果的电子邮件:

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

我已经尝试redownloading发行证书,重新生成分发configuration文件,添加“ – 深”代码签名“其他代码签名标志”。 我甚至检查了软件包名称等,everthing是字母数字。 我能在5月22日提交罚款,现在6月3日一切都打破了。

没有任何意义,任何帮助将不胜感激!

更新和解决scheme:

虽然我没有很好的解释,为什么在上周突然发生了这个事情,我终于在今天早上find了解决办法。

我开始一个新的项目,并提交到应用程序商店,只有标识符和正确的版本和内部版本号,处理得很好。 之后,我开始拼凑任何不属于自己的代码的资产,直到收到“Invalid Binary”电子邮件。 我把它缩小到了引起问题甚至不再被使用的Hockey App SDK(embedded式框架),所以我将它从项目中移除了(问题已经解决)。 令人不安的是,在validation或提交期间没有任何事情发生,我根据github的说法,这个目录和内容在一年之内没有改变,这导致我相信苹果的服务器端有所改变。

我通过谷歌看到了很多post,说框架需要签名等,当使用Xcode 6和iOS 8时,它似乎是标准,这就是为什么我认为它可能是沿着这些线。

我不知道这是多么有帮助,因为我正在为iOS构build,这篇文章是参考Mac,但HockeyApp解释为了分发到应用程序商店,你需要在这里用自己的身份签署框架:

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

如果任何人有关于此的技术笔记或者为什么这个突然改变的Id爱更好地理解这个。

我查了很多地方,似乎有几件事现在被iTunes Connect拒绝了。 解决scheme通常是从目标 – >构build阶段 – >复制捆绑资源(如@azizus提及)中删除有问题的资源。 不幸的是,苹果公司不会告诉你什么文件导致这个问题与你的构build,所以你必须去寻找自己。 以下是我发现的一些项目:

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

这是一个非常广泛的列表,我在search中帮助的一个工作是构build一个档案,然后使用查找器在档案中显示.app的内容,按文件typessorting。 奇怪的是这些文件实际上存在于_CodeSignature / CodeResources文件中。

我自己的理论为什么会发生这样的事情,苹果公司做了一些改变(或正在做一些改变),因为扩展和WatchKit的应用程序。 从本质上讲,你在打包的IPA(电话应用程序,扩展,手表应用程序)中包括一对二进制文件。 他们可能要确保你没有包含可能被执行的其他东西。 不幸的是,大多数错误信息太模糊(实际上是不正确的)。

这花了我3天的时间来debugging。

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

我联系了HockeyApp,他们build议不要将SDK添加到应用程序包中。 所以我导航到目标 – >构build阶段 – >复制捆绑资源,并从那里删除HockeySDKResources.bundle。 iTunes Connect接受我的二进制文件。

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

清除每个目标中的代码签名资源规则path的值可解决问题。