无效的二进制或无效的 Swift 支持

Posted

技术标签:

【中文标题】无效的二进制或无效的 Swift 支持【英文标题】:Invalid Binary Or Invalid Swift Support 【发布时间】:2015-01-18 14:59:42 【问题描述】:

在我将我的应用程序发送到应用程序商店以供批准后,我在 iTunes Connect 中收到消息“无效的二进制文件”。然后我在 Apple 的电子邮件中收到以下消息:

无效的 Swift 支持 - 捆绑包包含无效的 Swift 实现。该应用程序可能是使用不合规或预发布工具构建或签名的。访问 developer.apple.com 了解更多信息。

我的应用程序只是一个简单的游戏应用程序。没有调用外部程序。我研究了这条消息并检查了以下内容:

    xcode 是最新的 - 已在应用商店中查看 EMBEDDED_CONTENT_CONTAINS_SWIFT 为 YES 或 NO 使用 xcode 应用程序发送,而不是应用程序加载器 没有使用命令行构建 (Xcode 菜单 -> 首选项 -> 位置选项卡 - 验证命令行工具与 Xcode 版本匹配。 “清理”了应用程序,重建并重新归档,然后重新发送,同样的消息 应用程序通过管理器验证良好 查看存档内容会显示 SwiftSupport 文件夹 我只使用一个开发者账号,从未登录过任何其他开发者账号 我在网上找不到任何可以帮助解决此问题的内容。 我正在运行 OS X Yosemite 10.10.1。 xcode 版本是 6.1.1 版本 6A2008a - 使用此版本构建、清理和发送 我还按下了 Option 键和“已清理的构建文件夹”并重新发送了相同的消息

我在网上或任何论坛中都找不到任何其他原因。任何帮助是极大的赞赏。感谢您的宝贵时间。






我找到的解决方案

编辑:

(1)

您联系 Apple 并等待很长时间......重置 iTunes 连接,因为这个问题出现在 Apple 中。 (Apple 要求发送此问题的日志)

(2)

另一个解决方案,您在 iTunes 上创建另一个项目应用程序连接并上传您的工作,这个解决方案工作正常,是我的解决方案。

(3)

另一种解决方案,您在 Xcode 上创建一个新项目,将您的项目复制并粘贴到这个其他项目中......(创建新的配置文件等。)然后将您的工作上传到 Itunes Connect 上的同一个项目应用程序中。

(4)

步骤(2)+步骤(3),在Xcode和Itunes Connect中创建一个新项目。

(5)

新建一个同名bundle标识符的项目,完美运行!






【问题讨论】:

我想在这种情况下你应该联系 Apple 支持。 【参考方案1】:

参见:Technical Q&A QA1881 在 Objective-C 中使用 Swift 嵌入内容。

您似乎只需将 EMBEDDED_CONTENT_CONTAINS_SWIFT 设置为 YES “如果您正在构建一个不使用 Swift 但嵌入内容的应用程序,例如使用框架的内容”。

您的应用是用什么语言编写的?如果 Swift 你不需要 EMBEDDED_CONTENT_CONTAINS_SWIFT。

【讨论】:

我使用 Swift 语言。我尝试不使用 EMBEDDED_CONTENT_CONTAINS_SWIFT 到 No 是行不通的.. 我正在使用一个完整的 Objective-C 项目,根本没有 swift in,我收到了这条消息。无效的 Swift 支持 - 捆绑包包含无效的 Swift 实现【参考方案2】:

前几天我遇到了这个问题。做了一些工作,但我终于找到了问题(至少对我来说)。我在网上阅读的所有内容都说问题与此设置有关:

EMBEDDED_CONTENT_CONTAINS_SWIFT

当这开始失败时,我将其设置为 NO。所以我尝试将其设置为 YES,但由于同样的原因它仍然失败。 GUI 不允许我删除此设置,我只能在 YES 和 NO 之间进行更改。

不管怎样,我的代码没有嵌入代码,都是 SWIFT 代码。

无论如何,所以我决定卸载 XCode 并重新下载它,希望这会有所帮助。

在下载 XCode 时,我启动了 Beyond Compare,并将我当前的项目与上周的备份进行比较,看看有什么变化。

Beyond Compare 发现 Projectname.xcodeproj 文件深处的一个文件更改了...一个名为 project.pbxproj 文件的文件。

在这里面,是那一行:

EMBEDDED_CONTAINS_SWIFT = 否;

这出现在我项目的当前版本中(失败了)。有趣的是,这一行在一周前的旧备份版本中根本不存在。我知道我没有设置这个标志。 Xcode 中一定有一些东西在幕后做了。

无论如何,Xcode 完成下载,我重新安装。启动它,打开我的项目,神奇的是,Xcode 从 .pbxproj 文件中删除了该行,现在我的项目已成功上传到 itunesConnect。

BottomLine:xcode中存在一个错误,它可能会无缘无故地决定将此行添加到您的项目中,从而使您的项目无效。

解决方案:自己编辑 pbxproj 文件并删除该行可能会起作用......但重新安装 XCode 似乎可以消除它所遇到的任何困惑,并且它为我删除了它。

【讨论】:

【参考方案3】:

如果您要提交具有 AppleWatch 扩展程序的应用程序,如果您尝试使用应用程序加载器实用程序和 zip 文件提交应用程序,则可能会收到此错误。我得到了错误:

捆绑包包含无效的 Swift 实现。 捆绑包包含无效的 WatchKit 实现。

对于第一个错误,我经历了几乎所有解决方案 - 但它是通过 Xcode 提交来修复它的。

【讨论】:

【参考方案4】:

xcode 6.1 有点旧,包含旧的 swift。 xcode 6.4 是最新的公共 IIRC

【讨论】:

【参考方案5】:

“检查您的代码签名。我在自动签名时遇到此错误。我将我的开发配置文件用于开发,并将生产配置文件用于发布版本,错误消失了。” Link for the Quote

这有时会无意间发生。

【讨论】:

【参考方案6】:

为安全起见,您应用的所有组件都应使用相同版本的 Xcode 和 Swift 编译器构建,以确保它们协同工作。

我认为您需要进行 pod clean 和 install。我认为您的一个 swift pod 是在旧版本的 Xcode 上创建的,您更新了 Xcode,然后尝试向应用商店提交。

阅读关于binary compatibility and frameworks的apple swift博客

您还需要在构建设置中指定嵌入的内容包含 swift:

EMBEDDED_CONTENT_CONTAINS_SWIFT

启用此设置以指示嵌入在目标产品中的内容包含 Swift 代码,以便可以将标准 Swift 库包含在产品中。

【讨论】:

以上是关于无效的二进制或无效的 Swift 支持的主要内容,如果未能解决你的问题,请参考以下文章

“无效二进制”iTunes Connect (Swift 2)

请帮助解决无效的二进制问题

iTunes连接中的无效二进制文件

向 App Store 提交二进制文件 - 无效的代码签名权利

带有无效签名的无效二进制文件

上传二进制文件时代码签名权利无效