iOS 页面调试小工具TTConsole

在开发真机调试过程中如果需要看日志是个挺麻烦的事,于是撸了个小工具,之所以叫Console,是因为初衷就是想做到像js页面调试工具那样强大[手动滑稽。],工具已上传至pod,可在github查看:TTConsole

最新更新

最近基于上次的进行了重做,并使用fishhook解决了之前对NSLog不友好定义,并增加了更多调试工具

环境切换:方便在开发调试期间切换环境,切换后需重启生效,启动时读取当前配置,然后对项目环境进行切换配置
网络请求: 拦截App内网络请求,可详细查看请求的具体内容,方便调试过程中监测
调试日志: 在App内查看调试产生的日志信息
崩溃收集: 对崩溃进行收集,显示崩溃的堆栈信息
沙盒浏览: 浏览沙盒文件,方便查看开发过程中创建的文件,目前仅支持查看 plist,图片,文本类的详情

手动分割线


这里主要记录下整个过程遇到的问题和下一步需要做的。

Problem I meet

视图层级的问题,既然是一直悬浮在页面上,那就需要保证视图一直在页面最上面,虽然加在window上也会在上面,但切换window的rootVC等操作就会破坏这种效果。于是乎就想到了window,自定义window,起初是没问题的,但在使用过程中发现了这造成了另一个问题,代码如下。

self.backgroundColor = [UIColor clearColor];
self.windowLevel = UIWindowLevelAlert + 1;  //如果想在 alert 之上,则改成 + 2
self.rootViewController = [UIViewController new];
[self makeKeyAndVisible];

这个时候keywindow变成了:

<TTConsoleFloatView: 0x105d0d000; baseClass = UIWindow; frame = (0 333.5; 80 26); gestureRecognizers = <NSArray: 0x1c0447b60>; layer = <UIWindowLayer: 0x1c022b060>>

虽然在这里没问题,但会影响其他使用keywindow的控件,因此放弃了这种方法,将浮动视图加在delegate的window上并尝试调整视图层级:

[[[UIApplication sharedApplication] delegate].window addSubview:self.floatView];
[[[UIApplication sharedApplication] delegate].window bringSubviewToFront:self.floatView];

结果并不如意,于是又去研究keywindow,官方解释如下:

The app's key window.
This property holds the [UIWindow] object in the [windows] array that is most recently sent the [makeKeyAndVisible] message.
// 应用程序的关键窗口。
// 这个属性保存了[windows]数组中的[UIWindow]对象,该对象最近被发送了[makeKeyAndVisible]消息

做了点测试做如下调整,终于符合预期效果。

// 这里有个坑,调用makeKeyAndVisible会替换keywindow,导致其他使用keywindow的控件可能出现的问题
self.backgroundColor = [UIColor clearColor];
self.windowLevel = UIWindowLevelAlert + 1;  //如果想在 alert 之上,则改成 + 2
self.rootViewController = [UIViewController new];
[self makeKeyAndVisible];
// 我们在设置浮动视图作为keywindow后恢复原来window的作为keywindow。
[[UIApplication sharedApplication].delegate.window makeKeyAndVisible];

TODO

1.目前,直接重新定义了NSLog,因此不是太灵活,下一步在想怎么去改进。

2.增加日志级别,筛选,查找

3.看能不能增加日志上传或者更实用的功能