2011-12-13 66 views
15

Hello Stack Overflow!将自定义数据包含到iOS崩溃转储中

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

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

有谁知道一种方法,把东西放到崩溃转储报告?或者您是否有其他推荐的方式向开发者报告生产崩溃?

谢谢!

回答

29

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

所以我的建议如下:

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

    因此其相当不可能追上安全精确的SQL语句。但是,崩溃报告应该为您提供足够的信息来了解正在发生的事情,并补充您之前完成的记录。例如。您可以在执行SQL之前记录SQL方式中使用的搜索字符串。

    一般尽量不要记录太多。

  2. 为了捕捉崩溃报告,你应该不外乎基于开源框架PLCrashReporter的解决方案一样,它可以safely抓崩溃,还当你的应用程序是已经在App Store!不推荐使用异常捕获,请查看this article以查看原因!

    iTunes Connect中为您提供了查看一些崩溃报告过,但它占用了2个星期看到一些,但远远不是全部作为例如由Camera+ developers指出。所以你最好使用你自己的解决方案。

    PLCrashReporter会寄给你标准格式苹果崩溃报告,准备symbolication,让您知道崩溃发生在你的代码,包括行号。

    基于PLCrashReporter一些解决方案是:

    • QuincyKit:开源客户端+ PHP服务器,基本崩溃分组,symbolication可以从您的Mac自动化(我的这个开发者)
    • HockeyApp:付费服务,使用QuincyKit客户端,先进的崩溃分组,符号化完全在服务器上完成(我对此的开发者)
    • Bugsense:免费服务,象征性宣布为高级功能
    • AppBlade:有偿服务,symbolication未知
    • Crashlytics:内测版,未知的特点,他们的解决方案似乎是基于PLCrashReporter
  3. 所提出的解决方案,要么允许在下次启动时或通过询问自动发送数据用户如果他/她同意发送。

+0

微调:BugSense当前在设备上提供符号。 –

+1

谢谢尼克。这是从今天开始的新的我猜:)这意味着没有行号,你需要在应用程序二进制文件中的符号? – Kerni

+0

完全正确:)当我在BugSense接管iOS开发时,符号变得可用,所以它在那里已经有一段时间了。它不能很好地工作,行号和文件信息丢失。我最近发现,即使有一些“剥离”选项,一些构建也具有象征意义,我试图找出为什么这是... –