Crashlytics не надсилає звіт про аварію з iPhone


85

Я налаштував Crashlytics у своєму одному додатку iOS та встановив додаток на реальному пристрої. Це відображає моя інформаційна панель Crashlytics, я успішно додав програму. Однак він не надсилає звіт про аварійне завершення роботи. Моя швидкість в Інтернеті не така хороша. Але я можу перевірити свої електронні листи з цього пристрою. Хтось може здогадатися, де проблема?


5
У мене така ж проблема із службою Crashlytics. Звіти про збої з пристрою ніколи не надсилаються (на мій досвід) - лише з тренажера. Я в кінцевому підсумку використовував звіти про збої в Crittercism та обробку помилок.
Сем Спенсер

Те саме відбувається зі мною. Спробуйте свою програму на іншому пристрої, ніж власне на пристрої розробки, таким чином ви зможете отримувати звіти про збої.
Samet DEDE

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

1
Без повного опису налаштувань або тестового проекту на це неможливо відповісти. Вам слід зв’язатися зі службою підтримки crashlytics. Дике вгадування не допомагає.
Kerni

3
Я настільки здивований, що хтось із Crashlytics побачив мій цей пост на StackOverflow, і він зв’язався зі мною електронною поштою; Він допомагає мені вирішити це питання. Подивимось, що станеться.
farhad rubel

Відповіді:


81

Налагоджувач Xcode НЕ дозволяє Crashlytics обробляти звіти про аварійне завершення роботи. Так, це здається дивним навіть для мене, коли я читаю це вперше, але це факт ( Джерело ). Ось чому ми ніколи не бачимо звіт про збої Коли:
- запустити програму в Simulator
- запустити програму на iDevice, безпосередньо будуючи та запускаючи з Xcode із увімкненим налагоджувачем

Щоб переконатися, що повідомляється про збій під час тестування ( скопійовано з веб-сайту підтримки Crashlytics ):
1. Запустіть симулятор
2. Натисніть зупинку
3. Запустіть програму та примусово збийте
4. Перезапустіть програму з симулятора
5. Дивіться звіт про збій у веб-панель інструментів.

РЕДАГУВАТИ:

Додано посилання; Crashlytics також пропонує коротку статтю про швидкий спосіб примусити аварію .


6
Це мені допомогло. Я також виявив це в деяких випадках. Crashlytics не надсилатиме звіт про аварійне завершення роботи, якщо додаток не буде знову відкрито. Ще раз: користувач зазнав аварії. Користувач знову відкриває програму. Crashlytics надсилає попередній звіт про аварію.
tambykojak

1
@tambykojak це, швидше за все, пов’язано з тим, що збої iOS у більшості випадків є досить мінливими, і більш безпечним маршрутом є надсилання звіту про аварійне завершення роботи при наступному завантаженні програми порівняно з негайним відправленням. Багато інструментів звітування про аварійне завершення роботи використовують цю парадигму на iOS та інших обробниках збоїв, що не стосуються віртуальних машин.
pixelknitter

2
Дякую. Це слід позначити як правильну відповідь :)
iMemon

Чи потрібно завантажувати будь-які файли dsyms у цьому випадку? Якщо так, де я можу їх знайти?
SoliQuiD

посилання мертві.
веселий

66

Будь пізно, але працюй на 100%

Внесіть деякі зміни в налаштування збірки проекту, як на малюнку нижче

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

і дотримуйтесь цих інструкцій.


Навіть після вимкнення Bitcode, я все ще час від часу бракував помилок dSYMS, і 100% часу під час налагодження за допомогою симулятора. Це виправило це. Дякую.
user3344977

Змінивши це налаштування, я зміг побачити збої в платформі
firebase

20

Основна причина, через яку будь-який репортер про збої не працює на iOS, - це втручання різних репортерів про збої. Однак із Crashlytics конкретно може бути щось специфічне для них, через що звіт про аварію не отримує звіт.

Налагоджувач Xcode НЕ дозволяє жодному програмі Crash Reporter обробляти звіти про аварійне завершення роботи. Це пояснюється тим, що XCode замінює будь-які хуки у зворотних викликах обробки аварій. Це відбувається лише тоді, коли:

  • запущена програма в Simulator (з увімкненим налагоджувачем)
  • запуск програми на 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.
Метті

8

Для мене проблема полягала в тому, що пристрій було підключено до мого Mac :) З цього джерела :

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


7

Я знайшов рішення, виконавши наступні кроки
1. Перейдіть до Редагувати схему 2. Виконати -> Інформація 3. Змінити конфігурацію збірки на випуск. Тепер запустіть програму, яка її аварійно завершує роботу. Ви отримаєте пошту.


6

Нещодавно ми зіткнулися з цією проблемою, і я виявив, що десь на шляху скрипта збірки було видалено. Додавши його назад із наступним, вирішили проблему для нас:
./Crashlytics.framework/run <your_api_key> <build_secret>

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

Додавання сценарію збірки:

  1. Щоб додати фазу побудови сценарію запуску в Xcode 6, виберіть ціль програми у своєму проекті, а потім виберіть «Фази побудови».
  2. Клацніть на маленький значок "плюс" і виберіть "Нова фаза побудови сценарію запуску".
  3. Тепер ви повинні побачити розділ «Виконати сценарій» посередині параметрів «Фаза побудови», як показано вище.
  4. Вставте сценарій запуску сценарію запуску сценарію. `

Вищезазначена цитата походить із візуального підручника Crashlytics , на який посилається ця публікація .

Примітка: Я спочатку опублікував цю відповідь дослівно для коду помилки Crashlytics: 202 під час надсилання файлів .


Здається, це мені допомогло.
Кріс Принс,

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

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

Я вже додати нове питання ... stackoverflow.com/questions/30215049 / ...
RameshIos

1
Дякую за підказку. Ми провели ["Release" = "$ {CONFIGURATION}"] у нашому сценарії запуску, і ми перейменували нашу конфігурацію Release.
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:

  • Не забудьте запустити програму після її збою, щоб збій можна було завантажити

Я прокоментував наведений вище виклик аварійного завершення роботи () і повторно запустив програму. Потім збій виявився на інформаційній панелі.


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.




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.