タイトル通り、iOS アプリのクラッシュを検知する方法についてです。
こちらを実装すると、予期せぬエラーでアプリが強制終了した際のログを取得することができます。
ちなみに、使用言語は Objective-C
です。
実装にあたり、参考にさせていただいた記事はこちらから。
[XCODE] iPhoneアプリが予期せぬエラーで異常終了する際に、そのログを取得しておく方法
– YoheiM .NET
https://www.yoheim.net/blog.php?q=20130113
コードを実装するファイルは AppDelegate.m
です。
まず、didFinishLaunchingWithOptions
内に、下記のコードを実装します。
// エラー追跡用の機能を追加する。 NSSetUncaughtExceptionHandler(&exceptionHandler);
これだけだとエラーになるので、次に下記の関数を追加します。
// 異常終了を検知した場合に呼び出されるメソッド void exceptionHandler(NSException *exception) { // エラーログを出力 NSLog(@"%@", exception.name); NSLog(@"%@", exception.reason); NSLog(@"%@", exception.callStackSymbols); }
追加するコードは以上です。
あとは、任意の場所で下記のようにわざとエラーが発生するような記述を追加すれば、exceptionHandler
関数が呼び出され、詳細なエラー内容を取得することができます。
// エラーが発生するコード NSArray *array = [NSArray array]; [array objectAtIndex:0];
ですが、他の記事で見つけた下記のコードでは、exceptionHandler
が呼び出されませんでした。
assert([@"a" isEqualToString:@"b"]);
使用する強制クラッシュの方法によっては、正しく動かない場合もあるようですので、ご注意ください。
以上、Objective-C で、iOS アプリがクラッシュしたことを検知する方法についてでした。
ご参考になれば幸いです。