检测.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之后,用户安装的二进制不是开发者这边生成的,而是苹果服务器经过优化后生成的,其对应的调试符号信息丢失了,也就无法进行前面说的还原奔溃现场找原因了.

相关文章
|
7月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
111 1
|
7月前
|
缓存 小程序 Android开发
mPaaS问题之iOS调用插件的时候提示没有配置mpaas. Config文件如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
155 1
|
7月前
|
C++
[VS配置] 平台配置由Debug更换Release后出现错误
[VS配置] 平台配置由Debug更换Release后出现错误
74 0
|
测试技术 Android开发
在bundle工程中开启multidex支持
在bundle工程中开启multidex支持
68 1
|
API Android开发
Android11.0(R) framework 新增类 lint 编码检查问题
Android11.0(R) framework 新增类 lint 编码检查问题
1370 0
|
iOS开发
iOS解开.a包和.framework
解开.a包和.framework
525 0
|
API iOS开发
iOS Debug和Release环境的最新配置
iOS Debug和Release环境的最新配置
772 0
iOS Debug和Release环境的最新配置
|
Java Android开发
【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )
【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )
383 0
【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )
|
iOS开发
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
862 0
|
小程序 编译器 C++