iOS クラッシュ レポーター ツールを作成しようとしています。アプリケーションが終了した後にクラッシュ情報を送信できるかどうか疑問に思います。
私の質問は次のとおりです。 - 終了後の iOS アプリケーションのライフサイクルとは何ですか? - 終了時に iOS がアプリケーションに対して行うことについて、どこで詳しく読むことができますか?
iOS クラッシュ レポーター ツールを作成しようとしています。アプリケーションが終了した後にクラッシュ情報を送信できるかどうか疑問に思います。
私の質問は次のとおりです。 - 終了後の iOS アプリケーションのライフサイクルとは何ですか? - 終了時に iOS がアプリケーションに対して行うことについて、どこで詳しく読むことができますか?
アプリがクラッシュしたときに非同期セーフでないタスクを実行することは、強くお勧めできません!
PLCrashReporter の作成者である Landon Fuller による次のブログ投稿を参照してください。
あなたは問題を解決しようとしていますが、それは現実世界の問題ではありません。人々はアプリを再起動し、クラッシュ レポートを送信します。
はい、一種の... iOSがクラッシュしているアプリを強制終了する前に例外を処理できますが、非同期操作を実行することはできません(おそらく、有効期限ハンドラーまたはiOS7 NSURLSessionでバックグラウンド操作を使用できるとは限りません)。ファイルをサーバーに送信するのと同じですが、次の再起動時に行うことができます。
その背後にあるアイデアは、 -applicationDidFinishLaunching で例外ハンドラーを設定することです。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&myExcHandler);
/* your code*/
}
NSException
myExcHandler は、例外が発生したときに呼び出されるパラメータとしてを受け入れる C コールバックです。
void myExcHandler(NSException *exception)
{
//set something on NSUserDefault to check at next start
}
利用可能なクラッシュレポートライブラリがたくさんあると言わなければなりません。車輪を再発明しないでください;-)
アプリケーション終了のために取得した最後のイベントは、applicationWillTerminate
メソッドにあります。アプリケーションが中断されている場合、このメソッドは呼び出されません。ここで終了後にアプリケーションがクラッシュした場合は、アプリケーションのマシンでクラッシュ ログを監視できます。
~/Library/Logs/CrashReporter/MobileDevice/<your iPhone’s name>/