将自定义数据包含到iOS崩溃转储中

你好堆栈溢出!

一个简单的问题是:是否可以将自定义错误数据embedded到自动生成的iOS崩溃转储中,当我的应用程序在设备上崩溃时从我的用户获得?

例如:我的SQlite数据库将不会因为某种原因(例如,数据库文件已损坏)操作..我无法从此错误恢复,所以我抛出一个exception,并embedded在例外详细的SQLite错误消息。 问题是,应用程序的崩溃转储将不包含exception消息,因此知道应用程序崩溃的条件并不容易。

有没有人知道一种方法把东西放入崩溃转储报告? 或者你有任何其他推荐的方式向开发者报告生产崩溃?

谢谢 !

不,您不能将自己的数据添加到崩溃报告中。 由于沙盒的原因,也无法自动访问iOS生成的崩溃报告。

所以我的build议如下:

  1. 为了logging你自己的数据,使用Cocoalumberjack 。 它比NSLog或其他日志框架要快得多,并且可以select将消息logging到文件中。 现在,当发生exception或者其他任何你想要的时候,把它logging到一个文件中。 但是,如果您的应用程序在您将某些内容添加到日志文件时崩溃了,那么很可能会丢失该应用程序,因为该应用程序在同一时间崩溃。

    所以它不可能安全地捕捉到确切的SQL语句。 但是,崩溃报告应该给你足够的信息,以了解发生了什么,除了之前做的logging之外。 例如,您可以在执行SQL之前loggingSQL方式中使用的searchstring。

    一般来说,尽量不要logging太多。

  2. 为了捕获崩溃报告,除了基于开源框架PLCrashReporter的解决scheme之外,您应该可以安全地捕获崩溃,当您的应用程序已经在应用程序商店时也是如此。 不推荐使用exception捕获,请查看这篇文章 ,看看为什么!

    iTunes Connect也提供了查看一些崩溃报告的function,但最多需要2周的时间才能看到一些崩溃报告,但目前为止还没有像Camera +开发者指出的那样。 所以你最好使用你自己的解决scheme。

    PLCrashReporter将向您发送标准的苹果格式的崩溃报告,准备好符号化,以便您知道代码中发生崩溃的位置,包括行号。

    一些基于PLCrashReporter的解决scheme是:

    • QuincyKit :开源客户端+ php服务器,基本的崩溃分组,符号化可以从你的mac自动化(我是这个开发者)
    • HockeyApp :付费服务,使用QuincyKit客户端,先进的崩溃分组,在服务器上完全符号化(我是这个开发者的)
    • Bugsense :免费服务, 标志性宣布为高级function
    • AppBlade :付费服务,象征性未知
    • Crashlytics :私人testing版,未知function,他们的解决scheme似乎基于PLCrashReporter
  3. 所提出的解决scheme要么允许在下次启动时自动发送数据,要么通过询问用户是否同意发送。

免责声明:我是AppBlade的开发者。

AppBlade允许您发送自定义参数以及截至2012年12月的符号化崩溃报告。

一探究竟! http://blog.appblade.com/news/2012/12/appblade-sdk-update-sessions-and-queues/