最佳做法的错误记录和/或报告的iPhone
-
13-09-2019 - |
题
当我做网络的发展,我使用一个定制的记录器,抓住致命的错误的和追加的跟踪文件,并显示信息的用户。我可以偶尔看看如果该文件的改变,这意味着,一些用户遇到了一个错误,我可以挖看看他们遇到的。
我想类似的东西在iphone上,一些注意事项:
- 虽然发展中,应当平凡的重置列表中的错误或关闭的通知。
- 发展的同时,错误信息,还应出现在一些明显的地方,就像上屏幕上在控制台
- 一旦部署,错误应该礼貌地被送到母舰进行分析(一修正在下一次更新)
- 把追踪/信息登录在试图追踪一个问题期间的发展
- 关闭控制台记录为"释放",以加速东西的用户
- 应该清理之后,本身以成为一个好公民在手机上
一些相关链接
- 使用GSLog为,而不是只
- 记录到一个文件在iphone
- Mac上,有人说苹果记录仪系统和GTM记录的路要走 目标-c记录最佳做法
- 杰夫的博客记录
它看起来像会有一个共同的工具包做到这一点-你怎么处理呢?
[更新月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应用程序的应用程序的储存,如何多用户使用应用程序后再次发现这是越野车?
我强烈建议罗比*汉森的CocoaLumberJack: https://github.com/robbiehanson/CocoaLumberjack
这是非常灵活的和强大甚至可能有点过度的,如果滥用。支持不同级别的记录。记录到的文件可以打开与一对夫妇的代码行,甚至可以通过网络发送。