Crashlytics не отправляет отчет о сбое с iPhone


86

Я установил Crashlytics в своем единственном приложении для iOS и установил его на реальном устройстве. Моя панель мониторинга Crashlytics показывает это, я успешно добавил приложение. Однако он не отправляет отчет о сбое. Моя скорость интернета не очень хорошая. Но я могу проверять электронную почту с этого устройства. Кто-нибудь может догадаться, в чем проблема?


5
У меня такая же проблема со службой Crashlytics. Отчеты о сбоях с устройства никогда не отправляются (по моему опыту) - только из симулятора. В итоге я использовал отчеты о сбоях Crittercism и обработку ошибок.
Sam Spencer

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

Да, я использую свое устройство для разработки. Это создает проблему?
farhad rubel

1
Без полного описания установки или тестового проекта на это невозможно ответить. Вам следует обратиться в службу поддержки Crashlytics. Дикие догадки не помогают.
Kerni

3
Я так удивлен, что кто-то из Crashlytics увидел мой пост на StackOverflow и связался со мной по электронной почте; Он помогает мне решить эту проблему. Давай посмотрим что происходит.
farhad rubel

Ответы:


84

Отладчик Xcode НЕ позволяет Crashlytics обрабатывать отчеты о сбоях. Да, это кажется странным даже мне, когда я впервые читаю, но это факт ( Источник ). Это причина того, что мы никогда не видим отчет о сбоях. Когда:
- запущено приложение в симуляторе
- запущено приложение на iDevice путем прямой сборки и запуска из Xcode с включенным отладчиком.

Чтобы убедиться, что во время тестирования сообщается о сбое ( скопировано с сайта поддержки Crashlytics ):
1. Запустите симулятор
2. Нажмите «Стоп»
3. Запустите приложение и принудительно
завершите работу 4. Перезапустите приложение из симулятора
5. Просмотрите отчет о сбое в веб-панель.

РЕДАКТИРОВАТЬ:

Добавлена ​​ссылка; Crashlytics также предоставляет короткую статью о быстром способе принудительного сбоя .


6
Это мне помогло. Я также обнаружил, что в некоторых случаях. Crashlytics не отправит отчет о сбое, если приложение не будет открыто снова. Повторюсь: у пользователя возникает сбой. Пользователь повторно открывает приложение. Crashlytics отправляет предыдущий отчет о сбоях.
tambykojak

1
@tambykojak, вероятно, это связано с тем, что сбои iOS в большинстве случаев довольно нестабильны, и более безопасный способ - отправить отчет о сбое при следующей загрузке приложения, а не сразу. Многие инструменты отчетов о сбоях используют эту парадигму в iOS и других обработчиках сбоев, не связанных с виртуальными машинами.
pixelknitter

2
Спасибо. Это должно быть отмечено как правильный ответ :)
iMemon

Нужно ли мне в этом случае загружать какие-либо dsyms? Если да, то где я могу их найти?
SoliQuiD

ссылки мертвы.
luky 03

67

Да будет поздно, но работай на 100%

Внесите некоторые изменения в настройки сборки проекта, как на изображении ниже.

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

и следуйте этим инструкциям.


Даже после отключения Bitcode у меня время от времени все еще отсутствовали ошибки dSYMS и 100% времени при отладке с помощью симулятора. Это исправило это. Спасибо.
user3344977

Изменив эту настройку, я смог увидеть сбои в платформе
firebase

21

Основная причина, по которой любой репортер сбоев не будет работать на iOS, связана с вмешательством разных репортеров сбоев. Однако в случае с Crashlytics может быть что-то конкретное, из-за чего отчет о сбое не поступает.

Отладчик Xcode НЕ позволяет Any Crash Reporter обрабатывать отчеты о сбоях. Это потому, что XCode переопределяет любые перехватчики в обратных вызовах обработки сбоев. Это происходит только когда:

  • запущенное приложение в симуляторе (с включенным отладчиком)
  • запуск приложения на iDevice путем прямой сборки и запуска из Xcode с включенным отладчиком.

Чтобы убедиться, что во время тестирования сообщается о сбое ( http://support.crashlytics.com/knowledgebase/articles/92523-why-can-ti-have-xcode-connected- ):

  1. Симулятор запуска
  2. Нажмите стоп
  3. Запустите приложение и вызовите сбой
  4. Перезапустите приложение из симулятора
  5. См. Отчет о сбоях на веб-панели управления.

Хотя супер-старое видео все еще актуально, вот видео с описанными выше шагами (пример из Crittercism): https://www.youtube.com/watch?v=sU6Su3PBFH4


1
Crashlytics отключается при обнаружении подключенного отладчика. Не потому, что это не сработает, а потому, что это помешает отладчику работать правильно. Crashlytics использует те же механизмы, что и сам отладчик, и для SDK было бы очень неприятно испортить нормальный процесс отладки. Для справки, я написал большую часть Crashlytics SDK.
Мэтти

9

Для меня проблема заключалась в том, что устройство было подключено к моему Mac :) Из этого источника :

Кроме того, если ваше устройство подключено к вашему Mac, отладчик XCode также сработает. Так что просто отключите устройство перед тестированием :)


7

Я нашел решение, выполнив следующие шаги:
1. Перейдите в Edit Scheme 2. Run -> Info 3. Измените конфигурацию сборки для выпуска. Теперь запустите приложение. Вы получите почту.


6

Недавно мы столкнулись с этой проблемой, и я обнаружил, что где-то в процессе сборки скрипт был удален. Добавление его обратно со следующим исправлением проблемы для нас:
./Crashlytics.framework/run <your_api_key> <build_secret>

Примечание: при использовании Cocoapods вы захотите, чтобы мы получили следующее вместо приведенного выше ( источник ): ./Pods/CrashlyticsFramework/Crashlytics.framework/run

Добавление скрипта сборки:

  1. Чтобы добавить этап сборки сценария выполнения в Xcode 6, выберите цель приложения в своем проекте, затем выберите «Фазы сборки».
  2. Щелкните маленький значок «плюс» и выберите «New Run Script Build Phase».
  3. Теперь вы должны увидеть раздел «Выполнить сценарий» в середине параметров этапа сборки, как показано выше.
  4. Вставьте скрипт в тело этапа сборки Run Script.

Вышеупомянутая цитата взята из визуального руководства Crashlytics , упомянутого в этом посте .

Примечание. Первоначально я опубликовал этот ответ дословно для кода ошибки Crashlytics: 202 при отправке файлов .


Кажется, это мне помогло.
Крис Принс,

1
Раньше я использовал ткань для интеграции с твиттером, теперь я хочу крашлитик, также я добавил фреймворк и выполнил все инструкции, но я не получал никаких отчетов о сбоях на мою приборную панель, пожалуйста, помогите мне
RameshIos

@iOS_Ramesh Я хотел бы попытаться помочь вам, но, не зная больше, это будет сложно. Для этого вам следует открыть новый вопрос с указанием того, где вы находитесь (шаг, который вы выполнили для интеграции, любые соответствующие фрагменты кода и любые отзывы, которые вы получаете от Crashlytics или консоли).
Джеймс Нельсон

Я уже отправляю новый вопрос ... stackoverflow.com/questions/30215049/…
RameshIos

1
Спасибо за подсказку. У нас была отметка ["Release" = "$ {CONFIGURATION}"] в нашем сценарии выполнения, и мы переименовали конфигурацию выпуска.
Marián Černý

4

С сайта RayWenderlich:

Вы не получите никаких отчетов о сбоях, если Xcode перехватит событие сбоя! Чтобы все приведенные ниже примеры работали, вам нужно создать и запустить приложение, а затем нажать кнопку остановки в Xcode. Таким образом, на устройстве будет установлена ​​последняя версия. Как только это будет сделано, вы можете запустить приложение на самом устройстве, а затем завершить его все, что захотите! Все сбои на вашем устройстве iOS будут обнаружены и отправлены на серверный компонент службы, которую вы интегрировали в приложение. Отчеты о сбоях обычно отправляются на сервер при следующем запуске приложения, поэтому для создания отчета о сбоях на сервере необходимо выполнить следующие действия: Сборка и запуск в Xcode. Нажмите кнопку остановки. Запустите приложение на своем устройстве iOS. Сделайте приложение аварийным. Снова запустите приложение.



3

Убедитесь, что вы не вызываете сбой слишком рано.

Установить [Crashlytics sharedInstance].debugModeна YES;

Следить за

Crashlytics] Settings loaded

в журналах консоли Xcode.

Затем принудительно завершите работу и перезапустите приложение, и теперь о сбое будет сообщено.


3

Я столкнулся с аналогичной проблемой при попытке выполнить тестовый аварийный код.

Crashlytics.sharedInstance().crash()

Я запускал свое приложение с устройства без Xcode, и сбой не отображался на панели мониторинга Crashlytics. Для меня сработал следующий совет с сайта Crashlytics:

  • Обязательно запускайте приложение после сбоя, чтобы можно было загрузить сбой

Я закомментировал приведенный выше вызов crash () и повторно запустил приложение. Затем сбой обнаружился на панели инструментов.


2

Это для xcode 9, от crashlytics 3.4.0 ШАГ 1 ШАГ 2

После этого наберитесь терпения и подождите несколько минут.


1

Вы пробовали запустить [[Crashlytics sharedInstance] crash]на устройстве и посмотреть, будет ли об этом сообщено? Есть несколько причин, по которым Crashlytics может не работать, в том числе другие отчеты о сбоях и т. Д.


Нет, я использую int * x = NULL; * х = 42; код, чтобы увидеть отчет о сбое. Более того, мое приложение также дает сбой для другой базовой модели данных.
farhad rubel

1

Если вы не загрузите файл dSYM, Crashlytics не покажет ваш сбой, даже если отчет был успешно загружен.

Вы можете столкнуться с этой проблемой, если настроили сценарий сборки для работы только на вашем CI-сервере. Затем, если вы скопировали свое приложение на свой телефон через xcode и запускаете его без привязки к отладчику, отчет будет загружен, но проигнорирован из-за отсутствия файла dSYM.



1

Иногда для отображения журналов требуется некоторое время. Я могу найти их через 15-20 минут


0

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

./Fabric.framework/run

С каким-то другим моим скриптом все было в порядке, отчет журнала CrashLytics был отправлен, но в веб-интерфейсе ничего не было.

Когда я добавляю еще одну фазу сценария запуска только с запуском Fabric, это выглядит как волшебство :)

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


-1

Это сработало для меня,

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


-3

Я решил, сняв флажок «Запускать сценарий только при установке» в сценарии запуска (один для Fabric (crashlytics))

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


Это просто скрипт, который загружает символы в Crashlytics; как это решить проблему, когда отчеты о сбоях не отправляются? Что нужно сделать, чтобы избежать использования Crashlytics, если символы не были загружены? Этот ответ вводит в заблуждение и просто неверен.
Droppy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.