一、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文件
首先需要判断 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值如下: