iConsole 1.5.3

iConsole 1.5.3

测试测试版
语言语言 Obj-CObjective C
许可权 MIT
发布最后发布2014年12月

Nick Lockwood维护。



iConsole 1.5.3

  • Nick Lockwood

目的

iConsole是一个简单、可插入的类,用于为您的iPhone应用提供更有用的应用程序内日志记录。它使您能够在无需连接到Xcode调试器的情况下,在已构建的应用程序中检查错误和崩溃日志。它还允许非技术测试员轻松提交日志信息。

iConsole还提供了一个额外的用途:使用它提供的命令接口,提供了一个简单的方式来添加调试命令,并允许您在运行时打开和关闭应用程序功能,这可以在最终版本的APP中轻松禁用,而无需构建额外的丢弃用户界面组件。

支持的操作系统和SDK版本

  • 支持的生成目标 - iOS 8.0 (Xcode 6.0, Apple LLVM编译器 6.0)
  • 最早支持的部署目标 - iOS 5.0
  • 最早的兼容部署目标 - iOS 4.3

注意:"支持"意味着已经对这个版本进行了测试。 "兼容"意味着库应该在这个操作系统版本上工作(即它不依赖任何不可用的SDK功能),但不再进行兼容性测试,并且可能需要调整或修复错误才可正确运行。

ARC兼容性

从版本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

  • 针对iOS 8的快速修复
  • 添加了针对Swift兼容性的va_list方法版本
  • 添加了Swift示例项目
  • 已知问题:仅在iOS 8上支持纵向模式

版本 1.5.2

  • 修复了显示控制台后的滑动手势问题
  • 添加了指定滚轮颜色的功能

版本 1.5.1

  • 修复了如果应用名称包含空格时通过电子邮件发送日志的问题

版本 1.5

  • 现在需要ARC(详细信息请参阅README)
  • 现在在通过电子邮件发送日志时正确地对日志进行URL编码
  • 修复了旋转问题
  • 添加了podspec文件

版本 1.4.1

  • 修复了插入第一行日志时的崩溃问题

版本 1.4

  • iConsole现在使用属性而不是宏进行配置
  • 更新了GTMlibrary到最新版本,修复了分析器警告
  • 控制台操作按钮现在使用更直观的图标

版本 1.3

  • 更新了项目结构
  • 添加了ARC支持

版本 1.2

  • 修复了设备旋转时的滑动方向问题
  • 添加了HelloWorld屏幕上的说明文本

版本 1.1

  • 添加了摇一摇显示选项
  • 在iPad上进行了完全测试
  • 日志记录现在是线程安全的
  • 修复了键盘打开时按下信息按钮的问题
  • 正确处理了界面旋转
  • 正确处理了来电状态栏
  • 修复了控制台超过最大行数时的错误

版本 1.0

  • 首次发布。