Crashlytics nie wysyła raportu o awarii z iPhone'a

85

Skonfigurowałem Crashlytics w mojej jednej aplikacji na iOS i zainstalowałem aplikację na prawdziwym urządzeniu. Mój pulpit nawigacyjny Crashlytics wyświetla to, pomyślnie dodałem aplikację. Jednak nie wysyła raportu o awarii. Moja prędkość internetu nie jest tak dobra. Ale mogę sprawdzić pocztę na tym urządzeniu. Czy ktoś może zgadnąć, gdzie jest problem?

farhad rubel
źródło
5
Mam ten sam problem z usługą Crashlytics. Raporty o awariach z urządzenia nigdy nie są wysyłane (z mojego doświadczenia) - tylko z symulatora. Skończyło się na raportowaniu awarii Crittercism i obsłudze błędów.
Sam Spencer
To samo dzieje się ze mną. Wypróbuj aplikację na innym urządzeniu niż rzeczywiste urządzenie programistyczne, dzięki czemu uzyskasz raporty o awariach.
Samet DEDE
Tak, używam mojego urządzenia programistycznego. Czy to stwarza problem?
farhad rubel
1
Bez pełnego opisu instalacji lub projektu testowego nie można na to odpowiedzieć. Powinieneś skontaktować się z pomocą techniczną Crashlytics. Dzikie zgadywanie nie pomaga.
Kerni,
3
Jestem tak zdumiony, że ktoś z Crashlytics zobaczył mój post na StackOverflow i skontaktował się ze mną przez e-mail; Pomaga mi rozwiązać ten problem. Zobaczmy co się stanie.
farhad rubel

Odpowiedzi:

82

Debuger Xcode NIE zezwala Crashlytics na przetwarzanie raportów o awariach. Tak, to wydaje się dziwne nawet mi, kiedy czytam to po raz pierwszy, ale to fakt ( Źródło ). Z tego powodu nigdy nie widzimy raportu o awarii, gdy:
- uruchamianie aplikacji w symulatorze
- uruchamianie aplikacji na iDevice przez bezpośrednie kompilowanie i uruchamianie z Xcode z włączonym debugerem.

Aby upewnić się, że podczas testowania została zgłoszona awaria ( skopiowana ze strony pomocy Crashlytics ):
1. Uruchom symulator
2. Naciśnij stop
3. Uruchom aplikację i wymuś awarię
4. Uruchom ponownie aplikację z symulatora
5. Zobacz raport o awarii w panel internetowy.

EDYTOWAĆ:

Dodano odniesienie; Crashlytics udostępnia także krótki artykuł na temat szybkiego wymuszenia awarii .

Saurabh Hooda
źródło
6
To mi pomogło. Odkryłem też, że w niektórych przypadkach. Crashlytics nie wyśle ​​raportu o awarii, dopóki aplikacja nie zostanie ponownie otwarta. Powtarzam: u użytkownika nastąpiła awaria. Użytkownik ponownie otwiera aplikację. Crashlytics wysyła poprzedni raport o awarii.
tambykojak
1
@tambykojak jest to prawdopodobnie spowodowane faktem, że awarie iOS są dość niestabilne w większości przypadków, a bezpieczniejszą drogą jest wysłanie raportu o awarii przy następnym załadowaniu aplikacji, a nie od razu. Wiele narzędzi do raportowania awarii używa tego paradygmatu w systemie iOS i innych programach do obsługi awarii innych niż maszyny wirtualne.
pixelknitter
2
Dziękuję Ci. To powinno być oznaczone jako poprawna odpowiedź :)
iMemon
Czy w tym przypadku muszę przesyłać pliki dsym? Jeśli tak, gdzie mogę je znaleźć?
SoliQuiD
linki są martwe.
luky
66

Może jest późno, ale pracuję w 100%

Wprowadź pewne zmiany w ustawieniach kompilacji projektu, jak na poniższym obrazku

wprowadź opis obrazu tutaj

i postępuj zgodnie z tymi instrukcjami.

Anand Suthar
źródło
Nawet po wyłączeniu Bitcode wciąż brakowało mi błędów dSYMS od czasu do czasu i 100% czasu podczas debugowania za pomocą symulatora. To naprawiło. Dziękuję Ci.
user3344977
Zmieniając to ustawienie, mogłem zobaczyć awarie na platformie
Firebase
20

Głównym powodem, dla którego zgłaszający awarie nie będzie działać w systemie iOS, są zakłócenia ze strony różnych osób zgłaszających awarie. Jednak w przypadku Crashlytics może istnieć coś konkretnego, co powoduje, że raport o awarii nie zostanie zgłoszony.

Debugger Xcode NIE zezwala żadnemu programowi Crash Reporter na przetwarzanie raportów o awariach. Dzieje się tak, ponieważ XCode zastępuje wszelkie podpięcia do wywołań zwrotnych obsługi awarii. Dzieje się tak tylko wtedy, gdy:

  • uruchamianie aplikacji w symulatorze (z włączonym debugerem)
  • uruchamianie aplikacji na iDevice poprzez bezpośrednie kompilowanie i uruchamianie z Xcode z włączonym debugerem.

Aby upewnić się, że podczas testów zgłoszono awarię ( http://support.crashlytics.com/knowledgebase/articles/92523-why-can-ti-have-xcode-connected- ):

  1. Uruchom symulator
  2. Naciśnij stop
  3. Uruchom aplikację i wymuś awarię
  4. Uruchom ponownie aplikację z symulatora
  5. Zobacz raport o awarii w panelu internetowym.

Chociaż bardzo stary film jest nadal aktualny, oto film przedstawiający powyższe kroki (przykład z Crittercism): https://www.youtube.com/watch?v=sU6Su3PBFH4

pixelknitter
źródło
1
Crashlytics wyłącza się samoczynnie, gdy wykryje dołączony debugger. Nie dlatego, że nie zadziała, ale dlatego, że uniemożliwi poprawne działanie debugera . Crashlytics używa tych samych mechanizmów, z których korzysta sam debugger, i byłoby naprawdę frustrujące, gdyby SDK zepsuł normalny przepływ debugowania. Dla porównania napisałem większość zestawu Crashlytics SDK.
Mattie,
8

U mnie problem polegał na tym, że urządzenie było podłączone do mojego Maca :) Z tego źródła :

Ponadto, jeśli masz urządzenie podłączone do komputera Mac, debugger XCode również włączy się. Więc po prostu odłącz urządzenie przed testowaniem :)

Fengson
źródło
7

Znalazłem rozwiązanie, wykonując następujące kroki:
1. Przejdź do Edytuj schemat 2. Uruchom -> Informacje 3. Zmień konfigurację kompilacji na wydanie. Teraz uruchom aplikację, aby ją rozbić. Otrzymasz pocztę.

Gurjinder Singh
źródło
6

Niedawno napotkaliśmy ten problem i odkryłem, że gdzieś po drodze skrypt kompilacji został usunięty. Dodanie go z powrotem z następującymi rozwiązaniami rozwiązało problem:
./Crashlytics.framework/run <your_api_key> <build_secret>

Uwaga: podczas korzystania z Cocoapods będziesz chciał, abyśmy zamiast powyższego ( źródło ): ./Pods/CrashlyticsFramework/Crashlytics.framework/run

Dodawanie skryptu kompilacji:

  1. Aby dodać fazę kompilacji Run Script w Xcode 6, wybierz docelową aplikację w swoim projekcie, a następnie wybierz „Fazy budowania”.
  2. Kliknij małą ikonę „plus” i wybierz „Nowa faza budowy skryptu uruchamiania”.
  3. Powinieneś teraz zobaczyć sekcję Run Script pośrodku opcji fazy budowy, jak pokazano powyżej.
  4. Wewnątrz treści Run Script Build Phase, wklej skrypt

Powyższy cytat pochodzi z wizualnego samouczka Crashlytics , do którego odwołuje się ten post .

Uwaga: pierwotnie opublikowałem tę odpowiedź dosłownie dla kodu błędu Crashlytics: 202 podczas przesyłania plików .

James Nelson
źródło
Wydaje się, że to mi pomogło.
Chris Prince
1
Wcześniej używałem tkaniny Fabric do integracji z Twitterem, teraz chcę także crashlytics, dodałem także framework i postępowałem zgodnie ze wszystkimi instrukcjami, ale nie otrzymałem żadnych raportów o awariach na mojej tablicy rozdzielczej, proszę o pomoc
RameshIos
@iOS_Ramesh Chciałbym spróbować Ci pomóc, ale bez większej wiedzy będzie to trudne. Aby to zrobić, otwórz nowe pytanie określające, gdzie się znajdujesz (krok, który wykonałeś podczas integracji, wszelkie odpowiednie fragmenty kodu i wszelkie opinie, które otrzymujesz od Crashlytics lub konsoli).
James Nelson
Już
zadaję
1
Dzięki za podpowiedź. Mieliśmy ["Release" = "$ {CONFIGURATION}"] w naszym skrypcie uruchamiania i zmieniliśmy nazwę naszej konfiguracji wydania.
Marián Černý
4

Ze strony RayWenderlich:

Nie otrzymasz żadnych raportów o awariach, jeśli Xcode przechwyci zdarzenie awarii! Aby wszystkie poniższe przykłady zadziałały, musisz zbudować i uruchomić aplikację, a następnie kliknąć przycisk zatrzymania w Xcode. W ten sposób na urządzeniu zostanie zainstalowana najnowsza wersja. Gdy to zrobisz, możesz uruchomić aplikację na samym urządzeniu, a następnie wyłączyć wszystko, co chcesz! Wszystkie awarie na Twoim urządzeniu z systemem iOS zostaną przechwycone i przesłane do komponentu serwera usługi, którą zintegrowałeś z aplikacją. Raporty o awariach są zwykle wysyłane na serwer przy następnym uruchomieniu aplikacji, więc kroki, które należy wykonać, aby wygenerować raport o awarii na serwerze, są następujące: Skompiluj i uruchom w Xcode. Naciśnij przycisk stop. Uruchom aplikację na swoim urządzeniu z systemem iOS. Zrób awarię aplikacji. Uruchom aplikację ponownie.

Michel Goñi
źródło
3

Crashlytics działa dla mnie do teraz. Nie wiem dlaczego, ale teraz to nie działa.

Powinieneś włączyć tryb debugowania przez

[Crashlytics sharedInstance].debugMode = YES;

Mój problem jest tutaj Kod błędu Crashlytics: 202 podczas przesyłania plików :(

Tony
źródło
3

Upewnij się, że nie wymuszasz awarii zbyt wcześnie.

Ustaw [Crashlytics sharedInstance].debugModena YES;

Uważaj na

Crashlytics] Settings loaded

w dziennikach konsoli Xcode.

Następnie wymuś awarię i uruchom ponownie aplikację, a awaria zostanie teraz zgłoszona.

erkanyildiz
źródło
3

Napotkałem podobny problem podczas testowania kodu awarii.

Crashlytics.sharedInstance().crash()

Uruchomiłem aplikację na urządzeniu bez Xcode, a awaria nie pojawiła się na pulpicie Crashlytics. U mnie zadziałała następująca wskazówka ze strony Crashlytics:

  • Pamiętaj, aby uruchomić aplikację po jej awarii, aby można było przesłać awarię

Skomentowałem powyższe wywołanie crash () i ponownie uruchomiłem aplikację. Następnie awaria pojawiła się na desce rozdzielczej.

Ravi
źródło
2

To jest dla xcode 9, z crashlytics 3.4.0 KROK 1 KROK 2

Po wykonaniu tej czynności bądź cierpliwy i odczekaj kilka minut.

Przetrząsać
źródło
1

Czy próbowałeś uruchomić [[Crashlytics sharedInstance] crash]urządzenie i sprawdzić, czy zostanie to zgłoszone? Istnieje kilka powodów, dla których Crashlytics może nie działać, w tym inni reporterzy awarii itp.

Patrick Tescher
źródło
Nie, używam int * x = NULL; * x = 42; kod, aby wyświetlić raport o awarii. Co więcej, moja aplikacja również ulega awarii dla innego podstawowego modelu danych.
farhad rubel
1

Jeśli nie prześlesz pliku dSYM, Crashlytics nie pokaże Twojej awarii, mimo że raport został pomyślnie przesłany.

Możesz napotkać ten problem, jeśli skonfigurowałeś skrypt kompilacji tak, aby działał tylko na serwerze CI. Następnie, jeśli skopiowałeś swoją aplikację do telefonu przez xcode i uruchomisz ją bez dołączenia do debuggera, raport zostanie przesłany, ale zignorowany z powodu brakującego pliku dSYM.

thetrutz
źródło
1

Czasami pojawienie się dzienników zajmuje trochę czasu. Jestem w stanie je znaleźć po 15-20 minutach

Niedbały
źródło
0

Jednym z problemów, które uważam, że w fazie uruchamiania skryptu powinna być osobna faza uruchamiania skryptu dla CrashLytics. Kiedy miał skrypt uruchamiania

./Fabric.framework/run

W przypadku niektórych moich innych skryptów wszystko było w porządku, raport dziennika CrashLytics został przesłany, ale w interfejsie internetowym nic nie było.

Kiedy dodam kolejną fazę skryptu Run tylko z uruchomieniem Fabric, wygląda to jak magia :)

Moja pierwsza próba była z cocoapods, ale to nie zadziałało. Kiedy ręcznie dodaję całą strukturę i oddzielną fazę skryptu uruchamiania, która zadziałała.

karim
źródło
-1

To zadziałało dla mnie,

Jeśli testujesz na iDevice, po prostu odłącz iDevice ze swoim Xcode i uruchom aplikację. Teraz, jeśli się rozbił, zostanie zaktualizowany na desce rozdzielczej.

Mohammad Zaid Pathan
źródło
-3

Rozwiązałem przez odznaczenie opcji „Uruchom skrypt tylko podczas instalacji” w skrypcie Uruchom (jedna dla Fabric (crashlytics))

wprowadź opis obrazu tutaj

Shaz
źródło
To tylko skrypt, który przesyła symbole do Crashlytics; jak to rozwiązuje problem nieprzesyłania raportów o awariach? Jakie kroki należy podjąć, aby uniknąć korzystania z Crashlytics, gdy symbole nie zostały przesłane? Ta odpowiedź jest myląca i po prostu błędna.
Droppy