【问题标题】:Xcode - Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App storeXcode - 错误 ITMS-90635 - 捆绑包中的 Mach-O 无效 - 提交到 App Store
【发布时间】:2016-10-03 11:18:33
【问题描述】:

我刚刚在向应用商店提交应用时收到此错误。

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

【问题讨论】:

  • 好的,我已经在 Build Settings 中打开了 ENABLE_BITCODE 并且必须更新 Facebook Kit 并且它起作用了。

标签: ios xcode


【解决方案1】:

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

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

【讨论】:

  • 我更新了项目的构建设置,正如我在问题的 cmets 中提到的那样。但我想知道,我在哪里可以找到特定库的构建设置?我在整个项目中搜索了 ENABLE_BITCODE,我只找到了主项目目标中的一个。
  • 这取决于您导入库的方式。对我来说,因为我使用的是 Cocoapods,所以在我的工作区中,我有一个 pods 项目。当我点击我的 pods 项目时,我有所有可用的目标。
  • 该死的。我有时候就是这么傻。我正在搜索 pods 项目,而不是它本身......我想有时我的大脑会冻结。 :D
  • 我所有的库都在使用位码。我猜不是我会让它设置为是,因为它在应用商店有一些优化。或者我读了。再次感谢。 :)
  • 乐于助人!对我来说也一样,我所有的库都使用位代码,所以更新我的项目而不是所有的 pod 更容易:) 现在为下一个问题做好准备:PIE 警告;)
【解决方案2】:

最简单、最常见的修复方法:

您可以在通过 Xcode 提交应用程序时取消选中“包含 Bitcode”。

如果您使用xcodebuild,您可以使用将exportOptionsPlist 的值设置为false 的exportOptionsPlist。在我的例子中,我们使用xctool 来构建应用程序并且无法传递exportOptionsPlist,因此我们必须从所有框架中删除位码。


如果有人在使用 cocoapods 并想为他们的框架禁用 bitcode,您只需将以下内容添加到您的 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 的依赖项,这使得切换所有内容以启用 bitcode 变得不简单,所以我只是禁用了它并从我在项目中导入的一个静态库中删除了 bitcode。您可以使用以下命令从任何二进制文件中剥离位码

$ 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

虽然以上是问题的解决方案,但我不同意如果主二进制文件禁用了位码,那么所有包含的二进制文件也应该需要它。 Bitcode 只是 Apple 可以用于应用瘦身的一些 IR 代码——他们为什么不直接将其从其他二进制文件中剥离(我认为这是他们之前所做的)?这对我来说没有多大意义。

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

【讨论】:

  • 这也是我所需要的。我们使用两个预编译的二进制库,一个启用了位码,另一个禁用了位码。而且没有办法重新编译它们以匹配设置!
  • 非常感谢,真的很有帮助!
  • 如果您有 WatchApp,那么这将不起作用,因为您必须提交 WatchApp 的位码
【解决方案3】:

我刚刚取消选中“包含位码”,它开始上传

【讨论】:

  • 错误的方式。在嵌入式框架启用它而应用程序没有启用的问题中。
  • 检查@Guillaume 的回答。
  • 这没有帮助。我的应用被拒绝
【解决方案4】:

迦太基

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

然后就可以成功存档提交到Appstore了

【讨论】:

    【解决方案5】:

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

    第 1 步:
    在 pod 文件中添加代码以在 pod 中标记 'ENABLE_BITCODE' = 'NO'

    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 步:
    在项目的 pod 中标记为 'ENABLE_BITCODE' = 'NO'

    注意:尝试在 pod 和我的项目中标记 'ENABLE_BITCODE' = 'YES',但由于我们使用 twillio 框架进行调用,它有一个标志 -read_only_relocs,它不允许使用 'ENABLE_BITCODE' = 'YES' 进行编译。因此,如果您的应用不使用任何带有 -read_only_relocs 的此类框架,那么您可以继续制作 'ENABLE_BITCODE' = 'YES',因为它对您的应用有好处。

    【讨论】:

      【解决方案6】:

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

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

      然后存档>>上传>>就会通过这个错误。

      干杯。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-20
          • 2016-01-26
          • 1970-01-01
          • 1970-01-01
          • 2015-10-25
          • 2014-11-02
          • 1970-01-01
          相关资源
          最近更新 更多