引言:
官方的简介加少许语义上的修改:
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里面添加如下代码:
//启动iConsonle self.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. 建议阅读本文所有的开发者都是用.