iOS 设备屏幕上实时打印 Log 的小工具
需求
写这个小工具的想法,主要来源于很多团队都会用友盟、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];
iOS 设备屏幕上实时打印 Log 的小工具的更多相关文章
- 解决iOS设备屏幕切换时页面造成的问题
环境:IOS6~7 Safari 问题:iOS设备屏幕切换时可能会造成屏幕变大,出现左右间距等问题 解决方法: 头部加入<meta name = "viewport" con ...
- iOS设备屏幕分辨率分布
iOS设备屏幕分辨率比较单一,960*640是iPhone4和4s的分辨率,占比67.4%;1024*768是iPad1和iPad2的分辨率,占比22.5%;480*320是iPhone3和3gs的分 ...
- ios设备屏幕尺寸与分辨率
iOS 设备的屏幕尺寸.分辨率及其屏幕边长比例详细情况是怎样的? 根据屏幕尺寸和分辨率,ios现在数起来有6个版本.一,3GS:二,4s为代表:三,iphone5:四,ipad2为代表:五,ipad4 ...
- Xenko基础API笔记3- Pointers指针设备屏幕上点对应的手指触摸。
样本这里是一个简单的示例程序,跟踪目前在屏幕上的指针和打印他们的位置.访问输入字段,类继承自@ SiliconStudio.Xenko.脚本的类. public override async Task ...
- iOS---实现在屏幕上实时绘图的简单效果---CAShaperLayer和UIBezierPath的简单运用
首先,声明几个属性 @property(nonatomic,strong)UIBezierPath * beizer; @property(nonatomic,assign)CGPoint start ...
- iOS设备 屏幕尺寸、操作系统、摄像头像素、发行时间 汇总
设备 硬件尺寸 软件尺寸 精密程度 操作系统 摄像头像素 发行时间 iPhone 4s 640 x 960 320 x 480 2x iOS 5 800万 2011.10.04 iPhone 5 64 ...
- iOS设备屏幕像素总览
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4011728.html ,转载请注明出处. 本文永久地址为http://www.cnblogs.com/Ch ...
- 实时跟踪log变化的工具Apachetop
作为一个网站管理员,我们经常会有需要知道当前什么人正在访问我们的网站,谁正在频繁的抓取我们网站的内容,什么搜索引擎正在抓取我们网站?面对这些问题,我们虽然可以去查看log日志文件,但是却不能让我们实时 ...
- CentOS下安装实时检测网络带宽的小工具bmon
首先下载rpmforge-release扩展的rpm包 32位操作系统:wget http://www.sudu.us/Tools/bmon/rpmforge-release-0.3.6-1.el5. ...
随机推荐
- vue嵌套路由总结
嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<router-view>,但是如果使用,那么在一 ...
- Android adb你真的会用吗?
引言 本文基于Android官方文档, 以及个人工作的使用经验, 总结下adb的常用用法, 备忘. 1, adb简介 adb全名Andorid Debug Bridge. 顾名思义, 这是一个Debu ...
- MFC中如何给静态文本框添加消息响应
需要两个步骤: 第一个: 是改变它的ID(默认情况下所有的静态文本框的ID都为IDC_STATIC,你需要改变他的ID为其他的值). 第二个: 是在它的属性对话框中选中Notify选项,VS是将该属性 ...
- 【Spark】SparkStreaming-Checkpoint-容错
SparkStreaming-Checkpoint-容错 Spark Streaming如何使用checkpoint容错 - CSDN博客 spark/JavaRecoverableNetworkWo ...
- Tensorflow进行POS词性标注NER实体识别 - 构建LSTM网络进行序列化标注
http://blog.csdn.net/rockingdingo/article/details/55653279 Github下载完整代码 https://github.com/rockingd ...
- AdMaster技术副总裁谈Hadoop、营销数据、Python和挖掘平台
http://www.infoq.com/cn/news/2014/09/admaster-hadoop 卢亿雷是现任AdMaster技术副总裁,曾在联想研究院.百度基础架构部.Carbonite C ...
- 红米1线刷救砖教程V5版(移动联通适用,线刷包永久有效)
红米1线刷救砖教程V5版(移动联通适用,线刷包永久有效) 原文来自:http://www.miui.com/thread-1890972-1-1.html?mobile=2 ,加了些自己的经验. (我 ...
- Redis实战总结-配置、持久化、复制
Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.c ...
- oauth2-server-php-docs 存储 学说2
学说2 创建客户端和访问令牌存储 要把学说融入到你的项目中,首先要建立你的实体.我们先从客户端,用户和访问令牌模型开始: yaml YourNamespace\Entity\OAuthClient: ...
- Discuz!X/数据库操作方法
原DB类的改进 Discuz! X2.5新版对数据库DB层进行了功能和安全方面的加强: addslashes的处理 仅insert(),update(),delete() 方法对传入其的数组形式的参数 ...