什么是Bitcode

简介: Bitcode能为我们做什么?

前言

自从Xcode7发布以后,Xcode项目中多了一个Bitcode的选项(Targets > Build Settings > Build Options > Enable Bitcode)。

有多少次都是因为开启了Bitcode,导致项目编译失败,多数情况都是引入了不支持Bitcode的第三方库,而多数解决方案都是关闭Bitcode。

那么BitCode到底是做什么的呢?

Bitcode

Apple目前使用LLVM(Low Level Virtual Machine)/Clang作为编译器,而Bitcode是LLVM编译器的中间代码的其中一种编码。

LLVM的前端是Clang编译器,编译的是高级编程语言(C/C++/Objective-C/Swift等),

LLVM的后端就是运行在设备端的汇编代码或者机器指令,

Bitcode就是这两者之间的一种代码。

LLVM的编译工作是前端负责把项目代码转成Bitcode中间代码,后端再根据不同的设备将中间代码转换为汇编代码或者机器指令。

没有开启Bitcode时,也会生成IR中间代码,但最终生成的App是一个胖二进制,包含了所有平台的信息。App需要支持在不同设备端运行,所以App必须包含对不同设备的特定处理逻辑,这样App的容量势必要增加。

当开启Bitcode后,可以使我们的项目代码在编译时不直接对应设备,而是转换成Bitcode中间代码。在上传到AppStore后,由Apple的服务器根据下载者的设备来生成App。一来减小了安装包的容量,二来即使Apple开发了新设备,也可以通过Bitcode来生成新设备的App。

Bitcode也分为64bit平台和32bit平台,由于两个平台的差异,生成的Bitcode代码也是不相同的。

注意事项

在未开启Bitcode的情况下, 在线上发生Crash时,我们可以根据崩溃日志和打包时的调试符号表来查看Crash信息。

由于使用了Bitcode后,App的打包将在Apple服务器中完成,所以我们将无法得到二进制文件的调试符号表,所以就无法无法还原Crash信息。

目录
相关文章
|
8天前
|
开发工具 Android开发
解决Android Studio编译提示NDK is missing a “platforms“ directory
解决Android Studio编译提示NDK is missing a “platforms“ directory
38 1
|
3月前
|
编译器 Linux C语言
CMake指定交叉编译指南:从编译器设置到验证 (CMake Cross-compilation Guide: From Compiler Setup to Verification)
CMake指定交叉编译指南:从编译器设置到验证 (CMake Cross-compilation Guide: From Compiler Setup to Verification)
990 1
|
9月前
|
编译器
[√]cmake 编译选项
[√]cmake 编译选项
54 0
|
NoSQL iOS开发 C++
Xcode Debug 大全
BUG,简单来说就是程序运行结果与预期的不同,下面来说说Xcode中的DEBUG方法
373 0
|
自然语言处理 JavaScript 前端开发
详解 clang-format 配置选项(基于 clang 8.0.0)
基于 clang 8.0.0 详解 clang-format 中涉及 C/C++ 配置选项的含义,跳过不相关的语言配置选项如 Java, Objective-C, JavaScript。
2237 0
|
iOS开发
xcode编译遇到的问题
xcode编译遇到的问题
94 0
|
iOS开发
XCode编译:pngcrush caught libpng error解决方法
XCode编译:pngcrush caught libpng error解决方法
123 0
XCode编译:pngcrush caught libpng error解决方法
|
并行计算 openCL 前端开发
iOS - lldb、 Clang、llvm个人理解
iOS - lldb、 Clang、llvm个人理解
iOS - lldb、 Clang、llvm个人理解
|
iOS开发 编译器 C语言
(转载)Xcode中other linker flags的作用
原文地址:https://blog.csdn.net/iosfengguibin/article/details/52086435 今天导入三方的sdk之后,空项目,总是报错“selector not recognized”,在网上找到这篇文章,才解决了问题,感谢作者的分享。
1201 0
|
前端开发 编译器 Swift
Bitcode
Bitcode是LLVM编译器将C/C++/OC/Swift等前端变成语言编译成多种不同芯片上的机器指令过程中的中间代码。并且这个中间代码是CPU无关的。
1198 0