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

昨天我发现了很多关于parse.com图书馆的警告:

URGENT:所有位码将被丢弃,因为'[path] /Parse.framework/Parse(PFAnalytics.o)'是在没有位码的情况下构建的。 您必须使用启用位码(Xcode设置ENABLE_BITCODE)重建它,从供应商处获得更新的库或禁用此目标的位码。 注意:这将是一个错误。

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

Xcode通知您关于位码的信息

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

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

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

  • ENABLE_BITCODE实际上做了什么,它将来会成为一个非可选要求吗?
  • 我不确定你在什么级别寻找答案,所以让我们来一趟旅程吧。 其中一些你可能已经知道了。

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

    ENABLE_BITCODE选项切断了最后一步。 它用IR位码二进制创建了一个应用程序版本。 这有很多不错的功能,但是有一个巨大的缺点:它不能在任何地方运行。 为了得到一个运行二进制位二进制码的应用程序,需要重新编译位码(可能是汇编或代码转换...我不确定是否有正确的动词)到x86或ARM二进制文件中。

    当一个bitcode应用程序被提交给App Store时,Apple会做这最后一步并创建完成的二进制文件。

    目前,bitcode应用程序是可选的,但历史显示Apple将可选的东西变成需求(如64位支持)。 这通常需要几年时间,所以第三方开发人员(如Parse)有时间更新。

  • 我是否可以使用上述方法而不会产生任何负面影响,并且不会影响未来的应用商店提交?
  • 是的,你可以关闭ENABLE_BITCODE,一切都会像以前一样工作。 直到苹果让bitcode应用程序成为App Store的一项要求之后,你会没事的。

  • 如果启用/禁用它,是否会对性能产生影响?
  • 对于启用它而言,永远不会有负面的性能影响,但用于测试的应用程序的内部分发可能会变得更加复杂。

    至于积极影响......那很复杂。

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

    另外,当bitcode被重新编译(可能再次汇编或代码转换,我不确定正确的动词)时,它会被优化。 LLVM一直致力于创造更好的优化。 理论上,App Store可以在每个新版LLVM的App Store中重新创建应用程序的单独版本,因此可以使用最新的LLVM技术对应用程序进行重新优化。


    确保选择“全部”以查找启用位代码构建设置:

    构建设置


    位码是iOS 9的一项新功能

    位码是编译程序的中间表示。 您上传到iTunes Connect的包含位码的应用程序将在App Store上编译和链接。 包括位码将允许Apple在未来重新优化您的应用程序二进制文件,而无需将新版本的应用程序提交给商店。

    注意:对于iOS应用程序,位代码是默认值,但是可选。 如果您提供位码,应用程序包中的所有应用程序和框架都需要包含位码。 对于watchOS应用程序,位码是必需的

    所以你应该禁用bitcode,直到你的应用程序的所有框架都启用了bitcode。

    链接地址: http://www.djcxy.com/p/51001.html

    上一篇: Impact of Xcode build options "Enable bitcode" Yes/No

    下一篇: AVAudioPlayer not playing any sound