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

Sht*_*ong 16 error-handling crash-dumps ios

Hello Stack Overflow!

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

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

有没有人知道将事情放入崩溃转储报告的方法?或者您是否有任何其他建议的方式向开发人员报告生产崩溃?

谢谢 !

Ker*_*rni 30

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

所以我的建议如下:

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

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

    一般来说,尽量不要记录太多.

  2. 对于捕获崩溃报告,除了基于开源框架PLCrashReporter的解决方案之外别无其他,它可以安全地捕获崩溃,当您的应用程序已经在应用程序商店中时!不推荐异常捕获,请查看此文章以了解原因!

    iTunes Connect也可以让你查看一些崩溃报告,但是看一些崩溃报告需要2周时间,但到目前为止并不是全部,例如Camera +开发人员所指出的.所以你最好使用自己的解决方案.

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

    一些基于PLCrashReporter的解决方案是:

    • QuincyKit:开源客户端+ php服务器,基本崩溃分组,符号化可以从你的mac自动化(我是这个的开发者)
    • HockeyApp:付费服务,使用QuincyKit客户端,高级崩溃分组,完全在服务器上完成符号(我是开发人员)
    • Bugsense:免费服务,符号宣布为高级功能
    • AppBlade:付费服务,符号未知
    • Crashlytics:私人测试版,未知功能,他们的解决方案似乎基于PLCrashReporter
  3. 建议的解决方案允许在下次启动时自动发送数据,或者询问用户是否同意发送.