iOS 设备屏幕上实时打印 Log 的小工具
2016-11-21 08:51
627 查看
需求
写这个小工具的想法,主要来源于很多团队都会用友盟、TalkingData 等第三方框架做自定义事件统计;不过统计代码加好之后,没有很好的方法来让测试工程师验证一下事件加上了没有,调用次数有没有重复等。
所以写了这个小工具,是一个保持在最前的 UIWindow,可以实时打印 log。
源码地址
源码是用 Objective-C 写的,放在 github 上了。
https://github.com/DaiYue/HAMLogOutputWindow
用法
集成
只需把 HAMLogOutputWindow.h、HAMLogOutputWindow.m 两个文件加到工程中。如果您使用友盟或者 TalkingData 做事件统计,也可以加进来 demo 工程中的 HAMStatisticsManager.h 和 HAMStatisticsManager.m。
开启
启用这个 debug 窗口非常简单,只需一行代码:
[[HAMLogOutputWindow sharedInstance] setHidden:NO];
您可以把这行代码加到 AppDelegate.m 里,例如:
#define SHOW_STATISTICS_DEBUG 1
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG && SHOW_STATISTICS_DEBUG
[[HAMLogOutputWindow sharedInstance] setHidden:NO];
#endif
return YES;
}
不需显示 时把 define 的1改为0即可,也保证了在 release 版本中不会出现。
输出和清空 log
输出 log:
[HAMLogOutputWindow printLog:@"some log"];
输出的 log 会滚动显示在 debug 窗口中,末尾会自动添加换行。最新的 log(0.1s 之内)会显示为黄色,之前的会显示为白色。
如需清空 log,只需调用:
[HAMLogOutputWindow clear];
源码解释
HAMLog
用来存储 log 信息的 model 类。有两个属性,时间戳和具体的 log 内容。
HAMLogOutputWindow
是一个单例的 Window,里面有一个 UITextView 用来显示 log。windowLevel 设为 UIWindowLevelAlert 所以能保持在最前。userInteractionEnabled 设为 NO,这样屏幕触摸事件会传递到下层的实际 view 上去,不会挡住测试的操作。
打印 log 的时候,建立一条 log 对象存进 logs 数组里。logs 数组实际是个队列,超出 20 条之后就会抛弃最旧的一条。之后调用 refreshLogDisplay 刷新 log 的显示。
在 refreshLogDisplay 这个方法中,首先根据 logs 数组构造一个 attributedString。其中时间戳与当前时间相差 0.1s 以内的,显示为黄色,否则显示为白色。这样就能在视觉上把前后关联比较紧密的 log 同时高亮,比如点击 tab 和相应 viewController 的 viewWillAppear 两个统计事件。
最后用以下代码让显示 log 的 UITextView 滚动到底部。
NSRange bottom = NSMakeRange(attributedString.length - 1, 1);
[self.textView scrollRangeToVisible:bottom];
写这个小工具的想法,主要来源于很多团队都会用友盟、TalkingData 等第三方框架做自定义事件统计;不过统计代码加好之后,没有很好的方法来让测试工程师验证一下事件加上了没有,调用次数有没有重复等。
所以写了这个小工具,是一个保持在最前的 UIWindow,可以实时打印 log。
源码地址
源码是用 Objective-C 写的,放在 github 上了。
https://github.com/DaiYue/HAMLogOutputWindow
用法
集成
只需把 HAMLogOutputWindow.h、HAMLogOutputWindow.m 两个文件加到工程中。如果您使用友盟或者 TalkingData 做事件统计,也可以加进来 demo 工程中的 HAMStatisticsManager.h 和 HAMStatisticsManager.m。
开启
启用这个 debug 窗口非常简单,只需一行代码:
[[HAMLogOutputWindow sharedInstance] setHidden:NO];
您可以把这行代码加到 AppDelegate.m 里,例如:
#define SHOW_STATISTICS_DEBUG 1
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG && SHOW_STATISTICS_DEBUG
[[HAMLogOutputWindow sharedInstance] setHidden:NO];
#endif
return YES;
}
不需显示 时把 define 的1改为0即可,也保证了在 release 版本中不会出现。
输出和清空 log
输出 log:
[HAMLogOutputWindow printLog:@"some log"];
输出的 log 会滚动显示在 debug 窗口中,末尾会自动添加换行。最新的 log(0.1s 之内)会显示为黄色,之前的会显示为白色。
如需清空 log,只需调用:
[HAMLogOutputWindow clear];
源码解释
HAMLog
用来存储 log 信息的 model 类。有两个属性,时间戳和具体的 log 内容。
HAMLogOutputWindow
是一个单例的 Window,里面有一个 UITextView 用来显示 log。windowLevel 设为 UIWindowLevelAlert 所以能保持在最前。userInteractionEnabled 设为 NO,这样屏幕触摸事件会传递到下层的实际 view 上去,不会挡住测试的操作。
打印 log 的时候,建立一条 log 对象存进 logs 数组里。logs 数组实际是个队列,超出 20 条之后就会抛弃最旧的一条。之后调用 refreshLogDisplay 刷新 log 的显示。
在 refreshLogDisplay 这个方法中,首先根据 logs 数组构造一个 attributedString。其中时间戳与当前时间相差 0.1s 以内的,显示为黄色,否则显示为白色。这样就能在视觉上把前后关联比较紧密的 log 同时高亮,比如点击 tab 和相应 viewController 的 viewWillAppear 两个统计事件。
最后用以下代码让显示 log 的 UITextView 滚动到底部。
NSRange bottom = NSMakeRange(attributedString.length - 1, 1);
[self.textView scrollRangeToVisible:bottom];
相关文章推荐
- heatma.ps发布iOS设备的屏幕触摸分析工具
- 将Android和iOS设备屏幕映射到电脑屏幕工具
- android的Log日志打印管理工具类(一)
- iOS之 最新苹果移动设备屏幕的大小
- iOS objc_msgSend 野指针Crash 从 Log 提取 Crash 时 selector 的地址和名字并打印
- 保持iOS设备屏幕常亮的方法
- iOS设备屏幕分辨率分布
- linux系统连接串口工具打印log
- IOS 判断设备屏幕尺寸、分辨率
- iOS发布时设置不打印log
- iOS---实现在屏幕上实时绘图的简单效果---CAShaperLayer和UIBezierPath的简单运用
- iOS 苹果所有设备的系统、屏幕尺寸和像素
- 保持iOS设备屏幕常亮的方法
- iOS设备屏幕像素总览
- iOS 设备的屏幕尺寸一览
- 获取当前IOS设备的CPU型号,CPU核数,GPU,GPU核数,屏幕分辨率,屏幕尺寸,PPI等信息
- iOS设备中如何开启屏幕缩放功能
- 保持iOS设备屏幕常亮的方法
- iOS:界面适配(三)--iPhone不同机型或设备不同尺寸适配(屏幕适配)和系统适配
- iOS及时log日志查看工具 (iConsole)