关于日志打印和过滤的那点破事
前两天,重启电脑突然发现我的iOS8设备无法连接到MacOS了。。
MMP,也就是说没有办法使用Xcode调试、之前使用的日志查看也没有办法继续。。
具体报错如下:Xcode<Version 9.4 (9F1027a)>报错如下: (我安装过Xcode10 beta1)
iTunes报错如下:
| 1 | iTunes 无法连接 iPhone “iPhone”,因为收到来自此设备的无效响应。 | 

Apple Configurator2报错如下:
| 1 | 已收到设备上的意外响应。 | 

还是 先来聊一下日志打印的几种方案吧。
手机可以连接到MacOS
这种情况是最常见的,就是能在Xcode下Debug….
方案一:Console.app(控制台)
这是MacOS自带的日志神器~ 效果顶呱呱👍👍👍,截图如下:
具体用法我就不说了。。。毕竟都是中文😂
方案二:LogGuru
madordie/LogGuru 也不错,很久之前fork自FIRHQ/LogGuru,增加了直接过滤的功能,要不然速度真的很慢。。
只要插入USB,即可显示日志,还是不错滴。。

方案三: 其他的
还有很多方案,比如说命令行啊、其他的工具啊,我就不说了,我觉得 Console.app(控制台) 就够了😂
手机无法链接进MacOS
也就是最开始说的报错的情况下,可以连接进MacOS的方案均无法使用。苦逼,只能让iOS打印日志了。。
下面都是 越狱环境 下的。。不越狱还有人用iOS8么😂
先来看个文档:The iPhone Wiki/System Log,这里提供了很多方案,也非常全面,值得一试。
苦逼的事情是我手上的iOS8.4.1无法使用syslogd to /var/log/syslog插件,尝试使用On-device with saving to a file via a Python script的方案去解决也并不如意。。
开始用On-device with socat( 在iosre中也有一个类似的文章:iOS查看日志利器 —— socat),说的都是相当的详细。
socat的坑
stop没有用
输入watch查看,输入stop停止(不过停止貌似没用,也不知道为啥,知道的请告诉我)
这个真的是没有用,所以watch功能就很鸡肋。。
没有办法实时过滤
文中提到了很多过滤条件,但是一旦开启过滤,就没有办法显示实时日志。。也就是说无法和watch共存。。。
换个姿势使用socat
socat的日志都在终端上,不着色不说还有上面的两个很影响使用的问题。。。于是乎,为了增加过滤功能,需要通过管道将输出接入另外的命令如:grep等。
socat命令需要手动输入watch才能显示出实时命令,这个让管道并不能直接使用。这里需要借助expect命令。
好了所有的点都通了,大致步骤如下:
在mac上安装expect
| 1 | brew install expect | 
在mac的~/.bash_profile配置
此处假设你的设备已经按照iOS逆向-设备ssh免密登录配置好了:
| 1 | function ios-socat() { | 
- ios-socat函数名,在命令行可以直接输入函数名调用该函数
- i5s在- ~/.ssh/config中配置的名字
如果没有配置ssh免密呢需要这样:
| 1 | function ios-socat() { | 
- -p22端口号,22是默认不用写,但是其他的需要写。
- ios's_ipiOS设备的ip。
- mypasswordiOS设备密码
- 这个我没测。。大致如此,我对expect的语法也不是很熟
最后别忘了让~/.bash_profile生效:
| 1 | source ~/.bash_profile | 
然后只需要在命令行输入ios-socat就可以看到蹭蹭蹭的日志打印咯。。至于用什么管道啊都不是问题。
比如:
只显示包含iosre关键字的日志
| 1 | ios-socat | grep iosre | 
晋级用法
我还不清楚究竟什么原因导致了收到来自此设备的无效响应错误,布吉岛系统修改了什么。我尝试重新安装iTunes、Xcode都无效(据说陌陌的开发为这个无法调试直接将系统降级是可以的😂)。。有老铁懂得指点下~~
目前虽然上面都可以用,但是看个日志并不能满足我的野心,最后在移动硬盘里做了一个10.12的系统😂,用了Console.app…