Xcode-错误ITMS-90635-捆绑中的无效Mach-O-提交至App Store


71

将应用程序提交到应用商店时,我只是收到此错误。

在此处输入图片说明

这是否意味着我需要为所有依赖项设置ENABLE_BITCODE?我尝试了一下,但是随后出现错误消息,说明依赖项与位码不兼容(或类似的东西)...


好的,我已经在“构建设置”中启用了ENABLE_BITCODE,并且不得不更新Facebook Kit,它可以正常工作。
努诺·贡萨尔维斯

Answers:


65

今天早上我遇到了同样的问题。实际上,答案出在以下错误中:“验证平台的所有目标的ENABLE_BITCODE构建设置的值是否一致”

我有一个目标(将ENABLE_BITCODE设置为NO),使用了多个将ENABLE_BITCODE设置为YES的吊舱。因此,我要做的就是在我的项目目标中将ENABLE_BITCODE设置为YES。但是我想您可以选择,也可以在所有正在使用的库中将ENABLE_BITCODE设置为NO。


1
正如我在问题评论中提到的那样,我更新了项目的构建设置。但是我想知道,在哪里可以找到特定库的构建设置?我在整个项目中搜索了ENABLE_BITCODE,但仅从主要项目目标中找到了一个。
努诺·贡萨尔维斯

1
这取决于您用来导入库的方式。对我来说,由于我正在使用Cocoapods,因此在工作区中有一个pods项目。当我单击Pod项目时,所有目标均可用。
Guillaume L.

该死的。有时候我很傻 我在搜索Pods项目,而不是搜索项目本身……我认为有时我的大脑冻结了。:D
努诺·贡萨尔维斯

我所有的库都使用位码。我猜不是,我将其设置为yes,因为它在应用商店上进行了一些优化。还是我读。再次感谢。:)
NunoGonçalves16年

1
乐于帮助!对我来说也是一样,我所有的库都使用位代码,因此更新项目而不是更新所有的pod更加容易:)现在为下一个问题做准备:PIE警告;)
Guillaume L.

64

最简单,最常见的修复程序:

通过Xcode提交应用时,您可以取消选中“包含位码”。 取消选中该框

如果使用xcodebuild,则可以使用传递的exportOptionsPlist,其值uploadBitcode设置为false。在我的情况下,我们xctool用于构建应用程序,并且无法传递exportOptionsPlist,因此我们不得不从所有框架中删除位码。


如果有人在使用cocoapods并想为其框架禁用位码,则只需将以下内容添加到您的podfile中:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

通过https://stackoverflow.com/a/32685434/1417922


要进一步说明此问题的原因,请执行以下操作:

看来苹果昨天才开始强制执行。如果您的主二进制文件禁用了位代码,但是您包括启用了位代码的静态库或框架,则它将无法通过验证。它也有另一种方式:如果您的主二进制文件启用了位代码,但是您包括禁用了位代码的库/框架,它将使验证失败。

我有一些来自GoogleMaps和Amazon的依赖关系,这使得切换所有内容以启用位码变得很简单,因此我只是禁用了它,并从我在项目中导入的一个静态库中删除了位码。您可以使用以下命令从任何二进制文件中剥离位码

$ xcrun bitcode_strip -r {Framework}.dylib -o tmp.dylib
$ mv tmp.dylib {Framework}.dylib

https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html

尽管以上是解决问题的方法,但我不同意如果主二进制文件禁用了位码,则所有包含的二进制文件也都需要它。位代码只是Apple可以用于应用程序精简的一些IR代码-为什么他们不将其从其他二进制文件中剥离(我认为这是他们以前的工作)?这对我来说意义不大。

苹果线程https://forums.developer.apple.com/thread/48071


1
这也是我所需要的。我们使用两个预编译的二进制库,一个启用了位代码,另一个禁用了位代码。而且无法重新编译它们中的任何一个以匹配设置!
杰夫·洛克哈特

非常感谢,真的很有帮助!
Svitlana

2
如果您有WatchApp,则此方法将不起作用,因为您必须提交WatchApp的位代码
RPM


3

对于迦太基

  1. 在项目文件夹中打开您的库(Carthage-> Checkouts-> [lib name])
  2. 然后在Xcode中打开每个库
  3. 设置启用位码-在构建设置中为否 在此处输入图片说明
  4. 对列表中的每个库执行此操作
  5. 建造迦太基 carthage build --platform xxx

然后,您可以成功存档并提交到Appstore


1

从上周五(2016年6月3日)我们收到相同的错误“ Xcode-错误ITMS-90635-捆绑中的无效Mach-O-提交至App Store” ..使用了下面提到的2个步骤来完成此操作

步骤1:将
代码添加到Pod文件中以标记'ENABLE_BITCODE' = 'NO'Pod

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

步骤2:在项目的广告连播中
标记'ENABLE_BITCODE' = 'NO'

注意:'ENABLE_BITCODE' = 'YES'也在Pod和项目中尝试使用标记,但是由于我们使用twillio框架进行调用,因此该框架具有-read_only_relocs不允许使用进行编译的标志'ENABLE_BITCODE' = 'YES'。因此,如果您的应用程序不使用任何此类框架,-read_only_relocs那么您可以继续进行制作,'ENABLE_BITCODE' = 'YES'因为这将对您的应用程序有利。


0

对于那些在将“启用位代码”设置为“是”后出现构建错误的人。我必须更新所有库。但是,最简单的部分是我使用Cocoapods。因此,请更新您所有的pod项目:(一个一个)或全部

然后在存档之前将Enable BitCode设置为“ No”。

然后存档>>上传>>它将通过此​​错误。

干杯。


0

使用Xcode 7.3在我的CI上,项目“ ENABLE_BITCODE = YES”和依赖项“ ENABLE_BITCODE = YES”存在相同的问题。解决方案是将Xcode更新到最新的可用版本(7.3.1)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.