无效的二进制或无效的 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)