本文主要是介绍检测App、静态库、framework是否支持bitcode,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、otool直接分析文件
1. 静态库:
otool -arch armv7 -l xxx.a | grep __bitcode | wc -l
如果输出的数字不为0,就代表包含bitcode
2. framework和app,传递里面的二进制文件
由于app中二进制和framework中二进制文件与.a文件存在差异,因为需要检查的是__LLVM段,当出现该段的时候,则表示支持bitcdoe,否则不支持。
otool -l xxxx | grep __LLVM | wc -l
这里otool有个bug,当你的framework使用过lipo命令,进行拆解和合并之后,需要指定指令集进行检查才可以。
otool -arch armv7 -l xxxx | grep __LLVM | wc -l
二、otool分析.o文件
判断一个库是否包含 bitcode
首先需要判断 library 是否是 fat 的,可以用 lipo 命令:
lipo -info libdemo.a
其中 libdemo.a 就是我们要检查的文件。一般第三方库都会发布 fat library 以支持各个 CPU 架构。
接着,如果是 fat library,需要将某个 CPU 架构的 slice 提取出来:
lipo -thin arm64 libdemo.a -output libdemo-arm64.a
这样,我们就将 arm64 这个 slice 提取出来了。接下来我们需要将这个 slice 里面的目标文件解压出来,可以用 ar 命令:
ar -x libdemo-arm64.a
假设我们解压了 libdemo_la-util.o 这个目标文件。最后,我们检查目标文件中,是否包含 __bicode 这个段(segment):
otool -l libdemo_la-util.o | grep bitcode
但在我的电脑上会出现错误:
三、分析文件
从文件头的magic number来判断,是否支持bitcode,具体的magic number值如下:
这篇关于检测App、静态库、framework是否支持bitcode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!