在SDK开发或使用过程中,我们可能会遇到下面的问题:
1. 怎么判断这个framework里面的库是静态库还是动态库?
2. 使用的framework怎么判断是否含有arm64架构?
3. 模拟器上使用framework链接错误跑不起来怎么办?
......
这些问题其实都可以通过mac的终端指令来解决,其实终端指令就是系统提供的一些工具软件,下面主要列举出常用的几个: lipo、otool、file
file
file是最简单的指令,可以显示文件类型,用于framework中的库时可以判断是静态库还是动态库,从下图file指令两个实例,可以看出动态库使用file时,输出显示“Mach-O 64-bit dynamically linked shared library arm64”,而静态库显示“current ar archive random library”。
file指令lipo
lipo是最常用的指令,主要包含几个使用case:
- 查看库包含的架构信息
使用方式:lipo -info /framework路径/xxx.framework/xxx
lipo
- 合并多个架构,如将模拟器库和真机armv7架构、真机arm64架构合并到一起。
使用方式:lipo -create 库1 库2 -output 合并后的fat库
- 拆分库,如将包含真机库和模拟器库的framework拆分为只含有真机库的framework。
使用方式:lipo 待拆分的fat库 -thin 需拆分框架 -output 新库
otool
otool是个强大(前面提到的两个命令只可以通过otool来解决)的工具,在日常开发中用在以下case:
- 查看库包含的架构信息
使用方式:otool -o /framework路径/xxx.framework/xxx
- 查看当前app或库所使用的iOS系统的动态库
使用方式:打开ipa文件找到可执行文件, 以微信的老版本6.0.1为例:
otool -L /路径/weixin6.0.1/Payload/MicroMessenger.app/MicroMessenger
微信使用的动态库
- 反编译
反编译可以说是个逆向常用的比较黑的操作,还是以微信的ipa为例:
otool -tV /路径/weixin6.0.1/Payload/MicroMessenger.app/MicroMessenger
注意:此命令将输出所有汇编代码,对于微信这种巨型app输出过程很长,做好心理准备,此处也不列出长篇幅的汇编代码。
网友评论