因为工作需要,要在mac上看iOS真机的日志。本来直接用控制台就可以看了,但是因为需要看的日志单条过长,在控制台里面居然被截断省略了,于是搜了下,开始折腾用idevicesyslog看。
用idevicesyslog看日志很简单,直接敲idevicesyslog命令就可以了,如果需要过滤,用grep和sed配合用就ok
$ idevicesyslog
$ idevicesyslog |grep keyword
之前装appium时已经装过libimobiledevice了(brew install libimobiledevice 前提是安装了homebrew),直接就连上了我的设备(iphone6, iOS11)。
没想到遇到了以下报错:
ERROR: Could not start service com.apple.syslog_relay.
Could not start logger for udid xxxxxxx
只好去google,发现git里面已经反馈过不少这个问题了⬇️⬇️⬇️
[SOLVED] Unable to start syslog with iOS 10 on Windows #325
ERROR: Could not connect to lockdownd, error code -8 #226
iOS 11 ideviceinstaller, ideviceinfo not working #510
同时也搜了下国内的博主,发现不少人都建议更新libimobiiledevice和chmod 777 /var/db/lockdown
本着我一直以来的偷懒原则,既然可能是chmod 777能解决,就sudo idevicesyslog试试,又试了chmod 777 后在idevicesyslog结果都还是报错,看来偷懒不行了,只能认真看下git里的问题讨论😂
里面nikias的回复大部分都是在说用最新版本的libimobiledevice和usbmuxd试试能不能work,可能是libimobiledevice或usbmuxd 或2者都不是最新导致的问题
本着偷懒原则😂,我就直接brew upgrade libimobiledevice下了,哦豁,不行,我的libimobiledevice在brew上已经是最新版本了。行吧,继续扒贴挖坟看看,到底要怎么改,最后在issue510看到了问题解决过程,貌似是从iOS11开始,设备开始不支持ValidatePair request,而idevicesyslog在获取设备信息之类的过程中会用到这个request,从而导致iOS lockdownd返回错误,程序退出?(具体哪个过程、pair、lockdown是什么没看懂,赶时间就不挖坟了)。blablabla经过热情网友的一顿讨论和验证后,nikias修复了这个问题,并在网友们的建议下,在2017.813提交了一个他本人觉得还不够完美的解决方案(5a85432)到master。
好吧,那就是要更新libimobiledevice到最新版了,但是因为我是半个小白,虽然知道了要更新到libimobiledevice到最新版,但是不知道怎么更新到最新,毕竟brew上已经是head版本了啊(1.2.0 HEAD, 安装目录版本号也是1.2.0)。而且我不想手动拉代码到本地来make什么的一系列操作,可能会导致一些软件在brew可以管理,一些又要我手动管理,强迫症表示难受。
$ brew info libimobiledevice
libimobiledevice: stable 1.2.0 (bottled), HEAD
Library to communicate with iOS devices natively
https://www.libimobiledevice.org/
/usr/local/Cellar/libimobiledevice/1.2.0_3 (66 files, 1MB) *
行吧,继续挖坟窥屏热心网友们的讨论,得出
brew uninstall libimobiledevice #卸载已安装的
brew install -v --HEAD --fresh --build-from-source libimobiledevice #用brew从git拉下来最新代码并build
这样就能更新了,于是执行,又在install的时候遇到报错
Error: libimobiledevice HEAD-eea4f1b did not build
……
READ THIS: https://docs.brew.sh/Troubleshooting
怎么肥四?我一开始没有注意看编译过程的输出,以为是网络之类的原因,直到出错2次,老实回头看编译日志了……行吧,难怪评论里都说要更新usbmuxd,还是老实点吧😂。
好的,老老实实卸载usbmuxd,libimobiledevice,然后安装最新版本,因为usbmuxd 1.0.10在brew里也是HEAD version了,也需要build-from-source。于是最终命令如下,问题解决,不需要chmod,终于能看到日志了:
brew uninstall libimobiledevice usbmuxd
brew install -v --HEAD --build-from-source usbmuxd libimobiledevice
这里注意,有些帖子和文章里install的时候带了个--fresh命令,但是我这里用--fresh时brew会报错,并不支持这个命令,去掉就好了。
libimobiledevice要求usbmuxd版本1.1.0的问题,其实在brew直接安装时,没有这个要求,usbmuxd 1.0.10版本也可以,原因是有人在brew上反馈了这个问题,brew里把usbmuxd的版本要求改到了1.0.10(issue#34601)。但是如果是用--build-from-source来安装libimobiledevice, libimobiledevice 的git代码里对usbmuxd的版本要求还是1.1.0以上,所以只能把usbmuxd一起更新。
这里对brew规则也有了点了解:
1.安装版本查看:如果是直接从brew bottle里安装,当前安装的版本名称,安装目录就以版本名称命名,如/usr/local/Cellar/libimobiledevice/1.2.0_3 ,如果是build-from-source,安装目录就以commitid来命名,如/usr/local/Cellar/libimobiledevice/HEAD-eea4f1b_3
没有弄明白的问题:
1.pair, lockdown, validate pair这些是什么定义和过程,为什么从设备读取日志会涉及到这些?从设备读取日志具体流程是什么?
2.brew的使用,build-from-source的时候,貌似还可以自定义很多参数,包括更改依赖软件和软件限定版本。
遇到的问题:
1.iOS11下总是有日志被截断,怀疑是buffer之类的不够大原因,iOS9下截断现象较少,但也有