Рекомендации по регистрации ошибок и/или созданию отчетов для iPhone

StackOverflow https://stackoverflow.com/questions/1667994

Вопрос

Когда я занимаюсь веб-разработкой, я использую специальный регистратор, который выявляет фатальные ошибки, добавляет трассировку в файл и отображает сообщение пользователю.Иногда я могу взглянуть, не изменился ли файл, а это означает, что какой-то пользователь столкнулся с ошибкой, и я могу покопаться, чтобы увидеть, с чем он столкнулся.

Хотелось бы что-то подобное на iphone, но с некоторыми оговорками:

  • При разработке должно быть просто сбросить список ошибок или отключить уведомления.
  • Во время разработки сообщения об ошибках также должны появляться в каком-то очевидном месте, например, на экране в консоли.
  • После развертывания ошибки следует вежливо отправлять на материнский корабль для анализа (для исправления ошибок в следующем обновлении).
  • Включите ведение журнала трассировки/информации при попытке отследить проблему во время разработки.
  • Отключите ведение журнала консоли для «Выпуска», чтобы ускорить работу пользователя.
  • Следует убирать за собой, чтобы вести себя добропорядочным гражданином по телефону

Некоторые ссылки по теме

Кажется, что для этого существует общий набор инструментов — как вы с этим справляетесь?

Обновление октября 2011] Были некоторые события, различной зрелости ...

  • PLCrashReporter.
  • Куинси находится поверх ПЛК.
  • Багсенс репортер коммерческих аварий.
  • Криттерцизм отчеты о сбоях и ошибках (некоторые бесплатные пакеты, некоторые платные).
  • Тестовый полет теперь есть SDK, который ловит сбои (но пока не для приложений из магазина приложений, а только для приложений для разработчиков).
  • Как испытательный полет, Хоккей направлен на объединение специального распространения с отчетами о сбоях.
Это было полезно?

Решение

Вот что мы делаем:

  • Позвольте iPhone самостоятельно создавать аварийные дампы через существующие механизмы App Store. Обновлять:обнаружив, что iTunes Connect ненадежен при предоставлении отчетов о сбоях, я рекомендую использовать Ткань/Crashlytics, или конкурент типа Криттерцизм или Штанга.
  • В нашем выпущенном продукте нет никаких следов, похоже, это соответствует тому, что делает большинство других приложений для iPhone.
  • Если сообщается об ошибке, мы воспроизводим ее, используя отслеживаемую сборку.

Более детально:

  • Мы определяем макросы для трассировки NSLog на различных уровнях детализации.
  • Используйте настройки сборки Xcode, чтобы изменить уровень трассировки, который контролирует, сколько трассировки компилируется в продукт, например.существуют конфигурации сборки Release и Debug.
  • Если уровень трассировки не определен, мы показываем полную трассировку в симуляторе и отсутствие трассировки при работе на реальном устройстве.

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

Мы определяем несколько различных уровней трассировки, чтобы разработчики могли определить, какие строки трассировки важны, и при желании отфильтровать детали более низкого уровня.

Пример кода:

- (void)myMethod:(NSObject *)xiObj
{
  TRC_ENTRY;
  TRC_DBG(@"Boring low level stuff");
  TRC_NRM(@"Higher level trace for more important info");
  TRC_ALT(@"Really important trace, something bad is happening");
  TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
  TRC_EXIT;
}

Пример вывода трассировки:

2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]

Наши определения трассировки:

#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif

/*****************************************************************************/
/* Entry/exit trace macros                                                   */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY    NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT     NSLog(@"EXIT:  %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif

/*****************************************************************************/
/* Debug trace macros                                                        */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif

#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif

#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif

#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif

Настройки Xcode:

В настройках сборки Xcode выберите «Добавить пользовательскую настройку» (щелкнув маленькую шестеренку в левом нижнем углу экрана конфигурации сборки), затем определите новую настройку под названием GCC_PREPROCESSOR_DEFINITIONS и присвойте ему значение TRC_LEVEL=0.

Единственная тонкость заключается в том, что Xcode не умеет выполнять чистую сборку, если вы меняете этот параметр, поэтому не забудьте вручную выполнить очистку, если вы его измените.

Другие советы

Apple автоматически собирает для вас журналы сбоев от пользователей, и вы можете загрузить их из iTunes Connect.

Если вам этого недостаточно, я не знаю никакого инструментария, но лично я бы не хотел что-то создавать самостоятельно.Кажется, что разработка чего-то надежного требует слишком больших усилий, может вызвать проблемы с конфиденциальностью, и, в конце концов, учитывая 100 000 тысяч приложений в магазине приложений, сколько пользователей снова воспользуются вашим приложением, обнаружив, что в нем есть ошибки?

Вы это знаете КрашРепортер для iPhone существует?

Eсть репозиторий на github, где демонстрируется этот код.

Он имеет несколько интересных функций, таких как сопоставление трассировки стека с вашим кодом и управление некоторыми специфичными для git вещами, такими как хеши версий.

Я очень рекомендую CocoaLumberJack Робби Хэнсона: https://github.com/robbiehanson/CocoaLumberjack

Он очень гибкий и мощный, возможно, даже немного чрезмерный, если им злоупотреблять.Поддерживает различные уровни журналирования.Запись в файлы можно включить парой строк кода и даже отправить по сети.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top