一個在 iOS 設備屏幕上實時打印 Log 的小工具

需求

寫這個小工具的想法,主要來源於不少團隊都會用友盟、TalkingData 等第三方框架作自定義事件統計;不過統計代碼加好以後,沒有很好的方法來讓測試工程師驗證一下事件加上了沒有,調用次數有沒有重複等。git

因此寫了這個小工具,是一個保持在最前的 UIWindow,能夠實時打印 log。github

demo

源碼地址

源碼是用 Objective-C 寫的,放在 github 上了。數組

用法

集成

只需把 HAMLogOutputWindow.hHAMLogOutputWindow.m 兩個文件加到工程中。若是您使用友盟或者 TalkingData 作事件統計,也能夠加進來 demo 工程中的 HAMStatisticsManager.hHAMStatisticsManager.mapp

開啓

啓用這個 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:spa

[HAMLogOutputWindow printLog:@"some log"];複製代碼

輸出的 log 會滾動顯示在 debug 窗口中,末尾會自動添加換行。最新的 log(0.1s 以內)會顯示爲黃色,以前的會顯示爲白色。debug

如需清空 log,只需調用:code

[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];複製代碼

代碼很是簡單,在此基礎上能夠根據本身項目的需求進行改造。拿去用吧~

相關文章
相關標籤/搜索