Ios10 NSLog无效?

本文原载于我的ios10 NSLog无效?,其他未授权转载请联系楼主。

去年起,我接触到ios10的越狱开发,但发现ios10的NSLog是失效了(曾一度以为是Tweak失效了,各种蛋疼的测试,发现原来是NSLog的原因)。
既然发现了这个问题,那就必须试图解决,以下是我解决的过程,发出来给大家警个醒,以免大家重复踩坑。
其实这个问题的原因是因为在ios10,苹果更改了日志系统,添加了几个os_函数,其中就有os_log,具体可以在看这个链接

尝试历史

syslogd to /var/log/syslog

之前旧的版本一直是使用这个,其实这个小插件很简单,仅仅是在/etc/syslog.conf里面加了一句

*.* /var/log/syslog

来把所有的日志导出到/var/log/syslog这个文件里。
结果,ios10下无效。

idevicesyslog

这个工具是我一直使用的,在mac上通过数据线链接手机后,能在mac的控制台输出ios的日志,它的优点是能够输出颜色,非常的实用的一个小工具,与它一起的套件都非常的好用,共有

name
idevice_id
idevicecrashreport
idevicedebugserverproxy
ideviceimagemounter
idevicename
ideviceprovision
idevicebackup
idevicedate
idevicediagnostics
ideviceinfo
idevicenotificationproxy
idevicescreenshot
idevicebackup2
idevicedebug
ideviceenterrecovery
ideviceinstaller
idevicepair
idevicesyslog

各个功能看名字就知道了,这里不再细表,可以通过

brew install libimobiledevice

来安装。

结果实测,idevicesyslog在ios下,不能够输出的Tweak的NSLog

socat

这个工具用来干这个事。。。也大才小用了吧。这个工具功能非常强大,这里不再专门讲解了。

deviceconsole

一番尝试之下,发现这个问题没有那么简单,于是百度了一下,结果出来个更坑爹的货,让用deviceconsole,还指出了github repo,结果我clone下来,一番编译,提示

ld: framework not found MobileDevice
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这个报错意为找不到MobileDevice这个库,但是我去看过了以后,它明明在哪。。。搞的我也是一脸懵逼。后来猜想这个原因可能是因为这个库是私有库,而xcode9可能不让链接私有库了。。
于是我建了一个软连接,才重新编译通过。
编译通过之后,发现没有这个执行权限,然后一番捣鼓,结果发现!!!!根!本!没!卵!用!!!
关于这个项目的更多信息,请移步我clone的repo,我修改后pull request,结果十多天了没人理我。。

ondeviceconsole

最后,再次抱着试试看的态度,准备试试ondeviceconsole,如果还是不行的话,就只能呵呵,重写NSLog到os_log了。但所幸,这个是可用的。。。

3 个赞

ondeviceconsole会丢日志, 输出不完全

socat可用吗?

ios10.3, socat 亲测可用

666老铁

控制台。。。。

楼主说的这些,iOS10刚越狱那会儿我基本都折腾过,只有ondeviceconsole勉强能用(算不上太好的选择,会丢日志不说,跑的时间长了以后控制台输出也有问题)。

后来升级了Xcode,发现用Mac自带的Console就能看到大部分日志,才知道是苹果改了ASL… - -!

不过那时候我已经习惯自己写日志了[手动狗头]