作者:戴倉薯
連結:https://www.jianshu.com/p/4ebb1f3973bf
需求
寫這個小工具的想法,主要來源於很多團隊都會用友盟、TalkingData 等第三方框架做自定義事件統計;不過統計程式碼加好之後,沒有很好的方法來讓測試工程師驗證一下事件加上了沒有,呼叫次數有沒有重覆等。
所以寫了這個小工具,是一個保持在最前的 UIWindow,可以實時列印 log。
原始碼地址
原始碼是用 Objective-C 寫的,放在 github 上了。
用法
整合
只需把 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];
程式碼非常簡單,在此基礎上可以根據自己專案的需求進行改造。拿去用吧~
●編號281,輸入編號直達本文
●輸入m獲取文章目錄
Web開發
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。