web-dev-qa-db-ja.com

アプリをクラッシュさせずにCrashlyticsにログを送信します

アプリをクラッシュさせずにCrashlyticsでログを受信するにはどうすればよいですか?私は次のコードを持っています:

if(!context.managedObjectContext save:&error) {
    CLS_LOG(@"%@",error.description)
}

エラーが発生した場合、Crashlyticsサーバーでエラーを受信する必要がありますが、アプリは引き続き実行する必要があります。

私はすぐにログを必要としません。次回の再起動時にログを取得できれば幸いです。ログを受信するためにアプリでクラッシュをトリガーする必要はありません。

これは可能ですか?

46
jack

Crashlyticsからの新しい更新では、次を使用できます。

[[Crashlytics sharedInstance] recordError:error];

そして、Swiftでは:

Crashlytics.sharedInstance().recordError(error)

ドキュメントを確認できます here

49
Tiago Almeida

ちょっと古い質問ですが、今ではAnswersスーツの一部であるFabricを使用できます(CrashlyticsFabricの一部です):

enter image description here

ファブリック はここにあります。さらに詳細なドキュメント こちら

13
Rui Peres

私は以下の行を試してみましたが、それは魅力のように機能します。 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 で説明されているように

7
Aanabidden

私にとっては、メソッド.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)
}
2
Nik Kov