TestFlight SDK とか、クラッシュイベントを受け取って Stack Trace をレポートしてくれたりしますが、どうやるんだろう?と思い調べてみました。
クラッシュイベントを受け取って何かしたい場合は、 NSSetUncaughtExceptionHandler() にハンドラ関数のポインタを渡すだけ。
NSSetUncaughtExceptionHandler(&exceptionHandler);
例外発生時に実行するハンドラ関数は、こんな感じで実装します。
(下記サンプルでは、スタックトレース結果をログ出力しています)
void exceptionHandler(NSException *exception) { NSString *trace = [[exception callStackReturnAddresses] componentsJoinedByString:@"\n"]; NSLog(@"Stack: (\n%@\n)", trace); }
TestFlight が実際にこういう実装になっているかは、定かではありません。