2015-05-01 4 views
0
  1. Есть ли какой-нибудь пример кода для использования PLCrashReporter в приложении Mac?
  2. Работает ли PLCrashReporter в командной строке Objective-C?
  3. Поддерживает ли PLCrashReporter все сигналы, такие как SIGTERM?

Существует достаточно образцов для iOS, но не для Mac.Использование PLCrashReporter на Mac OS

ответ

1

Я никогда не использовал PLCrashReporter, но несколько секунд, изучая PLCrashReporter web site, появился a thread in which someone received a reply from an author about a problem using it with a Mac. Хотя кажется, что он был разработан с учетом iOS, «официальное» мнение, похоже, указывает, что оно не относится к iOS и должно отлично работать в Mac OS.

В любом случае, я думаю, вам удастся присоединиться к this thread, который был запущен чуть более недели назад со времени этого сообщения. Возможно, если вы добавите свой собственный голос, автор (ы) предоставит конкретный пример.

По всей видимости, the example provided by their documentation должен работать практически точно так же с аналогом Mac UIApplication, NSApplication, с небольшой адаптацией. Я исхожу из этого предположения, потому что автор, похоже, считает, что он будет отлично работать на Mac, и очевидно, как заставить его работать. Я бы сделал это предположение, если бы я искал PLCrashReporter для собственного использования, поэтому я делал то, что всегда делал в этой ситуации. Я посмотрел документацию и немного на код. Быстрый взгляд убедил меня в том, что просто заменить метод UIApplicationDelegate протокола -applicationDidFinishLaunching:(UIApplication *)application на эквивалент Mac должен заставить его работать в приложении Mac.

Метод -applicationDidFinishLaunching:, вероятно, уже вычеркнут в классе делегирования приложения по умолчанию, который Xcode предоставляет Mac для каждого нового проекта. Просто скопируйте и вставьте тело метода примера в заглушку, если он уже существует. Удостоверьтесь, что вы следуете советам автора по фазе сборки в первом потоке, поэтому соответствующие библиотеки и ресурсы идут вперед, когда вы создаете свое приложение.

Я не пробовал, но если сделал, я бы скопировать метод -handleCrashReport дословно в мое приложение делегата, и скопировать тело из ...DidFinishLaunching: крючка в тело шаблона (вы, возможно, уже есть некоторый код там , удалите его до или после вашего, в зависимости от того, что имеет смысл, если оно вообще имеет значение). Я бы импортировал необходимые заголовки в делегат приложения, так как он, вероятно, не найдет PLCrashReporter или любые другие связанные с ним символы. Я также должен убедиться, что Framework/library/resources правильно привязан и что он скопирован в пакет приложений, а затем я нажал Run и посмотрю, что происходит, решая проблемы, когда я иду.

Попробуйте. Дайте нам знать, как это происходит.

+0

привет, Спасибо за ваш ответ. Я пробовал использовать код iOS на MAC, но безуспешно. Похоже, что поведение MAC ведет себя по-другому, поскольку когда я эмулирую сбой с использованием NSAssert или получая доступ к массиву с неопределенным индексом, трассировка исключений регистрируется на консоль, как и другие журналы, и приложение даже не сбой и, следовательно, завершение работы. Если я отправлю SIGTERM и перезапустит приложение, то репортер приложения не войдет в loadPendingCrashReportDataAndReturnError, который намекает, что он не работает. Какие-либо предложения? – Abhinav

+0

Я думаю, что PLCrashReporter ничего не делает при запуске в отладчике - чтобы позволить вам отлаживать разумно и ловить символические исключения в отладчике. Попробуйте посмотреть, работает ли он в сборках «Release», которые вы запускаете автономно (возможно, даже отладочные сборки, которые вы запускаете непосредственно из Finder/Command-line, а не из отладчика). –

+0

Спасибо @ Joshua за ваши образованные догадки. Кажется разумным.Я нахожусь на краю погружения в себе, но что бы вы предпочли? связь с каркасом Mac или против статической библиотеки PLCrashReporter? –