アプリをクラッシュさせずにCrashlyticsでログを受信するにはどうすればよいですか?私は次のコードを持っています:
if(!context.managedObjectContext save:&error) {
CLS_LOG(@"%@",error.description)
}
エラーが発生した場合、Crashlyticsサーバーでエラーを受信する必要がありますが、アプリは引き続き実行する必要があります。
私はすぐにログを必要としません。次回の再起動時にログを取得できれば幸いです。ログを受信するためにアプリでクラッシュをトリガーする必要はありません。
これは可能ですか?
Crashlyticsからの新しい更新では、次を使用できます。
[[Crashlytics sharedInstance] recordError:error];
そして、Swiftでは:
Crashlytics.sharedInstance().recordError(error)
ドキュメントを確認できます here 。
私は以下の行を試してみましたが、それは魅力のように機能します。 try-catchブロックでは、catchブロックで次の行を使用します
@try {
// line of code here
}
@catch (NSException *exception) {
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);
}
http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler で説明されているように
[更新]
ファブリックのcrashlyticsでは、単純な関数[Crashlytics recordCustomExceptionName:reason:frameArray:]
処理された例外を送信するため
@try {
// line of code here
}
@catch (NSException *exception) {
NSArray *stack = [exception callStackReturnAddresses];
[[Crashlytics sharedInstance] recordCustomExceptionName: exception.name
reason: exception.reason
frameArray: stack];
}
https://twittercommunity.com/t/crashlytics-ios-how-to-send-non-fatal-exceptions-without-app-crash/34592/32 で説明されているように
私にとっては、メソッド.recordError()
はユーザー情報を記録しないため、助けにはなりませんでした。または、私はそれをどこで見るか見つけられませんでした。 recordCustomExceptionName
を使用して私に適合します。両方の方法の実装例があります。
func logMessage(_ message: String) {
let userInfo = ["message" : message]
let error = NSError(domain: "AppErrorDomain", code: 1, userInfo: userInfo)
Crashlytics.sharedInstance().recordCustomExceptionName("API Error", reason: message, frameArray: [])
Crashlytics.sharedInstance().recordError(error, withAdditionalUserInfo: userInfo)
}