ohroy / blog

A super blog lite -- just one page. use vue with github api !
https://blog.6h.work
Do What The F*ck You Want To Public License
147 stars 15 forks source link

ios10 NSLog无效? #17

Open ohroy opened 6 years ago

ohroy commented 6 years ago

去年起,我接触到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了。但所幸,这个是可用的。。。

ohroy commented 6 years ago

今天发现,更新macosx 10.13之后,自带的xode9会自动将NSLog转为os_log以能在系统的日志里查看。

ohroy commented 6 years ago
for(int i=0;i<1000;i++){
     printf("%d",i);
}
zhigang1992 commented 6 years ago

deviceconsole找个fork就可以用,我的问题是 theos 找错SDK了,一只用的 iOS 9 的SDK来编译的 Tweak