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

4
我能够完美地通过Xcode 6.3.2提交我的应用程序。验证和分析都通过了。但是,一旦成功提交到应用商店,我就会收到来自Apple的电子邮件:
“亲爱的开发者, 我们发现您最近提交的“App”存在一个或多个问题。要处理您的交付,必须纠正以下问题: 无效签名-代码对象根本没有签名。请确保您已使用发布证书而不是Ad Hoc证书或开发证书签署应用程序。验证Xcode中的代码签名设置是否正确(这将覆盖项目级别的任何值)。此外,请确保您正在上传的束是使用Xcode中的发布目标而不是模拟器目标构建的。如果您确信代码签名设置正确,请在Xcode中选择“全部清理”,在Finder中删除“构建”目录,并重新构建您的发布目标。有关更多信息,请参见https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html 纠正这些问题后,您可以重新交付已纠正的二进制文件。”
我尝试重新下载发布证书、重新生成发布配置文件,向代码签名的“其他代码签名标志”添加“--deep”。我甚至检查了束名称等,所有东西都是字母数字。我在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这个链接介绍了HockeyApp在Mac OS X上的客户端集成。如果有人对此有更多的技术笔记,或者知道为什么突然改变,请让我更好地理解这个问题。

1
我也遇到了Ionic和Cordova的同样问题。你的分发配置文件也是无效的吗? - com2ghz
在苹果开发论坛上,我看到有更多的人面临着同样的问题。这可能是在Itunes Connect上的问题。 - com2ghz
我也遇到了Ionic和Cordova的同样问题 - 而且我没有使用任何Hockey应用程序。非常非常令人沮丧... - schmoopy
@schmoopy 对于Ionic来说,一些.sh文件引起了所有的麻烦。在删除它们后,我解决了这个问题。这是我找到这个解决方案的地方:https://github.com/driftyco/ionic-ion-swipe-cards/issues/31#issuecomment-101645762 - Ahmad Al Haddad
@ahmed - 谢谢。最终我通过删除所有的www/lib并仅添加所需的js/css来解决了问题——除了一个用于构建的sh文件外,我没有任何其他的sh文件也没有引起问题。 - schmoopy
6个回答

2
我已经检查了许多地方,似乎有几个东西现在被iTunes Connect拒绝了。解决方案通常是从目标->构建阶段->复制包资源中删除有问题的资源(如@azizus所提到的)。不幸的是,苹果不会告诉你哪个文件导致了构建问题,因此你必须自己去找。以下是我发现可能会出现问题的一些项目:
- Shell脚本(查找.sh文件,尽管它们可能有不同的扩展名) - 另外,注意列为可执行文件的文件,当它们不应该是时。这些可能是寻找你可能错过的shell脚本的好地方。 - 框架(框架束,甚至.a或.o文件-你不需要它们,因为它们将编译到可执行二进制文件中) - DocSets(我不知道为什么,但我发现HockeyApp SDK包括一个DocSet捆绑包,这是我的经验原因) - 有时这也可能是由于一些奇怪的权利问题。你拥有的权利可能与 provisioning portal 中的应用程序不匹配。 - 注意你的应用程序名称或文件名中是否存在无效字符(如通配符字符)
这是一个相当广泛的列表,我在搜索中做的一件事是构建一个存档,然后使用finder显示存档中.app的内容,按文件类型排序。奇怪的是,这些文件实际上存在于_CodeSignature/CodeResources文件中。
我自己对为什么会发生这种情况有一些理论,即苹果由于扩展和WatchKit应用程序而进行了一些更改(或正在进行一些更改)。基本上,你在打包的IPA中包含了几个二进制文件(手机应用程序、扩展、手表应用程序)。他们可能想确保你没有包含其他可能被执行的东西。不幸的是,大多数错误消息都太模糊了(实际上是错误的)。

最有用的清单。我还有一个游离的plist文件和一个mobileprovision文件,似乎引起了问题。 - Faisal Memon

1
这让我调试了3天时间。
最终原因是我通过carthage导入的一个外部框架(我们称之为X),它有自己的依赖项,也通过carthage导入。为了链接这些框架,它在构建设置中有一个名为“Framework Search Paths”的路径,指向框架的位置。由于某种原因,正是这个标志在这个框架中引起了问题。最终,我使用Git子模块导入了X的依赖项,这样我就不必设置“Framework Search Paths”标志了。然后我将该框架导出并手动添加到我提交到AppStore的项目中。然后它就正常工作了。

1
当我添加资源文件夹时选择“创建文件夹引用”而不是“创建组”,我可以重现这个问题。

更好的做法是将其作为注释。 - StupidWolf
你正在创建Safari扩展程序吗?这是否特定于Resources/文件夹? - bze12

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

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

0
在我的情况下,问题是一个未被使用的 info.plist 重复文件(很难找到问题所在)。我删除了项目中几乎所有的文件,直到删除这个文件为止,然后...它就可以工作了。

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