3

Android には、発生したクラッシュを通知するためのかなり信頼できる組み込みシステムがあることを知っています。彼らはすぐに、スタック トレースやその他の情報を Google ドキュメントに書き込みます。それは非常にうまく機能します。

iOS についても同じことを調査し始めましたが、同様に効果的なものは見つかりません。この記事を読みました: Xcode ストーリーボード: iPad ストーリーボードに iPhone サイズのビューが表示されるのはなぜですか?

しかし、これがまだ当てはまるかどうかはわかりません。ユーザーデバイスで発生するクラッシュレポートに何を使用するかを誰かに勧めてもらえますか?

ありがとう!

4

3 に答える 3

3

できることは、キャッチされていない新しい例外ハンドラーを作成し、NSSetUncaughtExceptionHandlerを介して登録することです。そうすれば、各クラッシュはキルの直前に傍受でき、ログに記録したり、どこかに保存してアップロードしたりできます。

(私はこのリンクで説明されている方法を個人的に使用しました: http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html )

于 2012-08-16T15:12:11.007 に答える
3

私はuncaughtExceptionHandler とGTMStackTraceでFlurryを使用しています

例外ハンドラは次のようになります。

void uncaughtExceptionHandler(NSException *exception) 
{
    @try 
    {
        NSString *fullBacktrace = GTMSBStackTraceFromException(exception);
        NSMutableString *backtrace = [NSMutableString stringWithUTF8String:""];
        NSArray *backtraceArray = [fullBacktrace componentsSeparatedByString:@"\n"];
        for (id entry in backtraceArray) 
        {
            NSRange testRange = [entry rangeOfString:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
            if (testRange.length)
            { 
                [backtrace appendString:entry];    
            }
        }

        NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];
        NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];

        NSArray *parts = [backtrace componentsSeparatedByCharactersInSet:whitespaces];
        NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];
        NSString *strippedBacktrace = [filteredArray componentsJoinedByString:@" "];   
        [FlurryAnalytics logError:@"uncaughtExceptionHandler"
                          message:[NSString stringWithFormat:@"%@", strippedBacktrace ? strippedBacktrace : @"no matching backtrace"]
                        exception:exception];
    }
    @catch (NSException *exception) 
    {
        NSLog(@"whoa!  could not handle uncaught exception!");
        [FlurryAnalytics logError:@"uncaughtExceptionHandler"
                          message:@"no matching backtrace"
                        exception:exception];
    }
}

Testflightにも適切なクラッシュ ログがあります。

于 2012-08-16T15:13:42.717 に答える
2

uncaughtexception ハンドラーを設定すると、クラッシュ レポートのサブセットのみが提供され、その方法で得られるレポートの詳細も非常に制限されます。すべてのスレッドのスタック トレースを取得できず、実際にクラッシュが発生した例外のスタック トレースを取得できず、クラッシュが発生したコードの行番号も取得できません。さらに、シグナル ハンドラーが原因で発生したクラッシュ レポートは取得されません。

さらに、非同期セーフではないため、クラッシュが発生したら、目的の C コードを実行しないでください。詳細については、この記事を参照してください:信頼できるクラッシュ レポート

次の質問への回答としてできることの詳細を投稿した場合: iOS のクラッシュ分析とレポートおよびiOS クラッシュ ログ キャッチ、デバッグ情報.. キャッチして開発チームに電子メールで送信

于 2012-08-19T12:09:47.247 に答える