本文原载于我的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了。但所幸,这个是可用的。。。