什么是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信息。

目录
相关文章
|
存储 XML jenkins
iOS 底层原理38:自动化打包(一)Xcode + Shell脚本
iOS 底层原理38:自动化打包(一)Xcode + Shell脚本
3402 1
iOS 底层原理38:自动化打包(一)Xcode + Shell脚本
|
iOS开发
iOS 富文本添加点击事件
iOS 富文本添加点击事件
1836 0
iOS 富文本添加点击事件
|
2月前
|
编解码 Java Shell
安卓虚拟摄像头,vcam虚拟摄像头,安卓免root虚拟摄像头
采用动态Hook+视频流替换方案,通过Xposed框架拦截系统相机服务,实现免Root环境下的虚拟摄像头功能
|
8月前
|
监控 数据库 数据采集
大模型编程(5)- 微调体验
大模型微调学习
388 8
|
10月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
367 2
|
9月前
|
前端开发 API 数据安全/隐私保护
探索RAG应用:文档智能与百炼平台的最佳实践(完整代码示例)
方华在阿里云开发者社区发现了一个构建RAG应用的活动,通过官方教程和阿里云提供的工具,如ROS、百炼平台及文档智能,实现了零代码配置RAG应用的Demo。本文分享了该项目的源码本地部署调试方法,介绍了其基于Python的Web应用程序结构,使用FastAPI和Jinja模板引擎,支持文件上传、自定义问答等功能。项目还详细描述了环境配置、服务启动等步骤,帮助开发者更好地理解和实践应用开发。
660 2
|
9月前
|
编解码 自然语言处理 语音技术
神经codec模型相关论文
本文汇总了近年来在神经音频编解码器和语音语言模型领域的多项重要研究,涵盖从2020年到2024年的最新进展。这些研究包括端到端的音频编解码器、高效音频生成、高保真音频压缩、多模态表示学习等。每项研究都提供了详细的论文链接、代码和演示页面,方便读者深入了解和实验。例如,SoundStream(2021)提出了一种端到端的神经音频编解码器,而AudioLM(2022)则通过语言建模方法生成音频。此外,还有多个项目如InstructTTS、AudioDec、HiFi-Codec等,分别在表达性TTS、开源高保真音频编解码器和高保真音频压缩方面取得了显著成果。
371 13
|
负载均衡 网络协议 安全
解析网络流量管理方案:简化基于云的DNS负载均衡
解析网络流量管理方案:简化基于云的DNS负载均衡
198 1
|
JavaScript
dyld: Library not loaded:解决办法
dyld: Library not loaded:解决办法
863 1
|
C++ 开发者
cpplint 新增自定义checker介绍
通过为cpplint新增自定义规则,可以让 cpplint 更加贴合项目的编码规范,从而提高代码的质量和一致性。
288 0