web-dev-qa-db-ja.com

Crashlytics iOS-キャッチされた例外をログに記録

Crashlytics Android SDKでカスタムキャッチ例外を記録する方法を見つけましたが、iOS SDKではそのようなものを見つけることができません。Crashlyticsでキャッチした例外を記録する方法はありますかiOS?

Android説明: http://support.crashlytics.com/knowledgebase/articles/202805-logging-caught-exceptions を参照してください。

46
Magnus

Crashlytics and Fabricのマイクはこちら。

IOS、tvOS、またはOS Xアプリで、記録されたNSErrorをキャプチャできるようになりました。使用したい:

[CrashlyticsKit recordError:error];

または

Crashlytics.sharedInstance().recordError(error)

これにより、ユーザーセッションごとにかなりの数のNSErrorを記録できます。これらはアプリの再起動時にのみ送信されます。ログに記録されたエラーエラーは、エラードメインとコードによってグループ化されます。これは、エラーの問題がさまざまなコールサイトに及ぶ可能性があることを意味します。

ドキュメント を参照してください

43
Mike Bonnell

最後に、Crashlyticsは必要な機能3.5.0を追加しました!!

[CrashlyticsKit recordError:error];

または

Crashlytics.sharedInstance().recordError(error)

参照

/**
 *
 * This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and
 * displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of
 * NSErrors that can be recorded during your app's life-cycle is limited by a fixed-size circular buffer. If the
 * buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch
 * of your application.
 *
 * You can also use the -recordError:withAdditionalUserInfo: to include additional context not represented
 * by the NSError instance itself.
 *
 **/
- (void)recordError:(NSError *)error;
- (void)recordError:(NSError *)error withAdditionalUserInfo:(nullable CLS_GENERIC_NSDICTIONARY(NSString *, id) *)userInfo;

https://docs.fabric.io/ios/changelog.html#january-7-2016


歴史

これは実際には期待通りに機能しません:メッセージはCrashlyticsに保存されますが、アプリを再起動した後のみで、最後のメッセージのみを保存します。

これまでのところ、ここで言及した解決策は機能しません。 Crashlyticsを使用してiOSで処理された例外を追跡する方法はありません。


これを使用して、例外をログに記録できます

[[Crashlytics sharedInstance] recordCustomExceptionName:@"HandledException" reason:@"Some reason" frameArray:@[]];

Crashlyticsでは、クラッシュレポートに表示されますが、NON-FATALSタイプ。

意図されていない場合のイベント例外は、同じ方法で記録されますAndroid処理された例外です。

これはバージョン3.0.7で利用可能です。

recordCustomExceptionName:reason:frameArray:

このメソッドを使用して、単一の例外構造をレポートに記録できます。これは、コードがLua、C#、Javascriptなどの非ネイティブ言語と対話する場合に特に役立ちます。この呼び出しはコストがかかる可能性があるため、プロセスの終了直前にのみ使用してください。このAPIは、NSExceptionオブジェクトをログに記録するためのものではありません。安全に報告可能なすべてのNSExceptionは、Crashlyticsによって自動的にキャプチャされます。

https://docs.fabric.io/appledocs/Crashlytics/Classes/Crashlytics.html#//api/name/recordCustomExceptionName:reason:frameArray

5
7ynk3r

Crashlytics SDKを使用して、キャッチした例外をiOSに記録することはできません。 CLS_LOGを使用してカスタムメッセージを記録できますが、これらのログメッセージは次のクラッシュデータと共にのみCrashlyticsに送信されます。クラッシュがない場合、これらのログメッセージはCrashlyticsダッシュボードに表示されません。同じことに関してCrashlyticsサポートチームから公式の確認を得ました。 iOSでキャッチされた例外のログは、ロードマップにあります。

3
Sinu Varghese

この機能をIOS Crashlyticsの代替としてサポートするために、さまざまなサイトを調べました。

これまでのところ、クリッタリズムが最高だと思いました。@ Dima Crashlyticsの代替品だと思います。試してみてください。

プロジェクトにcrittercismを統合するのに役立つリンクをいくつか紹介します...!

http://docs.crittercism.com/ios/ios.html#logging-handled-exceptions

http://www.raywenderlich.com/34050/overview-of-ios-crash-reporting-tools-part-2

@try {

     } 
@catch (NSException *exc) 
     {
        [Crittercism logHandledException:exc]
    }

それらのリンクを参照して、それがあなたにとって役立つかどうかを確認してください...!

2
Vidhyanand

Catchブロックで以下の行を使用して、キャッチされたカスタム例外を処理します

NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);

iOSの場合 http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler

1
Aanabidden