你好堆栈溢出!

给您一个简单的问题:是否可以将自定义错误数据嵌入到我的用户在设备崩溃时从用户那里获得的自动生成的iOS故障转储中?

例如:我的SQlite数据库由于某种原因无法运行(例如,数据库文件已损坏)。我无法从此错误中恢复,因此抛出异常,并将详细的sqlite错误消息嵌入异常中。问题是,应用程序的崩溃转储将不包含异常消息,因此不容易知道应用程序在何种情况下崩溃。

有谁知道将事件放入故障转储报告的方法?还是您有其他建议的方式将生产崩溃报告给开发人员?

谢谢 !

最佳答案

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

所以我的建议如下:

  • 要记录自己的数据,请使用Cocoalumberjack。它比那里的NSLog或其他日志记录框架快得多,并且可以选择将消息记录到文件中。现在,当发生异常时,或者您希望在其他任何时候,将其记录到文件中。但是,如果您的应用程序在将某些内容添加到日志文件中时立即崩溃,则很可能会丢失该应用程序,因为该应用程序在同一时刻崩溃了。

    因此,安全地捕获确切的SQL语句几乎是不可能的。但是崩溃报告应该为您提供足够的信息,以了解正在发生的事情,此外,您还可以记录之前所做的事情。例如。您可以在执行SQL之前记录以SQL方式使用的搜索字符串。

    通常,尽量不要记录太多。
  • 要捕获崩溃报告,除了基于开源框架PLCrashReporter的解决方案外,您什么都没有,它可以safely捕获崩溃,即使您的应用程序已经在应用商店中了!不建议捕获异常,请检查this article以了解原因!

    iTunes Connect还为您提供了一些崩溃报告,但是最多可能需要2周才能看到一些崩溃报告,但到目前为止还不是全部。 Camera+ developers指出。因此,您最好使用自己的解决方案。

    PLCrashReporter将向您发送标准的Apple格式的崩溃报告,准备进行符号化,因此您知道崩溃在代码中发生的位置,包括行号。

    基于PLCrashReporter的一些解决方案是:
  • QuincyKit:开源客户端+ php服务器,基本的崩溃分组,符号可以从您的mac上自动执行(我是这个的开发者)
  • HockeyApp:付费服务,使用QuincyKit客户端,高级崩溃分组,在服务器上完全完成符号化(我是该开发人员的工作人员)
  • Bugsense:免费服务,象征性宣布为高级功能
  • AppBlade:付费服务,符号未知
  • Crashlytics:私有(private)beta,未知功能,其解决方案似乎基于PLCrashReporter
  • 提出的解决方案允许在下次启动时自动发送数据,或者询问用户是否同意发送数据。
  • 07-24 13:07
    查看更多