Open ohroy opened 6 years ago
去年起,我接触到ios10的越狱开发,但发现ios10的NSLog是失效了(曾一度以为是Tweak失效了,各种蛋疼的测试,发现原来是NSLog的原因)。 既然发现了这个问题,那就必须试图解决,以下是我解决的过程,发出来给大家警个醒,以免大家重复踩坑。 其实这个问题的原因是因为在ios10,苹果更改了日志系统,添加了几个os_函数,其中就有os_log,具体可以在看这个链接
NSLog
os_log
之前旧的版本一直是使用这个,其实这个小插件很简单,仅仅是在/etc/syslog.conf里面加了一句
/etc/syslog.conf
*.* /var/log/syslog
来把所有的日志导出到/var/log/syslog这个文件里。 结果,ios10下无效。
各个功能看名字就知道了,这里不再细表,可以通过
brew install libimobiledevice
来安装。
结果实测,idevicesyslog在ios下,不能够输出的Tweak的NSLog
这个工具用来干这个事。。。也大才小用了吧。这个工具功能非常强大,这里不再专门讲解了。
一番尝试之下,发现这个问题没有那么简单,于是百度了一下,结果出来个更坑爹的货,让用deviceconsole,还指出了github repo,结果我clone下来,一番编译,提示
deviceconsole
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,结果十多天了没人理我。。
MobileDevice
xcode9
最后,再次抱着试试看的态度,准备试试ondeviceconsole,如果还是不行的话,就只能呵呵,重写NSLog到os_log了。但所幸,这个是可用的。。。
今天发现,更新macosx 10.13之后,自带的xode9会自动将NSLog转为os_log以能在系统的日志里查看。
macosx 10.13
for(int i=0;i<1000;i++){ printf("%d",i); }
deviceconsole找个fork就可以用,我的问题是 theos 找错SDK了,一只用的 iOS 9 的SDK来编译的 Tweak
去年起,我接触到ios10的越狱开发,但发现ios10的
NSLog
是失效了(曾一度以为是Tweak失效了,各种蛋疼的测试,发现原来是NSLog的原因)。既然发现了这个问题,那就必须试图解决,以下是我解决的过程,发出来给大家警个醒,以免大家重复踩坑。
其实这个问题的原因是因为在ios10,苹果更改了日志系统,添加了几个os_函数,其中就有
os_log
,具体可以在看这个链接尝试历史
syslogd to /var/log/syslog
之前旧的版本一直是使用这个,其实这个小插件很简单,仅仅是在
/etc/syslog.conf
里面加了一句来把所有的日志导出到/var/log/syslog这个文件里。
结果,ios10下无效。
idevicesyslog
各个功能看名字就知道了,这里不再细表,可以通过
来安装。
结果实测,idevicesyslog在ios下,不能够输出的Tweak的NSLog
socat
这个工具用来干这个事。。。也大才小用了吧。这个工具功能非常强大,这里不再专门讲解了。
deviceconsole
一番尝试之下,发现这个问题没有那么简单,于是百度了一下,结果出来个更坑爹的货,让用
deviceconsole
,还指出了github repo,结果我clone下来,一番编译,提示这个报错意为找不到
MobileDevice
这个库,但是我去看过了以后,它明明在哪。。。搞的我也是一脸懵逼。后来猜想这个原因可能是因为这个库是私有库,而xcode9
可能不让链接私有库了。。于是我建了一个软连接,才重新编译通过。
编译通过之后,发现没有这个执行权限,然后一番捣鼓,结果发现!!!!根!本!没!卵!用!!!
关于这个项目的更多信息,请移步我clone的repo,我修改后pull request,结果十多天了没人理我。。
ondeviceconsole
最后,再次抱着试试看的态度,准备试试ondeviceconsole,如果还是不行的话,就只能呵呵,重写NSLog到os_log了。但所幸,这个是可用的。。。