2015-11-21 42 views
1

我看到一些應用程序檢測應用程序是否最後一次崩潰,以鼓勵用戶報告該錯誤。啓動時檢測應用程序崩潰

我該怎麼做?我試過this solution,但沒有得到它在我的迅速項目中工作...
我想到的一種方法是保存一些東西,每次應用程序即將被關閉,然後在啓動應用程序時讀取值,我猜測應用何時崩潰,那麼它將無法保存任何東西,對吧?
但是,這不是很優雅。有沒有更好的方法來檢測崩潰?

在此先感謝:)

+0

我建議使用崩潰報告就像布&... 它非常易於使用,並幫助你找到你的問題很容易 – Mohamad

+0

來自鏈接的解決方案可以滿足您的所有需求。如果應用程序崩潰,則保存信息。當運行應用程序時,檢查保存的信息並清除保存的上下文。爲什麼它不適用於你的應用程序? – user3441734

+0

我想我可以翻譯它,但它抱怨'&' – LinusGeffarth

回答

0

您可以通過twitter使用crashlytics。

  1. 下載面料Mac應用
  2. 打開它&註冊一個新帳號
  3. 添加您的Xcode項目到您的項目列表中布
  4. 選擇到crashlytics框架添加到您的應用程序
  5. 構建應用程序
  6. 見定的代碼片段開始與crashlytics
  7. 訪問Fabric documentation獲取更多信息
+0

Fabric如何實現崩潰報告? – kelin

1

您可以使用內聯閉包來執行崩潰期間的日誌記錄。

NSSetUncaughtExceptionHandler { exception in 
    // Do necessary logging work here 
} 

SO thread可能是幫助你..

+0

這隻適用於UncaughtException,如果你訪問unwrapped nil,處理程序不會執行任何操作...... – user3441734

+0

我同意,但是Swift在編譯時通過消除不安全的代碼來設計安全。通過語言提供的各種機制(如可選綁定),可選項應該始終得到安全管理。恕我直言,應該避免強制解包/隱式解包。 –

+1

在純SWIFT代碼中應該沒有任何未捕獲的異常......實際上,該應用程序可以非常容易地與未捕獲異常一起崩潰。 OP想知道應用程序是否崩潰。可能不是很優雅,但他的方法似乎是唯一可用的方法。 – user3441734

0
import XCPlayground 
import Foundation 


let fm = NSFileManager() 
if fm.fileExistsAtPath("terminated") { 
    try! fm.removeItemAtPath("terminated") 
} else { 
    print("an app crashed last time") 
} 
// set i to nil to force the app to crash 
// than set it to 0 and execute it again 
let i: Int! = 0 
let j: Int = i 

fm.createFileAtPath("terminated", contents: nil, attributes: nil) 
print("terminated")