我想我的應用程序重置爲標準設置,如果它在啓動過程中崩潰。如果它最後一次運行,它最好也崩潰。檢測應用程序在加載/上次運行時崩潰了嗎?
編輯:Crittercism有一個crittercismDidCrashOnLastLoad方法,但它只處理加載期間崩潰的情況。它在我使用的庫的版本中沒有正常工作,但是此後已被修復。
建議?
我想我的應用程序重置爲標準設置,如果它在啓動過程中崩潰。如果它最後一次運行,它最好也崩潰。檢測應用程序在加載/上次運行時崩潰了嗎?
編輯:Crittercism有一個crittercismDidCrashOnLastLoad方法,但它只處理加載期間崩潰的情況。它在我使用的庫的版本中沒有正常工作,但是此後已被修復。
建議?
製作2功能在您AppDelegate.m
文件:
void HandleException(NSException *exception) {
NSLog(@"App crashing with exception: %@", exception);
//Save somewhere that your app has crashed.
}
void HandleSignal(int signal) {
NSLog(@"We received a signal: %d", signal);
//Save somewhere that your app has crashed.
}
然後在你的-(BOOL)application:didFinishLaunchingWithOptions
之前什麼都放:
NSSetUncaughtExceptionHandler(&HandleException);
struct sigaction signalAction;
memset(&signalAction, 0, sizeof(signalAction));
signalAction.sa_handler = &HandleSignal;
sigaction(SIGABRT, &signalAction, NULL);
sigaction(SIGILL, &signalAction, NULL);
sigaction(SIGBUS, &signalAction, NULL);
使用Crashlytics你那麼可以設置CrashlyticsDelegate來檢測斯威夫特或ObjC崩潰碼。
import Fabric
import Crashlytics
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
Crashlytics.sharedInstance().delegate = self
Fabric.with([Crashlytics.self])
return true
}
//MARK: - CrashlyticsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void)
{
completionHandler(true)
}
從Crashlytics文檔
你的委託必須調用completionHandler,但並不需要 做到同步,甚至在主線程。用NO調用 completionHandler將導致檢測到的報告被刪除 而未提交給Crashlytics。這對於執行 許可提示或其他更復雜的邏輯提供崩潰提供 是很有用的。
確保在啓動Crashlytics 之前使用startWithAPIKey:...或通過[Fabric with:...]設置代理。如果不成功, 會導致在啓動過程中丟失同步發生的任何代理回調 。
嗯,看起來很有用。它會與Crittercism嚴重相互作用嗎? –
好的,我測試過了,它實際上會禁用Crittercism。我想我會試着說服他們在他們的產品中添加這個功能。感謝您的建議,這是最有幫助的。 –
很高興知道,我沒有使用'Crittercism',但可能他們用類似的方式處理它,這也是'TestFlight'處理錯誤記錄的方式。你實際上可以問他們如何使用未捕獲的異常處理程序和你的一起... – graver