iOS开发的另类神器:libimobiledevice开源包
简介
libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。
官方github地址:https://github.com/libimobiledevice/libimobiledevice
最后还有一点,作为一个前Android开发,习惯使用adb命令各种调试,转了iOS怎么能没有这种工具,而去使用iTunes和iTools呢?对此零容忍!
快速直接安装libmobiledevice的方法
- 在MacOS下安装可以使用brew,类似Ubuntu中的apt-get
1 | # 高版本brew会警告,不允许使用sudo执行brew,有风险。 |
- Ubuntu下安装需要添加一个新的软件库,里面包含了libimobiledevice
1 | sudo add-apt-repository ppa:pmcenery/ppa |
常用功能
- 安装ipa包,卸载应用
1 | //命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。 |
- 查看系统日志
1 | idevicesyslog |
- 查看当前已连接的设备的UUID
1 | idevice_id --list |
- 截图
1 | idevicescreenshot |
- 查看设备信息
1 | ideviceinfo |
- 获取设备时间
1 | idevicedate |
- 设置代理(也好像是端口转发的工具,具体能利用它干啥还没试过)
1 | iproxy |
- 挂载DeveloperDiskImage,用于调试
1 | ideviceimagemounter |
- 获取设备名称
1 | idevicename |
- 调试程序(需要预先挂载DeveloperImage)
1 | idevicedebug |
- 查看和操作设备的描述文件
1 | ideviceprovision list |
ideviceinstaller安装ipa报错(已经支持iOS12)
错误1
1 | "Could not connect to lockdownd. Exiting." |
出现这个问题一般是因为新版操作系统的通信协议可能有些微调,参考下面的stackoverflow的帖子,可以通过下面的命令尝试更新使用最新的libimobiledevice构建版本。
The best solution here is to get the latest libimobiledevice, which has a fix for this particular issue:
1 | brew uninstall ideviceinstaller |
错误2,进行上面步骤时出现
1 | A recent change to libimobiledevice bumped the constraint on libusbmuxd to >= version 1.1.0. The current usbmuxd homebrew package is version 1.0.10. |
从意思上看,应该是其中用到的usbmuxd库更新了,我们系统中的不够新。那咱们就给他升级一下呗:
1 | brew update |
更新了usbmuxd库之后,可以重复错误1中的解决办法,重新安装libmobiledevice即可正常使用。
错误3,可能会提示你需要配置github的accessToken,按照提示操作即可
错误4,可能会提示man手册目录的权限问题,按照提示操作即可
挂载文件系统工具:ifuse
ifuse是一个依赖libimobiledevice库的工具,所以必须首先安装libimobiledevice
首先去 https://osxfuse.github.io/ 下载fuse for macos的库。
然后github上clone下载ifuse最新源码到本地(自己决定放哪):
1 | //cd 到要安装的目标路径,然后: |
- 进入clone好的目录,执行:
1 | //将源码在本机编译: |
- 挂载媒体文件目录:
1 | //注意,此处的挂载点必须要真实存在,需要预先创建好目录,否则挂载失败 |
- 挂载某应用的documents目录
1 | ifuse --documents [要挂载的应用的bundleID] [挂载点] |
- 挂载某应用的整个沙盒目录
1 | ifuse --container [要挂载的应用的bundleID] [挂载点] |
- 获取bundleID
1 | ideviceinstaller -l |
- 卸载挂载点
1 | fusermount -u [挂载点] |
- 如果是越狱的设备,并且配置好了,可以使用下面命令挂载整个iphone文件系统(暂时没试过,还没有开始研究越狱设备)
1 | ifuse --root [挂载点] |
- 详细说明,可以进入ifuse的github主页查看原版文档
1 | https://github.com/libimobiledevice/ifuse |
学习交流群
想加入libimobiledevice交流群的话,简书私信找我。