gpt4 book ai didi

iphone - iPhone 错误记录和/或报告的最佳实践

转载 作者:行者123 更新时间:2023-12-03 18:15:33 29 4
gpt4 key购买 nike

当我进行 Web 开发时,我使用定制的记录器来捕获 fatal error 并将跟踪附加到文件并向用户显示消息。我偶尔可以浏览一下文件是否发生了变化,这意味着某些用户遇到了错误,我可以深入了解他们遇到了什么。

我希望在 iPhone 上有类似的功能,但有一些注意事项:

  • 在开发过程中,重置错误列表或关闭通知应该很简单。
  • 在开发过程中,错误消息也应该显示在一些明显的地方,例如控制台的屏幕上
  • 部署后,应礼貌地将错误发送到母舰进行分析(以便在下次更新中修复错误)
  • 在开发过程中尝试追踪问题时打开跟踪/信息日志记录
  • 关闭“发布”的控制台日志记录以加快用户的操作速度
  • 应该自行清理,以便成为手机上的好公民

一些相关链接

似乎有一个通用的工具包可以做到这一点 - 你如何处理这个?

[2011 年 10 月更新]已经有了一些进展,但成熟度各不相同......

  • PLCrashReporter .
  • Quincy位于 PLC 之上。
  • Bugsense商业崩溃记者。
  • Crittercism崩溃和错误报告(一些免费包,一些付费包)。
  • Test flight现在有一个可以捕获崩溃的 SDK(但还不适用于应用商店应用,仅适用于开发应用)。
  • 喜欢试飞,Hockey旨在将临时分发与崩溃报告结合起来。

最佳答案

这就是我们所做的:

  • 让 iPhone 通过 existing App Store mechanisms 处理自己的故障转储。 更新:发现 iTunes Connect 在提供崩溃报告方面不可靠,我建议使用 Fabric/Crashlytics ,或类似 Crittercism 的竞争对手或Rollbar
  • 我们发布的产品没有任何痕迹,这似乎与大多数其他 iPhone 应用程序的做法一致。
  • 如果报告错误,我们会使用跟踪构建来重现该错误。

更详细:

  • 我们以多种不同的粒度级别定义了 NSLog 跟踪的宏。
  • 使用 Xcode build设置来更改跟踪级别,该级别控制将多少跟踪编译到产品中,例如有发布和调试构建配置。
  • 如果未定义跟踪级别,则我们在模拟器中显示完整跟踪,而在真实设备上运行时则不显示跟踪。

我在下面提供了示例代码,展示了我们如何编写此代码以及输出的样子。

我们定义了多个不同的跟踪级别,以便开发人员可以识别哪些跟踪行很重要,并且可以根据需要过滤掉较低级别的详细信息。

示例代码:

- (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

Xcode 设置:

在 Xcode build设置中,选择“添加用户定义的设置”(通过单击构建配置屏幕左下角的小齿轮),然后定义一个名为 GCC_PREPROCESSOR_DEFINITIONS 的新设置并给出它的值是 TRC_LEVEL=0

唯一的微妙之处是,如果您更改此设置,Xcode 不知道执行干净构建,因此请记住,如果您更改它,请手动执行干净。

关于iphone - iPhone 错误记录和/或报告的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1667994/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com