Подтвердить что ты не робот

Crashlytics не показывает сбоев

Я только что установил Crashlitycs, используя эту официальную инструкцию.

Я установил Debug Information Format "DWARF с файлом dSYM" для отладки и выпуска и отключенного битового кода (некоторые люди писали, что это может помочь):

введите описание изображения здесь

AppDelegate:

Fabric.sharedSDK().debug = true
Fabric.with([Crashlytics.self])

Для имитации сбоя я использую

Crashlytics.sharedInstance().crash()

и

var ggg: Int!
print(ggg)

Crashlitics собирает некоторую информацию о сеансах. Например, он обновляет информацию о пакетах:

введите описание изображения здесь

Так работает связь с Crashlitics. Однако информация о сбоях пуста:

введите описание изображения здесь

Я использую XCode 8 и iOS 9/10. Что я делаю неправильно?

EDIT:

Я тестировал его на симуляторе и устройстве без подключения к отладчику XCode (т.е. запуска из экрана с использованием эмулятора/устройства)

Наконец, я получил несколько отчетов Crashlytics через 7-8 часов после сбоев. Я ожидал их раньше, потому что согласно документации:

В течение нескольких минут вы увидите, что авария появилась на вашей ткани Приборная панель.

Однако я не получил всех сбоев, которых я ждал. Во время моих экспериментов я пробовал разные способы инициализации Crashlytics:

Fabric.with([Crashlytics.self])
and
Fabric.with([Crashlytics.self()])

Это может быть причина? Я также нашел аналогичную без ответа question.

4b9b3361

Ответ 1

Проверьте следующие термины,

  • Убедитесь, что строка SDK Crashlytics - это все остальные сторонние SDK-линии. (он должен быть последним, вызванным в вашем методе appDidFinishLaunching.)

  • Принудительный сбой, а затем перезапустите приложение. Xcode необходимо отключить, чтобы он не перехватил отчет о сбое. Чтобы отключить Xcode, следуйте инструкциям здесь.

  • Если вы используете [Crashlytics sharedInstance] crash]; для проверки сбоев, убедитесь, что это не в методе appDidFinishLaunching.

Это уже упоминалось в разделе поддержки. Вот дополнительные -

  • Проверьте организацию → Ваше приложение → Отсутствует dSYM, отображается ли отсутствующий файл dSYM

введите описание изображения здесь

Если да, то выполните следующий шаг

  • Щелкните правой кнопкой мыши на вашем архиве → Показать в Finder → Щелкните правой кнопкой мыши по файлу и нажмите "Показать содержимое пакета"
  • Щелкните правой кнопкой мыши файл dSYM → Показать содержимое пакета → Содержание → Ресурсы → DWARF (Открыть в терминале)
  • Запустить команду dwarfdump --uuid "имя файла, которое вы видели там в карликовой папке"

введите описание изображения здесь

Это отобразит все связанные UUID, и если какой-либо указанный UUID совпадает с указанным в отсутствующем id dSYM, просто сжимайте папку dSYM и загружайте ее в crashlytics. Отсутствует сегмент dSYM.

Этот шаг является важной причиной, иногда файл dSYM, который мы извлекаем из организатора, не содержит правильного UUID. И после загрузки неправильного мы ждем его обновлений. Поэтому лучше убедиться, что вы загружаете правый файл dSYM.

Помимо вышеупомянутых вещей, свойство биткода и формат отладки в настройках сборки также влияют на отчеты о сбоях.

Ответ 2

Вам нужно запустить приложение, но не из Xcode.

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

Затем перейдите к buttonPress или function, который будет вызывать Crashlytics.sharedInstance().crash().

Затем снова откройте приложение после сбоя. (Это может быть связано с консолью, если хотите). Этот шаг важен, потому что crashlytics сохраняет отчет о сбое непосредственно перед завершением работы приложения. В следующий раз, когда вы откроете приложение, оно отправит отчет до сбоев.

Документы здесь также объясняют проблему устранения неполадок.

Ответ 3

Дважды проверьте в настройках сборки, что формат отладочной информации "DWARF с файлом dSYM" для отладки и выпуска

Ответ 4

Другой потенциальной причиной сбоев, не загружаемых, является реализация делегата Crashlytics без вызова обработчика завершения:

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
    }
}

Вместо этого это должно выглядеть так:

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
         completionHandler(true)
    }
}

Ответ 5

Сохраняет актуальность в 2019 году.

Как сказал Зак Кван, вы должны делать это без привязки экземпляра приложения к Xcode.

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

Сделайте следующее:

  1. Добавьте необходимую информацию о Crashlytics в ваш проект. Запустите его в Xcode один раз. Затем идите вперед и вручную перейдите к своему симулятору, откройте приложение и принудительно завершите сбои.
  2. Вы должны получить электронное письмо о "фатальной ошибке".
  3. Примерно через 5-10 минут он появится в вашей консоли Firebase.