当我做网络的发展,我使用一个定制的记录器,抓住致命的错误的和追加的跟踪文件,并显示信息的用户。我可以偶尔看看如果该文件的改变,这意味着,一些用户遇到了一个错误,我可以挖看看他们遇到的。

我想类似的东西在iphone上,一些注意事项:

  • 虽然发展中,应当平凡的重置列表中的错误或关闭的通知。
  • 发展的同时,错误信息,还应出现在一些明显的地方,就像上屏幕上在控制台
  • 一旦部署,错误应该礼貌地被送到母舰进行分析(一修正在下一次更新)
  • 把追踪/信息登录在试图追踪一个问题期间的发展
  • 关闭控制台记录为"释放",以加速东西的用户
  • 应该清理之后,本身以成为一个好公民在手机上

一些相关链接

它看起来像会有一个共同的工具包做到这一点-你怎么处理呢?

[更新月2011] 已经有一些事态发展,不同的成熟...

  • PLCrashReporter.
  • 昆西 坐在上面的PLC。
  • Bugsense 商业崩溃的记者。
  • Crittercism 崩溃和报告错误(有些免费的软件包,有些支付).
  • 测试飞行 现在有一个SDK映入崩溃(但尚未应用程序的储存应用程序,只需开发的应用程序).
  • 就像测试飞行, 曲棍球 旨在结合临时分发与崩溃报告。
有帮助吗?

解决方案

这就是我们要做的:

  • 让的iPhone处理其自身的崩溃甩过 现有程序的储存机制,. 更新:有找到iTunes连接不可靠,在提供崩溃报告,我建议使用 布/Crashlytics, 或者一个竞争对手喜欢 Crittercism翻车保护杆.
  • 我们的释放产品没有跟踪在,这似乎是一致的,与大多数其他的iPhone应用程序做的。
  • 如果一个错误报道,然后我们再使用追溯到建立。

更多的细节:

  • 我们定义的宏只跟踪在许多不同级别的粒度。
  • 使用模式构建设,以改变的微量水平,控制多少追踪得到编制成的产品,例如有释放和调试建立的配置。
  • 如果没有微量的水平定义,然后我们展示了充分跟踪在模拟器,以及没有跟踪当运行于一个真正的设备。

我已经包括例如以下代码表示我们是如何写入这一点,以及什么样的产出。

我们定义的多个不同的微量水平,使开发者可以确定哪些行的追踪是重要的,并且可以筛选出的较低级别的详细信息,如果他们想要的。

例编码:

- (void)myMethod:(NSObject *)xiObj
{
  TRC_ENTRY;
  TRC_DBG(@"Boring low level stuff");
  TRC_NRM(@"Higher level trace for more important info");
  TRC_ALT(@"Really important trace, something bad is happening");
  TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
  TRC_EXIT;
}

例跟踪产出:

2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]

我们追踪的定义:

#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif

/*****************************************************************************/
/* Entry/exit trace macros                                                   */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY    NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT     NSLog(@"EXIT:  %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif

/*****************************************************************************/
/* Debug trace macros                                                        */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif

#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif

#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif

#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif

模式设置:

在模式建立的设置,选择"增加用户定义的设定"(通过点击小cog在左下方的建立的配置屏幕),然后确定一个新的设置称为 GCC_PREPROCESSOR_DEFINITIONS 并且给它的价值 TRC_LEVEL=0.

唯一的细微之处是这一模式并不知道要做一个干净的建立,如果你改变这种设置,所以记住要做手工干净的如果你改变它。

其他提示

苹果会自动收集崩溃日志用户对于你,你可以从iTunes下载它们连接。

如果这还不够你,我不知道的一个工具包,但我不想卷上的东西我自己的个人。这似乎是太多努力来开发什么坚固,可能会引起隐私问题,并在结束时,有100 000名K应用程序的应用程序的储存,如何多用户使用应用程序后再次发现这是越野车?

你知道, CrashReporter iPhone 存在?

还有一个 在审查其演示的代码。

它有一些很酷的功能,像马平堆栈跟踪你的代码和管理的一些git具体的东西喜欢版本哈希。

我强烈建议罗比*汉森的CocoaLumberJack: https://github.com/robbiehanson/CocoaLumberjack

这是非常灵活的和强大甚至可能有点过度的,如果滥用。支持不同级别的记录。记录到的文件可以打开与一对夫妇的代码行,甚至可以通过网络发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top