【Objective-C】iOSアプリのエラーによるクラッシュを検知する方法

タイトル通り、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 アプリがクラッシュしたことを検知する方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG