近日,滴滴開源App研發助手DoraemonKit,DoraemonKit簡稱DoKit,中文名哆啦A夢,意味着能夠像哆啦A夢一樣提供給他的主人各種各樣的工具。
開發背景
每一個稍微有點規模的 App,總會自帶一些線下的測試功能代碼,比如環境切換功能、幀率查看功能等等,這些功能的切換入口往往放在各式各樣的入口中,比如一些特殊的手勢,雙擊 statusBar,雙擊某一個功能區塊,或者新建一個 keyWindow 始終至於 App 最上方等等,而且每一個 App 裏面的線下附帶功能模塊很多是相似的,比如幀率查看、內存和 CPU 監控等等,但是現在基本上都是每個 App 都是自己實現了一份,經歷了以上的問題之後,DoraemonKit 就有了它存在的意義。
DoraemonKit 是一個功能集合面板,能夠讓每一個 App 快速接入一些常用的或者你沒有實現的一些輔助開發工具、測試效率工具、視覺輔助工具,而且能夠完美在 Doraemon 面板中接入你已經實現的與業務緊密耦合的一些非通有的輔助工具,功能強大,接入方便,便於擴展。
簡單總結
1、DoraemonKit 能夠快速讓你的業務測試代碼能夠在這裏統一管理,統一收口;
2、DoraemonKit 內置很多常用的工具,避免重複實現,一次接入,你將會擁有強大的工具集合。
效果演示
功能模塊
一、常用工具
【App 信息查看】 快速查看手機信息,App 信息,權限信息的渠道,避免去手機設置查找或者查看項目源代碼的麻煩;
【沙盒瀏覽】 App 內部文件瀏覽的功能,支持刪除和預覽, 並且能通過 AirDrop 或者其他分享方式上傳到 PC 中,進行更加細緻的操作;
【MockGPS】 App 能定位到全國各地,支持地圖地位和手動輸入經緯度;
【H5任意門】 開發測試同學可以快速輸入 H5 頁面地址,查看該頁面效果;
【Crash查看】 方便本地打印出出現 Crash 的堆棧;
【子線程UI】 快速定位哪一些 UI 操作在非主線程中進行渲染,避免不必要的問題;
【清除本地數據】 一鍵刪除沙盒中所有數據;
【NSLog】 把所有 NSLog 信息打印到UI界面,避免沒有開發證書無法調式的尷尬;
【Lumberjack】 每一條 CocoaLumberjack 的日誌信息,都在在 App 的界面中顯示出來,再也不需要導出日誌這麼麻煩。
二、性能檢測
【幀率】 App 幀率信息提供波形圖查看功能,讓幀率監控的趨勢更加明顯;
【CPU】 App CPU 使用率信息提供波形圖查看功能,讓 CPU 監控的趨勢更加形象;
【內存】 App 內存使用量信息提供波形圖查看功能,讓內存監控的趨勢更加鮮明;
【流量】 攔截 App 內部流量信息,提供波形圖展示、流量概要展示、流量列表展示、流量篩選、流量詳情,對流量信息統一攔截,成爲我們 App 中自帶的 “Charles”;
【卡頓】 鎖定 App 出現卡頓的時刻,打印出對應的代碼調用堆棧;
【自定義】 可以選擇你要監控的選項,包括 FPS、CPU、內存、流量。監控完畢之後,把數據保存到本地,也可以導出來做更加細緻的分析;
【Load 耗時】 Load 函數耗時是 iOS 啓動性能優化中重要的一項,該功能可以打印出所有 Load 函數的耗時,給開發者以參考。
三、視覺工具
【顏色吸管】 方便設計師 UI 捉蟲的時候,查看每一個組件的顏色值是否設置正確;
【組件檢查】 可以抓取任意一個UI控件,查看它們的詳細信息,包括控件名稱、控件位置、背景色、字體顏色、字體大小;
【對齊標尺】 參考 Android 系統自帶測試工具,能夠實時捕獲屏幕座標,並且可以查看組件是否對齊;
【元素邊框線】 繪製出每一個 UI 組件的邊框,對於組件佈局有一定的參考意義。
DoraemonKit如何使用?
iOS 接入文檔
1.cocoapods依賴
pod 'DoraemonKit/Core', '~> 1.1.4', :configurations => ['Debug']
pod 'DoraemonKit/WithLogger', '~> 1.1.4', :configurations => ['Debug']
pod 'DoraemonKit/WithGPS', '~> 1.1.4', :configurations => ['Debug']
Core subspec作爲核心,必須引入。
如果你的日誌是基於CocoaLumberjack,那你也可以引入WithLogger subspec。
MockGPS存在一些兼容性問題(絕大部分情況是好的,問題詳見https://github.com/didi/DoraemonKit/issues/35), 如果你的app接入MockGPS存在問題的話,可以不用引入WithGPS subspec。
tip:只在Debug環境中進行集成,不要帶到線上。有一些hook操作會污染線上代碼。
2.使用DoraemonKit內置工具集的接入方式
在App啓動的時候添加一下代碼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef DEBUG
[[DoraemonManager shareInstance] install];
#endif
}
通過以上步驟你就可以使用DorameonKit所有的內置工具集合。如果你想把自己與業務相關的一些工具代碼加入到DoraemonKit中做統一管理的話,你可以按照3的步驟來做。
3、添加自定義測試模塊到Doraemon面板中(非必要)
比如我們要在Doraemon面板中添加一個環境切換的功能。
第一步:新建一個類,實現KDDoraemonPluginProtocol協議中的pluginDidLoad方法,該方法就是以後點擊Doraemon工具面板中“環境切換”按鈕觸發的事件。
比如以代駕司機端爲例,點擊按鈕之後會進入環境切換頁面。
@implementation KDDoraemonEnvPlugin
- (void)pluginDidLoad{
[APP_INTERACOTR.rootNav openURL:@"KDSJ://KDDoraemonSFViewController"];
[[DoraemonManager shareInstance] hiddenHomeWindow];
}
@end
第二步:在Doraemon初始化的地方添加第一步中添加的“環境切換”插件
調用DoraemonManager的以下方法:
[[DoraemonManager shareInstance] addPluginWithTitle:@"環境切換" icon:@"doraemon_default" desc:@"用於app內部環境切換功能" pluginName:@"KDDoraemonEnvPlugin" atModule:@"業務專區"];
依次代表 集成到DoraemonKit面板中的標題,圖標,描述,插件名稱,和所屬於的模塊。
比如以代駕司機端爲例:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef DEBUG
[self configDoraemonKit];
#endif
}
//配置Doraemon工具集
- (void)configDoraemonKit{
[[DoraemonManager shareInstance] addPluginWithTitle:@"環境切換" icon:@"doraemon_default" desc:@"用於app內部環境切換功能" pluginName:@"KDDoraemonEnvPlugin" atModule:@"業務專區"];
[[DoraemonManager shareInstance] addH5DoorBlock:^(NSString *h5Url) {
[APP_INTERACOTR.rootNav openURL:@"KDSJ://KDWebViewController" withQuery:@{@"urlString":h5Url}];
}];
[[DoraemonManager shareInstance] install];
}
關於Android的接入,可查看此鏈接:
https://github.com/didi/DoraemonKit/blob/master/Doc/android_cn_guide.md
關於該項目的更多信息,可查看GitHub:
https://github.com/didi/DoraemonKit
更多內容,請關注前端之巔。