从零开发移动端自动化测试框架 libimobiledevice 的 binary 文件生成方法
做 iOS 自动化,需要用到 libimobiledevice 家族命令,比如 ideviceinfo 获取 iOS 的设备信息,但官方并没有提供直接下载 binary 的可执行文件,这些家族命令文件需要自己去生成,下面是我总结的生成方法,提供参考。
ps:之所以要自己打包,是因为自己用的老版本 ideviceinfo 不兼容高版本的 iPhone,而最新版本是可以的
下载最新包
在libimobiledevice的release下下载最新的 release 包
编译构建
# 配置,生成make文件
./configure --disable-openssl
# 构建
make
# 安装(这一步可选,如果你希望可以全局使用libimobiledevice家族工具,可以执行)
make install
./configure --disable-openssl
成功日志如下:(仅摘取最后部分日志)
checking whether make supports nested variables... (cached) yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating common/Makefile
config.status: creating src/Makefile
config.status: creating src/libimobiledevice-1.0.pc
config.status: creating include/Makefile
config.status: creating tools/Makefile
config.status: creating cython/Makefile
config.status: creating docs/Makefile
config.status: creating doxygen.cfg
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
Configuration for libimobiledevice 1.3.0:
-------------------------------------------
Install prefix: .........: /usr/local
Debug code ..............: no
Python bindings .........: no
SSL support backend .....: GnuTLS
Now type 'make' to build libimobiledevice 1.3.0,
and then 'make install' for installation.
make
构建命令成功日志如下:(仅摘取最后部分日志)
Making all in tools
CC idevice_id-idevice_id.o
CCLD idevice_id
CC ideviceinfo-ideviceinfo.o
CCLD ideviceinfo
CC idevicename-idevicename.o
CCLD idevicename
CC idevicepair-idevicepair.o
CCLD idevicepair
CC idevicesyslog-idevicesyslog.o
CCLD idevicesyslog
CC ideviceimagemounter-ideviceimagemounter.o
CCLD ideviceimagemounter
CC idevicescreenshot-idevicescreenshot.o
CCLD idevicescreenshot
CC ideviceenterrecovery-ideviceenterrecovery.o
CCLD ideviceenterrecovery
CC idevicedate-idevicedate.o
CCLD idevicedate
CC idevicebackup-idevicebackup.o
CCLD idevicebackup
CC idevicebackup2-idevicebackup2.o
CCLD idevicebackup2
CC ideviceprovision-ideviceprovision.o
CCLD ideviceprovision
CC idevicedebugserverproxy-idevicedebugserverproxy.o
CCLD idevicedebugserverproxy
CC idevicediagnostics-idevicediagnostics.o
CCLD idevicediagnostics
CC idevicedebug-idevicedebug.o
CCLD idevicedebug
CC idevicenotificationproxy-idevicenotificationproxy.o
CCLD idevicenotificationproxy
CC idevicecrashreport-idevicecrashreport.o
CCLD idevicecrashreport
CC idevicesetlocation-idevicesetlocation.o
CCLD idevicesetlocation
Making all in docs
make[2]: Nothing to be done for `all'.
make[2]: Nothing to be done for `all-am'.
至此,libidevicemobile 家族的一系列工具就生成完成了,如下图所示:
补:后来测试发现,上图中的都是快捷方式,真正的 binary 在隐藏的文件夹./lib
下,并且有.deps 依赖文件,要使用 libimobiledevice 工具,那么直接使用 tools 里面的所有文件即可,如果单纯只用.libs 下的文件,会缺少依赖。
但这些 binary 并不能直接使用,还依赖对应的 dylib,比如 ideviceinfo,执行后报错:
dyld: Library not loaded: /usr/local/lib/libimobiledevice-1.0.6.dylib002E
Referenced from: xxx/tools/iOS/tools/./ideviceinfo
Reason: image not found
Abort trap: 6
测试发现,这些 binary 只依赖这个 libimobiledevice-1.0.6.dylib,我们在使用 make install 命令安装的时候就会生成这个动态链接库,并把它移动到/usr/local/lib 下。
如下是我自己打包的 libimobiledevice binary,提供大家下载(仅仅打包了 mac 下的)
https://github.com/cmlanche/libimobiledevice-binaries
疑问
为什么这个生成命令和官方 github 上写的不一样,并且缺少autogen.sh
文件?
通过对比我们知道 libimobiledevice 的源码跟官方发布的 release 的文件是不一样的,官方打包源码生成 release 包之间肯定还做了什么,不过没关系,我们用源码来生成 binary 也是一样的,用源码生成执行以下命令即可,效果等同:
# 配置
./autogen.sh
# 构建,生成binary
make
# 安装到你的电脑
make install