iConsole是一个简单、可插入的类,用于为您的iPhone应用提供更有用的应用程序内日志记录。它使您能够在无需连接到Xcode调试器的情况下,在已构建的应用程序中检查错误和崩溃日志。它还允许非技术测试员轻松提交日志信息。
iConsole还提供了一个额外的用途:使用它提供的命令接口,提供了一个简单的方式来添加调试命令,并允许您在运行时打开和关闭应用程序功能,这可以在最终版本的APP中轻松禁用,而无需构建额外的丢弃用户界面组件。
注意:"支持"意味着已经对这个版本进行了测试。 "兼容"意味着库应该在这个操作系统版本上工作(即它不依赖任何不可用的SDK功能),但不再进行兼容性测试,并且可能需要调整或修复错误才可正确运行。
从版本1.5开始,iConsole需要ARC。如果要在非ARC项目中使用iConsole,请将-fobjc-arc编译器标志添加到iConsole.m类文件中。要完成此操作,请转到目标设置的构建阶段选项卡,在编译源项中双击iConsole.m,然后在弹出窗口中输入-fobjc-arc。
如果要将整个项目转换为ARC,请在iConsole.m中注释掉#error行,然后在Xcode中运行"编辑>重构>转换为Objective-C ARC..."工具,并确保所有要使用ARC的文件都已勾选(包括iConsole.m)。
将iConsole安装到您的应用程序中,将iConsole和(可选)GTM文件夹拖放到您的项目中。iConsole没有其他依赖项。如果您需要更新GTM类,请使用以下命令检查最新版本
svn checkout http://google-toolbox-for-mac.googlecode.com/svn/trunk/ google-toolbox-for-mac-read-only
要在您的应用程序中启用iConsole,请将主窗口替换为iConsoleWindow的一个实例。如果您使用的是标准项目模板,最简单的方法是通过MainWindow.xib文件更改窗口的类,或者如果您的窗口是通过编程方式创建的,则更改为AppDelegate.m。如果您已经使用了自定义的窗口子类,请将基类更改为iConsoleWindow。
要从您的应用程序内部记录到控制台,请将iConsole.h头文件包含到您的类中(或在您的.pch文件中,以便在整个项目中可用),然后添加以下形式的日志代码
[iConsole log:@"some message"];
消息可以包含格式参数,并且遵循与NSLog()命令相同的语法,并将同时记录到应用程序和控制台。iConsole日志命令也是线程安全的,因此可以在任何地方代替NSLog()。
除了日志:方法外,还有以下附加日志函数,可以与LOG_LEVEL常量一起使用,以轻松控制给定应用程序构建中的日志记录数量
[iConsole info:...]; // use for informational logs (e.g. object count)
[iConsole warn:...]; // use for warnings (e.g. low memory)
[iConsole error:...]; // use for errors (e.g. unexpected value)
[iConsole crash:...]; // use for logging conditions that lead to a crash
默认情况下,通过屏幕滑动显示/隐藏控制台,但如果这不适合您的应用程序,您可以使用以下代码通过编程方式显示和隐藏它
[iConsole show];
[iConsole hide];
控制台有一个清除日志的按钮,但如果有必要在编程中清除它,可以使用以下命令
[iConsole clear];
除了显示日志外,控制台还可以允许用户输入命令。默认情况下是禁用的。要启用它,您需要创建一个命令代理,操作方法如下
1) 在您的某个类上实现iConsoleDelegate协议。这不重要,但应该是一个持久存在的类,在应用程序整个生命周期中存在,例如您的应用程序代理或主视图控制器。
2) 在您的代理类中添加handleConsoleCommand:方法。此方法接收一个表示用户输入的命令的字符串。iConsole并不限制命令语法或在此时刻提供任何用于处理命令的帮助方法。
3) 使用以下代码将您的类设置为iConsole的代理。注意,此代码必须在控制台首次显示之前调用,否则输入字段将不会出现
[iConsole sharedConsole].delegate = myDelegate;
有关如何实现此内容的示例,请参阅HelloWorld应用程序。
默认情况下,iConsole拦截未处理的异常(崩溃)并使用GTM库解密堆栈跟踪。如果您您的应用程序已经实现了崩溃处理程序,或者您不想将GTM作为依赖项,则可能希望禁用此功能。为此,将以下宏之一或两个设置为0
ICONSOLE_ADD_EXCEPTION_HANDLER
ICONSOLE_USE_GOOGLE_STACK_TRACE
GTM跟踪功能提供了比默认iPhone SDK提供的更有用的堆栈跟踪。如果使用了ICONSOLE_ADD_EXCEPTION_HANDLER选项,建议启用此功能。如果ICONSOLE_USE_GOOGLE_STACK_TRACE选项被禁用,可以安全地将GTM源文件从项目中移除。
注意:如果ICONSOLE_ADD_EXCEPTION_HANDLER选项被禁用,您应该在您自己的崩溃处理程序中调用[[NSUserDefaults standardDefaults] synchronize],以确保在崩溃事件中保留日志。
要配置iConsole,有许多iConsole类的属性可以改变iConsole的行为和外观。这些大多数应该不言自明,但以下是它们的文档
@property (nonatomic, assign) BOOL enabled;
设置为0以禁用控制台。使用项目目标设置中的编译器宏设置此值是一个好主意,这样您可以在发布构建中关闭它。
@property (nonatomic, assign) iConsoleLogLevel logLevel;
根据您在项目中使用日志记录的方式,日志可能会很快填满。可以使用日志级别根据严重性选择性地禁用日志。您可以使用 iConsoleLogLevel
常量来实现这一点。iConsoleLogLevelNone
将禁用所有日志记录。 iConsoleLogLevelInfo
将启用所有日志级别。
@property (nonatomic, assign) BOOL saveLogToDisk;
如果禁用此选项,日志将不会在会话之间保存。请注意,如果未启用此选项,则 ICONSOLE_ADD_EXCEPTION_HANDLER
功能将毫无用处。
@property (nonatomic, assign) NSUInteger maxLogItems;
将额外的行追加到日志中会有轻微的性能成本。日志越大,性能影响越大。因此,日志的最大行数限制为1000行。您可以通过设置此属性来增加或减少此限制。
@property (nonatomic, weak) id<iConsoleDelegate> delegate;
此属性用于设置用于实现控制台命令接口的委托。
@property (nonatomic, assign) NSUInteger simulatorTouchesToShow;
@property (nonatomic, assign) NSUInteger deviceTouchesToShow;
控制台激活所需的手指数。除非您的手指非常小,否则在iPhone上使用超过三指是非常有挑战性的。在模拟器中,超过两指是无法执行的。如果您的应用使用两指或三指滑动进行其他交互,您可能希望增加此值。如果您不希望允许滑动激活控制台,请将触摸计数设置为0或某个不切实际的大数字。默认情况下,模拟器为2指,设备为3指。
@property (nonatomic, assign) BOOL simulatorShakeToShow;
@property (nonatomic, assign) BOOL deviceShakeToShow;
如果滑动不是您应用中合适的激活方法,您可以选择启用摇一摇显示。这在模拟器中绝对是一个不那么麻烦的选项,但可能已经被您的应用用于其他目的。默认情况下,此功能在模拟器中启用,在设备中禁用。
@property (nonatomic, copy) NSString *infoString;
出现在控制台顶部的文本。默认情况下,此内容包含Charcoal Design版权,但您可以删除iConsole名称并修改以反映您自己的公司品牌,只要您不添加自己的版权声明,或暗示iConsole是您自己的作品。
@property (nonatomic, copy) NSString *inputPlaceholderString;
在控制台输入字段中出现的辅助文本。
@property (nonatomic, copy) NSString *logSubmissionEmail;
当在应用内通过电子邮件发送控制台日志时的默认 "收件人" 地址(默认为空白)。
@property (nonatomic, strong) UIColor *backgroundColor;
控制台的背景颜色(默认为黑色)。
@property (nonatomic, strong) UIColor *textColor;
控制台文本和操作按钮图标的颜色(默认为白色)。
版本 1.5.3
版本 1.5.2
版本 1.5.1
版本 1.5
版本 1.4.1
版本 1.4
版本 1.3
版本 1.2
版本 1.1
版本 1.0