【问题标题】:Invalid Signature - Code object is not signed at all签名无效 - 代码对象根本没有签名
【发布时间】:2015-08-19 15:37:05
【问题描述】:

我可以通过 Xcode 6.3.2 完美地提交我的应用程序。验证和分析完美通过。一旦它成功提交到应用商店,虽然我收到了来自 Apple 的电子邮件:

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

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

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

更新和解决方案:

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

我从一个新项目开始并提交到应用商店,除了标识符和正确的版本和内部版本号之外什么都没有,处理得很好。在那之后,我开始拼凑任何不是我自己的代码的资产,直到我收到“无效的二进制”电子邮件。我将其缩小到导致问题甚至不再使用的 Hockey App SDK(嵌入式框架),因此我将其从项目中删除(问题已解决)。令人不安的部分是,在验证或提交期间我没有任何失败,根据 github,这个目录和内容在一年内没有改变,这让我相信 Apple 的服务器端发生了一些变化。

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

我不确定这在我为 iOS 构建时有多大帮助,并且本文参考了 Mac,但 HockeyApp 解释说,为了分发到应用商店,您需要在此处使用自己的身份对框架进行签名:

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

如果有人对此有更多技术说明或为什么会突然改变,我很想更好地理解这一点。

【问题讨论】:

  • Ionic 和 Cordova 也存在同样的问题。您的分发资料是否也无效?
  • 在 Apple Development 论坛上,我看到有更多人面临同样的问题。这可能是 iTunes Connect 的问题。
  • Ionic 和 Cordova 也有同样的问题 - 我没有使用任何曲棍球应用程序。非常非常非常沮丧..
  • @schmoopy 对于 ionic,一些 .sh 文件造成了所有这些麻烦。我删除它们后解决了它。这是我得到这个解决方案的地方:github.com/driftyco/ionic-ion-swipe-cards/issues/…
  • @ahmed - 谢谢。我最终通过删除所有 www/lib 并添加回只需要的 js/css 解决了问题——除了一个不会导致问题的构建之外,我没有任何 sh 文件

标签: ios objective-c xcode app-store-connect


【解决方案1】:

我检查了很多地方,似乎有几件事现在被 iTunes Connect 拒绝了。解决方案通常是从 Target -> Build Phases -> Copy Bundle Resources 中删除有问题的资源(如@azizus 所述)。不幸的是,Apple 没有告诉您是什么文件导致您的构建出现此问题,因此您必须自己寻找。以下是我发现的一些可以做到这一点的项目:

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

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

我自己关于为什么会发生这种情况的理论是,Apple 因 Extensions 和 WatchKit 应用程序而做出了一些改变(或正在做出一些改变)。本质上,您在打包的 IPA(电话应用程序、扩展程序、手表应用程序)中包含了几个二进制文件。他们可能想确保你没有包含其他可能被执行的东西。不幸的是,对于大多数人来说,错误信息太模糊了(真的是不正确的)。

【讨论】:

  • 最有帮助的清单。我还有一个杂散的 plist 文件和一个似乎会导致问题的 mobileprovision 文件。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 作为评论更好
    • 您是否正在创建 Safari 扩展程序?这是资源/文件夹特有的吗?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        清除每个目标中代码符号资源规则路径的值解决了该问题。

        【讨论】:

          猜你喜欢
          • 2015-08-22
          • 2020-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-22
          • 2015-07-19
          相关资源
          最近更新 更多