2011-12-13 33 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開發時,符號變得可用,所以它在那裏已經有一段時間了。它不能很好地工作,行號和文件信息丟失。我最近發現,即使有一些「剝離」選項,一些構建也具有象徵意義,我試圖找出爲什麼這是... –