昨天我认识到有关parse.com库的大量警告:
紧急:所有bitcode都将被删除,因为'[path] /Parse.framework/Parse(PFAnalytics.o)'是在没有bitcode的情况下构建的 . 您必须在启用bitcode(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的bitcode . 注意:将来这将是一个错误 .
我知道我可以用this answer删除这些警告,但我现在想知道它是否会对AppStore提交和/或我的应用程序的实际性能产生任何负面影响 .
Xcode告诉你有关bitcode的信息
激活此设置表示目标或项目应在编译期间为支持它的平台和体系结构生成bitcode . 对于存档构建,将在链接二进制文件中生成bitcode以提交到应用商店 . 对于其他构建,编译器和链接器将检查代码是否符合bitcode生成的要求,但不会生成实际的bitcode . [ENABLE_BITCODE]
但是我没有从本文中获得任何真正有用的信息 .
-
我是否可以使用链接的答案来规避问题而不会产生任何负面影响并且不会影响未来的AppStore提交?
-
ENABLE_BITCODE
实际上做了什么,将来是否会成为非选择性要求? -
如果启用/禁用它会对性能产生影响吗?
7 回答
我不确定你在什么级别寻找答案,所以让我们来一趟 . 其中一些你可能已经知道了 .
在构建项目时,Xcode为Objective-C目标调用
clang
,为Swift目标调用swift
/swiftc
. 这两个编译器都将应用程序编译为intermediate representation(IR),其中一个IR是bitcode . 从这个IR,一个名为LLVM的程序接管并创建x86 32和64位模式(用于模拟器)和arm6 / arm7 / arm7s / arm64(用于设备)所需的二进制文件 . 通常,所有这些不同的二进制文件都集中在一个名为fat binary的文件中 .ENABLE_BITCODE选项会删除此最后一步 . 它使用IR bitcode二进制文件创建应用程序版本 . 这有许多不错的功能,但有一个巨大的缺点:它无法在任何地方运行 . 为了获得一个运行bitcode二进制文件的应用程序,bitcode需要重新编译(可能是组装或转码......我不确定正确的动词)到x86或ARM二进制文件中 .
当bitcode应用程序提交到App Store时,Apple将执行此最后一步并创建完成的二进制文件 .
目前,bitcode应用程序是可选的,但历史记录显示Apple将可选内容转换为需求(如64位支持) . 这通常需要几年时间,因此第三方开发人员(如Parse)有时间更新 .
是的,您可以关闭ENABLE_BITCODE,一切都会像以前一样工作 . 直到Apple将bitcode应用程序作为App Store的一项要求,你才会没事 .
启用它不会对性能产生负面影响,但用于测试的应用程序的内部分发可能会变得更加复杂 .
至于积极影响......那很复杂 .
对于在App Store中的分发,Apple将为每个机器架构(arm6 / arm7 / arm7s / arm64)创建应用程序的单独版本,而不是一个带有胖二进制文件的应用程序 . 这意味着iOS设备上安装的应用程序将更小 .
此外,当重新编译bitcode时(可能再次组装或转码......我不确定正确的动词),它会被优化 . LLVM始终致力于创建新的更好的优化 . 从理论上讲,App Store可以在每个新版本的LLVM中在App Store中重新创建应用程序的单独版本,因此您的应用程序可以使用最新的LLVM技术进行重新优化 .
确保选择“全部”以查找启用bitcode构建设置:
Bitcode是iOS 9的新功能
所以你应该禁用bitcode,直到你的应用程序的所有框架都启用了bitcode .
Bitcode makes crash reporting harder . 以下是HockeyApp的引用(对于任何其他崩溃报告解决方案也是如此):
注意:答案于2016年1月编辑,以反映最近的更改
@ vj9 thx . 我更新到xcode 7 . 它向我显示了同样的错误 . 设置“否”后构建好
设置“否”它运作良好 .
在这里你可以找到关于 Bitcode 的所有解决方案
根据Apple Doc
欲了解更多信息,请检查Here和Here
来自docs
Bitcode将允许苹果优化应用程序,而无需提交其他版本 . 但是,如果应用程序包中的所有框架和应用都启用了此功能,则您只能启用此功能 . 让它有所帮助,但没有它不会产生任何负面影响 .
不应该有任何性能影响 .