引言:
官方的簡介加少許語義上的修改:
iConsole是一個簡單的,無依賴的控制台管理類,讓iPhone在運行App時記錄更多使用者使用時的記錄. 它可以準確的定位程式所遇到的錯誤,內建在應用中,而無需串連到XCode調試器即可查詢崩潰日誌並儲存起來. 所以,普通使用者可以主動提交在使用時遇到的錯誤記錄檔.
如何開始使用?
開源項目:猛擊此處
下載以後翻開項目的原始碼找到如下兩個檔案夾,分別是:
將這兩個檔案夾拖動要使用的工程中,此時無需任何其他依賴項的設定.
如何編寫代碼?
在使用其功能之前有一點要注意,需要將AppDelegate裡初始的UIWindow需要以iConsoleWindow來初始化.
如果項目中沒有使用StoryBoard來初始化工程,則進行如下修改即可:
- (void)applicationDidFinishLaunching:(UIApplication *)application{ _window = [[iConsoleWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];_window.rootViewController = [[HelloWorldViewController alloc] init]; [_window makeKeyAndVisible];}
如果是通過StoryBoard來初始化工程的話需要進入如下修改:
1:第一步將工程設定裡的Main StoryBoard清空
2:applicationDidFinishLaunching裡面添加如下代碼:
//啟動iConsonleself.window = [[iConsoleWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];self.window.rootViewController = [[UIStoryboard storyboardWithName:MainStoryBoardName bundle:nil] instantiateInitialViewController];//other load code[self.window makeKeyAndVisible];
至於其它代碼請寫在other load code的位置, 不然會Crash.原理是UIWindow.
到此,iConsole的部署及初始化工作已經完成,iConsole會默默的記錄App產品的Crash資訊. 接下來介紹其強大的功能及細節.
iConsole提供了4種記錄議程的方式,分別是:
1:資訊
2:警告
3:錯誤
4:崩潰
通過以上4種記錄的層級由開發人員自行管理其分類,以備App脫離XCode調試器時,輔助開發人員通過日誌理解錯誤的具體位置.
代碼如下:
[iConsole info:@"記錄一條普通級"];[iConsole warn:@"記錄一條警告級"];[iConsole error:@"記錄一條錯誤級"];[iConsole crash:@"記錄一條崩潰級"];
iConsole 預設記錄的日誌條數是1000條. 如果日誌記錄到上限時,會刪除最早的一條,如此迴圈,可通過如下屬性設定上下限:
[[iConsole sharedConsole] setMaxLogItems:2000];
當我們需要查看iConsole的控制台時,可以通過三種方式來啟動控制台:
1:主動調用
[iConsole show];
2:三跟手指由下往上滑動. 模擬器兩根手指, 預設啟動
[iConsole sharedConsole].simulatorTouchesToShow = YES;[iConsole sharedConsole].deviceTouchesToShow = YES;
3:搖動手機啟動 預設禁用
[iConsole sharedConsole].deviceShakeToShow = YES;
成功進入控制台以後,可以看到有一個輸入地區,等待使用者輸入命令,如所示:
此時需要實現iConsole唯一的一個代理,用來捕捉命令列的值:
1:代理賦值
[iConsole sharedConsole].delegate = self;
2:實現介面方法
- (void)handleConsoleCommand:(NSString *)command{if ([command isEqualToString:@"version"]){[iConsole info:@"%@ version %@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"], [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]];}else {[iConsole error:@"unrecognised command, try 'version' instead"];}}
這個代理到底有什麼用?
這裡的權利完全交給了開發人員,通過自訂一些命令來輸出一些有利於調試的日誌資訊.
比如version命令,一旦成功進入代理以後,將會自動列印當前App的程式版本
更改的輔助命令由開發人員根據個人化需求自由定製
另外iConsole的控制台也可以進行少許的樣式修改:
//branding and feedback@property (nonatomic, copy) NSString *infoString;//控制台簡短介紹@property (nonatomic, copy) NSString *inputPlaceholderString;//命令列空值提示@property (nonatomic, copy) NSString *logSubmissionEmail;//日誌所發送的郵件地址//styling@property (nonatomic, strong) UIColor *backgroundColor;//背景顏色@property (nonatomic, strong) UIColor *textColor;//文字顏色@property (nonatomic, assign) UIScrollViewIndicatorStyle indicatorStyle;//這個呢?
額外的說明:
類比一個Crash 用於嘗試使用iConsole 的功能,代碼如下:
[[NSException exceptionWithName:@"什麼類型的崩潰異常?" reason:@"對崩潰進行些說明?" userInfo:nil] raise];
總結:
iConsole在於對XCode控制台脫離時依舊能保持調試的能力,方面輔助開發人員捕捉致命的BUG. 建議閱讀本文所有的開發人員都是用.