Crashlytics iOS - исключение журнала
Я нашел способ зарегистрировать пользовательские пойманные исключения в SDK Crashlytics Android, но я не могу найти ничего подобного для SDK iOS. Есть ли способ зарегистрировать пойманное исключение с Crashlytics на iOS?
См. объяснение Android: http://support.crashlytics.com/knowledgebase/articles/202805-logging-caught-exceptions
Ответы
Ответ 1
Майк из Crashlytics и Fabric здесь.
Теперь вы можете записывать зарегистрированные NSErrors в приложениях iOS, tvOS или OS X. Вы хотите использовать:
[CrashlyticsKit recordError:error];
или
Crashlytics.sharedInstance().recordError(error)
Это позволит вам фиксировать количество зарегистрированных ошибок NSErrors для каждого сеанса пользователя. Они отправляются только при перезагрузке приложения. Ошибки зарегистрированных ошибок сгруппированы по домену ошибок и коду. Это означает, что проблемы с ошибками могут охватывать многие разные сайты вызовов.
См. Документация
Ответ 2
Это функция, которую я тоже жду, и лично попросил у них (я уверен, что у других тоже есть). Они сказали, что работают над этим/рассматривают его, но пока ничего.
изменить
Эта функция теперь находится в Crashlytics! Вы можете зарегистрировать NSErrors:)
Ответ 3
Невозможно зарегистрировать пойманное исключение в iOS, используя Crashlytics SDK. CLS_LOG может использоваться для регистрации пользовательских сообщений, но эти сообщения журнала отправляются в Crashlytics только со следующими данными об аварии. Если нет сбоя, эти сообщения журнала никогда не приземлятся на панели мониторинга Crashlytics. Я получил официальное подтверждение от команды поддержки Crashlytics относительно того же. Регистрация журналов исключений в iOS есть в их дорожной карте.
Ответ 4
Наконец, Crashlytics добавила желаемую функцию 3.5.0!
[CrashlyticsKit recordError:error];
или
Crashlytics.sharedInstance().recordError(error)
Ссылка
/**
*
* This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and
* displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of
* NSErrors that can be recorded during your app life-cycle is limited by a fixed-size circular buffer. If the
* buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch
* of your application.
*
* You can also use the -recordError:withAdditionalUserInfo: to include additional context not represented
* by the NSError instance itself.
*
**/
- (void)recordError:(NSError *)error;
- (void)recordError:(NSError *)error withAdditionalUserInfo:(nullable CLS_GENERIC_NSDICTIONARY(NSString *, id) *)userInfo;
https://docs.fabric.io/ios/changelog.html#january-7-2016
История
На самом деле это не работает, как я и ожидал: сообщение сохраняется в Crashlytics, но только после перезапуска приложения, и оно будет сохранять только последнее сообщение.
Пока не упоминаются упомянутые здесь решения. Невозможно отслеживать обработанные исключения в iOS, используя Crashlytics.
Вы можете использовать это, чтобы регистрировать любое исключение
[[Crashlytics sharedInstance] recordCustomExceptionName:@"HandledException" reason:@"Some reason" frameArray:@[]];
В Crashlytics вы увидите его в отчете о сбое, но с типом NON-FATALS
.
Событие, если оно не предназначено для использования исключений, регистрируется таким же образом, как и обработанные обработкой исключения.
Это доступно в версии 3.0.7.
recordCustomExceptionName: Причина: frameArray:
Этот метод может использоваться для записи единой структуры исключения в отчете. Это особенно полезно, когда ваш код взаимодействует с неродными языками, такими как Lua, С# или Javascript. Этот вызов может быть дорогостоящим и должен использоваться только незадолго до завершения процесса. Этот API не предназначен для использования для регистрации объектов NSException. Все безопасные отчеты NSExceptions автоматически захватываются Crashlytics.
https://docs.fabric.io/appledocs/Crashlytics/Classes/Crashlytics.html#//api/name/recordCustomExceptionName:reason:frameArray:
Ответ 5
Я прошел через разные сайты, чтобы эта функциональность поддерживалась для IOS, чередующейся с Crashlytics.
Я обнаружил, что криттеризм является лучшим до сих пор. @Дима. Я думаю, что это альтернатива Crashlytics. Попробуйте это.
Вот некоторые ссылки, которые полезны для интеграции криттеризма в ваш проект...!
http://docs.crittercism.com/ios/ios.html#logging-handled-exceptions
http://www.raywenderlich.com/34050/overview-of-ios-crash-reporting-tools-part-2
@try {
}
@catch (NSException *exc)
{
[Crittercism logHandledException:exc]
}
Обратитесь к этим ссылкам и убедитесь, что они вам полезны или нет...!
Ответ 6
Используйте нижние строки в блоке catch для обработки исключений, созданных пользователем.
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);
как описано для iOS http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler
Ответ 7
Это сэкономит ваше время
Crashlytics.sharedInstance(). recordError (ошибка как NSError, withAdditionalUserInfo: [ "User_Id": 0, "User_Name": "ABC", "User_Email": "[email protected]", "User_Contact": "789797" ])