检测.a或.framework是否支持bitcode

简介: 检测.a或.framework是否支持bitcode

检测.a是否支持bitcode


| otool -l yourlib.a | grep bitcode


检测.framework是否支持bitcode


| otool -l yourlib.framework/yourdata | grep bitcode


返回结果有__bitcode字段说明是支持bitcode的


返回结果


|  sectname __bitcode
|  sectname __bitcode
|  sectname __bitcode


检测对应架构是否支持bitcode


|  otool -arch armv7 -l yourlib.a  | grep bitcode


打印不为0都支持bitcode


|  otool -arch arm64 -l test_arm64 | grep __bitcode | wc -l


是否支持LLVM


|  otool -l yourlib.a | grep LLVM


理解LLVM


LLVM 是目前苹果采用的编译器工具链, Bitcode 是 LLVM 编译器的中间代码的一种编码,LLVM的前端可以理解为C/C++/OC/Swift等编程语言,LLVM的后端可以理解为各个芯片平台上的汇编指令或者可执行机器指令数据,那么,BitCode就是位于这两者之间的中间码. LLVM的编译工作原理是前端负责把项目程序源代码翻译成Bitcode中间码,然后再根据不同目标机器芯片平台转换为相应的汇编指令以及翻译为机器码.这样设计就可以让LLVM成为了一个编译器架构,可以轻而易举的在LLVM架构之上发明新的语言(前端),以及在LLVM架构下面支持新的CPU(后端)指令输出,虽然Bitcode仅仅只是一个中间码不能在任何平台上运行,但是它可以转化为任何被支持的CPU架构,包括现在还没被发明的CPU架构,也就是说现在打开Bitcode功能提交一个App到应用商店,以后如果苹果新出了一款手机并CPU也是全新设计的,在苹果后台服务器一样可以从这个App的Bitcode开始编译转化为新CPU上的可执行程序,可供新手机用户下载运行这个App.


bitcode 是被编译程序的一种中间形式的代码。包含 bitcode 配置的程序将会在 App store 上被编译和链接。bitcode 允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新的版本到 App store 上。


当我们提交程序到 App store 上时,Xcode 会将程序编译为一个中间表现形式(bitcode)。然后 App store 会再将这个 botcode 编译为可执行的64位或32位程序


Xcode 7 之后,我们新建一个 iOS 程序时,bitcode 选项默认是设置为 YES 的。我们可以在 ”Build Settings” -> ”Enable Bitcode” 选项中看到这个设置。


bitcode好处


可以为目标安装App的设备进行优化二进制,减小安装包的下载大小。以后新设计了新指令集的新CPU,可以继续从这份bitcode开始编译出新CPU上执行的可执行文件,以供用户下载安装.


bitcode不足


当应用程序奔溃后,开发者可以根据获取的的奔溃日志再配上上传到苹果服务器的二进制文件的调试符号表信息可以还原程序运行过程到奔溃时后调用栈信息,对问题进行定位排查.但是用了bitcode之后,用户安装的二进制不是开发者这边生成的,而是苹果服务器经过优化后生成的,其对应的调试符号信息丢失了,也就无法进行前面说的还原奔溃现场找原因了.

相关文章
|
5月前
|
Java Android开发 C++
Rockchip系列之CAN 新增framework系统jni接口访问(2)
Rockchip系列之CAN 新增framework系统jni接口访问(2)
45 3
|
5月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
79 1
|
5月前
|
存储 传感器 JSON
Rockchip系列之VendorStorage 新增framework封装VendorStorageManager访问(4)
Rockchip系列之VendorStorage 新增framework封装VendorStorageManager访问(4)
46 0
|
2月前
|
开发工具
【Azure Event Hub】解决Event Hub SDK出现无法识别 com.azure.core.client.traits.TokenCredentialTrait 错误
【Azure Event Hub】解决Event Hub SDK出现无法识别 com.azure.core.client.traits.TokenCredentialTrait 错误
|
5月前
|
缓存 小程序 Android开发
mPaaS问题之iOS调用插件的时候提示没有配置mpaas. Config文件如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
110 1
|
安全 网络协议 JavaScript
Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用
Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用
328 0
Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用
|
Java 编译器
java: 源发行版 16 与 --enable-preview 一起使用时无效 (仅发行版 17 支持预览语言功能) & java: 错误: 无效的源发行版:15
java: 源发行版 16 与 --enable-preview 一起使用时无效 (仅发行版 17 支持预览语言功能) & java: 错误: 无效的源发行版:15
3218 0
|
Web App开发
FireFox 32不支持64位的NPAPI dll插件
FireFox 32不支持64位的NPAPI dll插件
117 0
|
iOS开发
iOS解开.a包和.framework
解开.a包和.framework
470 0
|
iOS开发
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
685 0