LLDebugTool - 便捷的IOS調(diào)試工具(支持組件化)

image

LLDebugTool是一款針對開發(fā)者和測試者的調(diào)試工具,它可以幫助你在非Xcode的情況下,進(jìn)行數(shù)據(jù)分析和操作。

為您的下一個(gè)項(xiàng)目選擇LLDebugTool,或者遷移到您現(xiàn)有的項(xiàng)目中——您會為此感到驚喜!

screenGif.gif

最近更新 (1.2.0)

支持組件化。

LLDebugTool 現(xiàn)在已經(jīng)支持組件化了?,F(xiàn)在你可以集成某一個(gè)或者多個(gè)模塊到你自己的Debug 工具里。你可以直接使用每個(gè)模塊內(nèi)包含的視圖控制器,或者只調(diào)用Function文件夾下的功能,然后自己搭建UI。

如何使用組件化,具體請看Wiki使用組件化或者添加 LLDebugTool 到你的項(xiàng)目中

更多的修改內(nèi)容可以查看Version 1.2.0 Project。

新增

  • 增加 LLRoute,用于解決組件間的相互引用。當(dāng)相關(guān)組件存在時(shí), LLRoute 會調(diào)用相關(guān)的方法,否則什么都不會做。

更新

  • 更新文件夾目錄?,F(xiàn)在整個(gè)項(xiàng)目是根據(jù)組件來分類的,在每個(gè)組件文件夾下,又分為FunctionUserInterface。

  • 修改組件間的相互引用的文件,改為由Route處理。

  • 更新了 NSURLSessionConfiguration.m ,hook了 protocolClasses 這個(gè)方法。

添加 LLDebugTool 到你的項(xiàng)目中

CocoaPods

CocoaPods 是集成LLDebugTool的首選方式。

Objective - C
  1. 添加 pod 'LLDebugTool' , '~> 1.0.0' 到你的Podfile里。如果只想在Debug模式下使用,則添加pod 'LLDebugTool' , '~> 1.0.0' ,:configurations => ['Debug'] 到你的Podfile里,詳細(xì)的配置方式可以查看Wiki/如何僅在Debug環(huán)境中使用。如果你想要指定某個(gè)版本,可以類似這樣使用 pod 'LLDebugTool' , '1.1.7' ,:configurations => ['Debug']。
  2. 終端輸入pod install來進(jìn)行集成。搜索不到LLDebugTool或者搜不到最新版本時(shí),可先運(yùn)行pod repo update,再執(zhí)行pod install。
  3. 在你需要使用LLDebugTool的文件里添加#import "LLDebug.h",或者直接在pch文件中添加#import "LLDebug.h"
Swift
  1. 添加 pod 'LLDebugToolSwift' , '~> 1.0.0' 到你的Podfile里。如果只想在Debug模式下使用,則添加pod 'LLDebugToolSwift' , '~> 1.0.0' ,:configurations => ['Debug'] 到你的Podfile里,詳細(xì)的配置方式可以查看Wiki/如何僅在Debug環(huán)境中使用。如果你想要指定某個(gè)版本,可以類似這樣使用 pod 'LLDebugToolSwift' , '1.1.7' ,:configurations => ['Debug']。
  2. 必須在Podfile中添加 use_frameworks! 。
  3. 終端輸入pod install來進(jìn)行集成。搜索不到LLDebugToolSwift或者搜不到最新版本時(shí),可先運(yùn)行pod repo update,再執(zhí)行pod install。
  4. 在你需要使用LLDebugTool的文件里添加import LLDebugToolSwift。

Carthage

Carthage 是一個(gè)分散的依賴管理器,它構(gòu)建您的依賴并為您提供framework框架。

Objective - C
  1. 要使用Carthage將LLDebugTool集成到Xcode項(xiàng)目中,請?jiān)?code>Cartfile中指定它:

    github "LLDebugTool"

  2. 運(yùn)行 carthage 來構(gòu)建框架,并將構(gòu)建的LLDebugTool.framework拖到Xcode項(xiàng)目中。

Swift
  1. 要使用Carthage將LLDebugToolSwift集成到Xcode項(xiàng)目中,請?jiān)?code>Cartfile中指定它:

    github "LLDebugToolSwift"

  2. 運(yùn)行 carthage 來構(gòu)建框架,并將構(gòu)建的LLDebugToolSwift.framework拖到Xcode項(xiàng)目中。

源文件

您可以直接將名為LLDebugTool文件夾的源文件添加到項(xiàng)目中。

Objective - C
  1. 下載最新的代碼版本或?qū)⒋鎯熳鳛間it子模塊添加到您的git跟蹤項(xiàng)目中。
  2. 在Xcode中打開項(xiàng)目,然后拖拽名為“LLDebugTool”的源文件夾到你的項(xiàng)目中。當(dāng)提示Choose options for adding these files時(shí),務(wù)必勾選Copy items if needed這項(xiàng)。
  3. 集成FMDB到項(xiàng)目中,F(xiàn)MDB是一個(gè)圍繞SQLite的Objective-C包裝器開源庫。
  4. 在你需要使用LLDebugTool的文件里添加#import "LLDebug.h",或者直接在pch文件中添加#import "LLDebug.h"
Swift
  1. 下載最新的Objective-C代碼版本或?qū)⒋鎯熳鳛間it子模塊添加到您的git跟蹤項(xiàng)目中。
  2. 下載最新的Swift擴(kuò)展代碼版本或?qū)⒋鎯熳鳛間it子模塊添加到您的git跟蹤項(xiàng)目中。
  3. 在Xcode中打開項(xiàng)目,然后拖拽名為“LLDebugTool”和“LLDebugToolSwift”的源文件夾到你的項(xiàng)目中。當(dāng)提示Choose options for adding these files時(shí),務(wù)必勾選Copy items if needed這項(xiàng)。
  4. 集成FMDB到項(xiàng)目中,F(xiàn)MDB是一個(gè)圍繞SQLite的Objective-C包裝器開源庫。
  5. 在你需要使用LLDebugTool的文件里添加import LLDebugToolSwift

如何使用

啟動(dòng)

你需要在"application:(UIApplication * )application didFinishLaunchingWithOptions:(NSDictionary * )launchOptions"中啟動(dòng)LLDebugTool,否則你可能會丟掉某些信息。

如果你想自定義一些參數(shù),你需要在調(diào)用"startWorking"前配置這些參數(shù)。更詳細(xì)的配置信息請看LLConfig.h

  • 快速啟動(dòng)

In Objective-C

#import "AppDelegate.h"
#import "LLDebug.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // The default color configuration is green background and white text color. 

    // Start working.
    [[LLDebugTool sharedTool] startWorking];
    
    // Write your project code here.
    return YES;
}

In Swift

import LLDebugToolSwift

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // ####################### Start LLDebugTool #######################//
        // Use this line to start working.
        LLDebugTool.shared().startWorking()
        
        // Write your project code here.
        
        return true
    }
  • 使用自定義的配置啟動(dòng)

In Objective-C

#import "AppDelegate.h"
#import "LLDebug.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //####################### Color Style #######################//
    // Uncomment one of the following lines to change the color configuration.
    // [LLConfig sharedConfig].colorStyle = LLConfigColorStyleSystem;
    // [[LLConfig sharedConfig] configBackgroundColor:[UIColor orangeColor] textColor:[UIColor whiteColor] statusBarStyle:UIStatusBarStyleDefault];
    
    //####################### User Identity #######################//
    // Use this line to tag user. More config please see "LLConfig.h".
    [LLConfig sharedConfig].userIdentity = @"Miss L";
    
    //####################### Window Style #######################//
    // Uncomment one of the following lines to change the window style.
    // [LLConfig sharedConfig].windowStyle = LLConfigWindowNetBar;

    //####################### Features #######################//
    // Uncomment this line to change the available features.
    // [LLConfig sharedConfig].availables = LLConfigAvailableNoneAppInfo;
    
    // ####################### Start LLDebugTool #######################//
    // Use this line to start working.
    [[LLDebugTool sharedTool] startWorking];
    
    return YES;
}

In Swift

import LLDebugToolSwift

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //####################### Color Style #######################//
        // Uncomment one of the following lines to change the color configuration.
        // LLConfig.shared().colorStyle = .system
        // LLConfig.shared().configBackgroundColor(.orange, textColor: .white, statusBarStyle: .default)
        
        //####################### User Identity #######################//
        // Use this line to tag user. More config please see "LLConfig.h".
        LLConfig.shared().userIdentity = "Miss L";
        
        //####################### Window Style #######################//
        // Uncomment one of the following lines to change the window style.
        // LLConfig.shared().windowStyle = .netBar
        
        //####################### Features #######################//
        // Uncomment this line to change the available features.
        // LLConfig.shared().availables = .noneAppInfo
        
        // ####################### Start LLDebugTool #######################//
        // Use this line to start working.
        LLDebugTool.shared().startWorking()
        
        return true
    }

日志

打印和保存一個(gè)日志。 更多的log宏信息查看LLLogHelper.h。

  • 保存日志

In Objective-C

#import "LLDebug.h"

- (void)testNormalLog {
    // Insert an LLog where you want to print.
    LLog(@"Message you want to save or print.");
}

In Swift

import LLDebugToolSwift

    func testNormalLog() {
        // Insert an LLog where you want to print.
        LLog.log(message: "Message you want to save or print.")
    }

  • Save Log with event and level

In Objective-C

#import "LLDebug.h"

- (void)testEventErrorLog {
    // Insert an LLog_Error_Event where you want to print an event and level log.
    LLog_Error_Event(@"The event that you want to mark. such as bugA, taskB or processC.",@"Message you want to save or print.");
}

In Swift

import LLDebugToolSwift

    func testEventErrorLog() {
        // Insert an LLog_Error_Event where you want to print an event and level log.
        LLog.errorLog(message: "Message you want to save or print.", event: "The event that you want to mark. such as bugA, taskB or processC.")
    }

網(wǎng)絡(luò)請求

你不需要做任何操作,只需要調(diào)用了"startWorking"就可以監(jiān)控大部分的網(wǎng)絡(luò)請求,包括使用NSURLSession,NSURLConnection和AFNetworking。如果你發(fā)現(xiàn)某些情況下無法監(jiān)控網(wǎng)絡(luò)請求,請打開一個(gè)issue來告訴我。

崩潰

你不需要做任何操作,只需要調(diào)用"startWorking"就可以截獲崩潰,保存崩潰信息、原因和堆棧信息,并且也會同時(shí)保存當(dāng)次網(wǎng)絡(luò)請求和日志信息。

App信息

LLDebugTool會監(jiān)控app的CPU,內(nèi)存和FPS。你可以更便捷的查看app的各種信息。

沙盒

LLDebugTool提供了一個(gè)快捷的方式來查看和操作沙盒文件,你可以更輕松的刪除沙盒中的文件/文件夾,或者通過airdrop來分享文件/文件夾。只要是apple支持的文件格式,你可以直接通過LLDebugTool來預(yù)覽。

更多使用

  • 你可以通過查看Wiki,獲得更多幫助。
  • 你可以下載并運(yùn)行LLDebugToolDemoLLDebugToolSwiftDemo來發(fā)現(xiàn)LLDebugTool的更多使用方式。Demo是在XCode9.3,ios 11.3,cocoapods 1.5.0下運(yùn)行的,如果有任何版本兼容問題,請告訴我。

要求

LLDebugTool在支持ios8+,并且需要使用ARC模式。使用到的框架已經(jīng)包含在大多數(shù)Xcode模板中:

  • UIKit

  • Foundation

  • SystemConfiguration

  • Photos

  • malloc

  • mach-o

  • mach

  • QuickLook

  • objc

  • sys

結(jié)構(gòu)

  • LLDebug.h 公用頭文件.

  • LLConfig 配置文件。

    用于自定義顏色、大小、標(biāo)識和其他信息。如果您想要配置任何東西,您需要關(guān)注這個(gè)文件。

  • LLDebugTool 工具文件。

    用于啟動(dòng)和停止LLDebugTool,你需要看一下"LLDebugTool.h"這個(gè)文件。

  • Helper 輔助文件。

    如果你對功能的實(shí)現(xiàn)原理不感興趣,那么可以忽略這個(gè)文件夾。

    • LLAppHelper 用于監(jiān)視應(yīng)用程序的各種屬性。
    • LLCrashHelper 用于當(dāng)App發(fā)生崩潰時(shí),收集崩潰信息。
    • LLLogHelper 快速打印和保存日志。
    • LLNetworkHelper 用于監(jiān)視網(wǎng)絡(luò)請求。
    • LLSandboxHelper Sandbox Helper。用于查看和操作沙盒文件。
    • LLStorageManager Storage Helper。用于數(shù)據(jù)存儲和讀取。
  • UserInterface UI文件。

    如果你想要修改、查看或者學(xué)習(xí)UI方面的東西,你可以查看一下這個(gè)文件夾。

    • Base 父類文件
    • Categories 類擴(kuò)展
    • Others 不通用的控件
    • Resources 圖片資源
    • Sections 視圖控制器
    • Tool 工具

聯(lián)系

  • 如果你需要幫助,打開一個(gè)issue。
  • 如果你想問一個(gè)普遍的問題,打開一個(gè)issue。
  • 如果你發(fā)現(xiàn)了一個(gè)bug,并能提供可靠的復(fù)制步驟,打開一個(gè)issue。
  • 如果你有一個(gè)功能請求,打開一個(gè)issue。
  • 如果你發(fā)現(xiàn)有什么不對或不喜歡的地方,就打開一個(gè)issue。
  • 如果你有一些好主意或者一些需求,請發(fā)郵件(llworkinggroup@qq.com)給我。
  • 如果你想貢獻(xiàn),提交一個(gè)pull request。

聯(lián)系

更新日志

可以在 CHANGELOG 中找到每個(gè)LLDebugTool版本的簡要總結(jié)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,639評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 生活需要激情,猶如偶爾小露的童趣,勾搭激情的時(shí)候童趣顯的幼稚,但是唯有一點(diǎn)激情才能懂得生活的快樂無比! 色彩斑斕的...
    顧純熙閱讀 271評論 2 1
  • --不需要看到你的眼神,我都可以想象你小小身體里那大自然一般的靜逸、一不小心就可以觸發(fā)的好奇、和影帝都無法去演繹的...
    齋言言閱讀 248評論 0 3
  • 頭銜不僅僅是一個(gè)稱號,更是一份責(zé)任。官銜越大責(zé)任越大,要求的能力也越大。能否帶領(lǐng)團(tuán)隊(duì)越做越好,是一種自我能力的考驗(yàn)。
    王榕榕閱讀 141評論 0 0