小编典典

Xcode 构建选项“启用位码”的影响是/否

all

昨天我发现了大量关于 parse.com 库的警告:

紧急:所有位码都将被删除,因为 ‘[path]/Parse.framework/Parse(PFAnalytics.o)’
是在没有位码的情况下构建的。您必须在启用位码的情况下重建它(Xcode 设置
ENABLE_BITCODE),从供应商处获取更新的库,或禁用此目标的位码。注意:这将是未来的错误。

我知道我可以用这个答案删除这些警告,但现在想知道它是否会对
AppStore 提交和/或我的应用程序的实际性能产生任何负面影响。

Xcode 通知您有关位码的信息

激活此设置表示目标或项目应在编译期间为支持它的平台和架构生成位码。对于存档构建,将在链接的二进制文件中生成位码以提交到应用商店。对于其他构建,编译器和链接器将检查代码是否符合生成位码的要求,但不会生成实际的位码。[ENABLE_BITCODE]

但是我没有从这篇文章中得到任何真正有用的信息。

  • 我可以使用链接的答案来规避问题而不会产生任何负面影响并且不会影响未来的 AppStore 提交吗?
  • 实际做了什么ENABLE_BITCODE,将来会是一个非可选的要求吗?
  • 如果我启用/禁用它会对性能产生影响吗?

阅读 77

收藏
2022-05-10

共1个答案

小编典典

  • ENABLE_BITCODE 实际上是做什么的,将来它会是一个非可选的要求吗?

我不确定您在什么级别上寻找答案,所以让我们进行一次小旅行。其中一些你可能已经知道了。

当你构建你的项目时,Xcode 会clang为 Objective-C 目标和swift/swiftc为 Swift
目标调用。这两个编译器都将应用程序编译为中间表示(IR),其中一个
IR 是位码。从这个 IR 中,一个名为 LLVM 的程序接管并创建 x86 32 位和 64 位模式(用于模拟器)和
arm6/arm7/arm7s/arm64(用于设备)所需的二进制文件。通常,所有这些不同的二进制文件都集中在一个名为fat
binary
的文件中。

ENABLE_BITCODE 选项取消了这最后一步。它使用 IR
位码二进制文件创建应用程序版本。它有许多不错的功能,但有一个巨大的缺点:它不能在任何地方运行。为了让带有二进制位码的应用程序运行,需要将位码重新编译(
可能是组装或转码——我不确定正确的动词 )成 x86 或 ARM 二进制文件。

当一个 bitcode 应用程序被提交到 App Store 时,Apple 将执行此最后一步并创建完成的二进制文件。

目前,位码应用程序是可选的,但历史表明苹果将可选的东西变成了要求(如 64 位支持)。这通常需要几年时间,因此第三方开发人员(如
Parse)有时间进行更新。

  • 我可以使用上述方法而不会产生任何负面影响并且不会影响未来的应用商店提交吗?

是的,您可以关闭 ENABLE_BITCODE,一切都会像以前一样工作。在 Apple 将位码应用程序作为 App Store 的要求之前,你会没事的。

  • 如果我启用/禁用它会对性能产生影响吗?

启用它永远不会对性能产生负面影响,但用于测试的应用程序的内部分发可能会变得更加复杂。

至于积极影响——这很复杂。

为了在 App Store 中分发,Apple 将为每个机器架构 (arm6/arm7/arm7s/arm64)
创建单独的应用程序版本,而不是一个带有胖二进制文件的应用程序。这意味着安装在 iOS 设备上的应用程序会更小。

此外,当重新编​​译位码( 可能再次组装或转码——我不确定动词是否正确 )时,它会被优化。LLVM 一直致力于创造新的更好的优化。理论上,App
Store 可以在 App Store 中随着 LLVM 的每个新版本重新创建应用程序的单独版本,因此您的应用程序可以使用最新的 LLVM 技术重新优化。

2022-05-10