iConsoleSearch 1.0.99

iConsoleSearch 1.0.99

测试已测试
Lang语言 Obj-CObjective C
许可证 zlib
发布最新发布2014年12月

vienta 维护。



  • 作者:
  • Nick Lockwood

用途

iConsole 是一个简单的、可插入的类,使您的 iPhone 应用程序能够进行更多有用的日志记录。它允许您在没有连接到 Xcode 调试器的情况下,检查应用程序内的错误和崩溃日志。它还允许您的非技术性测试人员轻松地提交日志信息给您。

iConsole 还具有另一个用途:使用它提供的命令界面,可以轻松添加调试命令,并在运行时切换应用程序功能的开/关,这样在最终版本的发布中可以轻松禁用,而不需要您构建额外的用户界面组件。

支持的操作系统及 SDK 版本

  • 支持的构建目标 - iOS 6.0(Xcode 4.6,Apple LLVM 编译器 4.2)
  • 最早的兼容部署目标 - iOS 4.3
  • 最早的兼容部署目标 - iOS 4.3

注意:“支持的”表示库已测试与此版本兼容。“兼容的”表示库应在此操作系统版本上工作(即它不依赖于 unavailable SDK 功能),但不再针对兼容性进行测试,可能需要调整或错误修复才能正常运行。

ARC 兼容性

从版本 1.5 开始,iConsole 需要 ARC。如果您希望在非 ARC 项目中使用 iConsole,只需将 -fobjc-arc 编译器标志添加到 iConsole.m 类文件中。要这样做,请转到目标设置中的构建阶段选项卡,打开编译源代码组,在列表中双击 iConsole.m,然后输入 -fobjc-arc。

如果您要将整个项目转换为 ARC,则在 iConsole.m 中注释掉 #error 行,然后运行 Xcode 中的 Edit > Refactor > Convert to 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。

日志记录

要将在您的应用内输出到控制台,请在您的类(或.pch文件以在整个项目中可用)中包含iConsole.h头文件,然后添加以下形式的日志代码

[iConsole log:@"some message"];

信息可以包含格式参数,并且遵循与NSLog()命令相同的语法,将同时记录到应用和Xcode控制台。iConsole日志命令还线程安全,因此可以用在NSLog()的位置。

除了log:方法之外,还有一些额外的日志函数可以与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];

控制台有一个清除日志的按钮,但如果您需要以编程方式清除日志,可以使用clear命令

[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

与默认的iPhone SDK相比,GTM跟踪函数提供的堆栈跟踪要更有用。如果您正在使用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;

在应用程序内通过电子邮件发送控制台日志时的默认 "to" 地址(默认为空白)。

@property (nonatomic, strong) UIColor *backgroundColor;

控制台的背景颜色(默认为黑色)。

@property (nonatomic, strong) UIColor *textColor;

控制台文本和操作按钮图标的颜色(默认为白色)。