Вы можете установить обработчики для условий, которые приводят к прекращению работы вашей программы (неперехваченные исключения и сигналы), и установить флаг, который вы проверяете при запуске. Подробную информацию о том, как ловить исключения и сигналы, можно найти в этом посте Какао с любовью .
Этот код установит обработчики для необработанных исключений и сигналов, которые приводят к завершению работы вашей программы.
void InstallUncaughtExceptionHandler() {
NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
}
Функции SignalHandler
и HandleException
должны:
- Установите флаг, используя
NSUserDefaults
, чтобы указать на сбой, и сохраните любую другую информацию, которая может быть полезна (например, время, чтобы вы могли определить, какие данные идут с каким сбоем).
- Удалите обработчик сигнала или исключения, чтобы шаг 3 вызвал сбой.
- Переслать сигнал или исключение. Это приведет к фактическому сбою, создав журнал сбоев.
В вашем методе didFinishLunchingWithOptions:
вы должны проверить этот флаг. Если вы найдете его, вы откроете окно для сбора информации от пользователя и отправки ее себе. Затем уберите флаг.