Crashlytics sendet keinen Crash-Bericht vom iPhone


85

Ich habe die Crashlytics in meiner einen iOS-Anwendung eingerichtet und die Anwendung auf einem realen Gerät installiert. Mein Crashlytics Dashboard zeigt dies an. Ich habe die App erfolgreich hinzugefügt. Es wird jedoch kein Absturzbericht gesendet. Meine Internetgeschwindigkeit ist nicht so gut. Aber ich kann meine E-Mails von diesem Gerät aus abrufen. Kann jemand erraten, wo das Problem liegt?


5
Ich habe das gleiche Problem mit dem Crashlytics-Dienst. Absturzberichte vom Gerät werden (meiner Erfahrung nach) nie gesendet - nur vom Simulator. Am Ende habe ich Crittercism Crash Reporting und Fehlerbehandlung verwendet.
Sam Spencer

Das gleiche passiert mir. Probieren Sie Ihre Anwendung mit einem anderen Gerät als dem eigentlichen Entwicklungsgerät aus. Auf diese Weise können Sie Absturzberichte erhalten.
Samet DEDE

Ja, ich verwende mein Entwicklungsgerät. Macht es das Problem?
Farhad Rubel

1
Ohne eine vollständige Setup-Beschreibung oder ein Testprojekt ist dies nicht zu beantworten. Sie sollten sich an den Crashlytics-Support wenden. Wildes Raten hilft nicht.
Kerni

3
Ich bin so erstaunt, dass jemand von Crashlytics diesen Beitrag auf StackOverflow gesehen hat und mich per E-Mail kontaktiert hat. Er hilft mir, dieses Problem zu lösen. Mal sehen was passiert.
Farhad Rubel

Antworten:


81

Mit dem Xcode-Debugger kann Crashlytics KEINE Absturzberichte verarbeiten. Ja, das kommt mir sogar komisch vor, wenn ich das erste Mal lese, aber es ist eine Tatsache ( Quelle ). Dies ist der Grund, warum wir niemals einen Absturzbericht sehen. Wann:
- Ausführen einer App in Simulator
- Ausführen einer App auf iDevice durch direktes Erstellen und Ausführen von Xcode mit aktiviertem Debugger.

So stellen Sie sicher, dass während Ihres Tests ein Absturz gemeldet wird ( kopiert von der Crashlytics-Support-Website ):
1. Starten Sie den Simulator.
2. Drücken Sie Stopp.
3. Starten Sie Ihre App und erzwingen Sie einen Absturz.
4. Starten Sie die App über den Simulator neu.
5. Lesen Sie den Absturzbericht im Web-Dashboard.

BEARBEITEN:

Referenz hinzugefügt; Crashlytics bietet auch einen kurzen Artikel über einen schnellen Weg, um einen Absturz zu erzwingen .


6
Das hat mir geholfen. Ich habe das auch in einigen Fällen entdeckt. Crashlytics sendet den Absturzbericht erst, wenn die Anwendung erneut geöffnet wird. Um es noch einmal zu wiederholen: Der Benutzer stürzt ab. Benutzer öffnet Anwendung erneut. Crashlytics sendet den vorherigen Absturzbericht.
Tambykojak

1
@tambykojak Dies ist wahrscheinlich auf die Tatsache zurückzuführen, dass iOS-Abstürze in den meisten Fällen sehr volatil sind und der sicherere Weg darin besteht, einen Absturzbericht beim nächsten Laden der App zu senden, anstatt ihn sofort zu senden. Viele Crash Reporting-Tools verwenden dieses Paradigma unter iOS und anderen Nicht-VM-Crash-Handlern.
Pixelknitter

2
Vielen Dank. Dies sollte als richtige Antwort markiert werden :)
iMemon

Muss ich in diesem Fall irgendwelche Dsyms hochladen? Wenn ja, wo finde ich sie?
SoliQuiD

Links sind tot.
luky

66

Es ist spät, aber ich arbeite zu 100%

Nehmen Sie einige Änderungen an den Projekterstellungseinstellungen vor, wie im folgenden Bild dargestellt

Geben Sie hier die Bildbeschreibung ein

und befolgen Sie diese Anweisungen.


Selbst nach dem Deaktivieren von Bitcode fehlten immer noch ab und zu dSYMS-Fehler, und dies zu 100% beim Debuggen mit dem Simulator. Dies hat es behoben. Vielen Dank.
user3344977

Durch Ändern dieser Einstellung konnte ich Abstürze in der Firebase-Plattform sehen
Kwnstantinos Nikoloutsos

20

Der Hauptgrund, warum ein Crash-Reporter unter iOS nicht funktioniert, ist die Störung durch verschiedene Crash-Reporter. Bei Crashlytics kann es jedoch zu bestimmten Problemen kommen, die dazu führen, dass der Absturzbericht nicht gemeldet wird.

Mit dem Xcode-Debugger kann kein Crash Reporter Absturzberichte verarbeiten. Dies liegt daran, dass XCode alle Hooks in den Rückrufen zur Absturzbehandlung überschreibt. Dies geschieht nur, wenn:

  • App im Simulator ausführen (mit aktiviertem Debugger)
  • Ausführen der App auf iDevice durch direktes Erstellen und Ausführen von Xcode mit aktiviertem Debugger.

Um sicherzustellen, dass während Ihres Tests ein Absturz gemeldet wird ( http://support.crashlytics.com/knowledgebase/articles/92523-why-can-ti-have-xcode-connected- ):

  1. Starten Sie den Simulator
  2. Drücken Sie Stopp
  3. Starten Sie Ihre App und erzwingen Sie einen Absturz
  4. Starten Sie die App vom Simulator aus neu
  5. Siehe den Absturzbericht im Web-Dashboard.

Während ein super altes Video immer noch relevant ist, ist hier ein Video der obigen Schritte (Beispiel von Crittercism): https://www.youtube.com/watch?v=sU6Su3PBFH4


1
Crashlytics deaktiviert sich selbst, wenn ein angeschlossener Debugger erkannt wird. Nicht weil es nicht funktioniert, sondern weil es den Debugger daran hindert, richtig zu funktionieren. Crashlytics verwendet dieselben Mechanismen wie der Debugger selbst, und es wäre wirklich frustrierend, wenn das SDK den normalen Debugging-Ablauf durcheinander bringen würde. Als Referenz habe ich den größten Teil des Crashlytics SDK geschrieben.
Mattie

8

Für mich war das Problem, dass das Gerät mit meinem Mac verbunden war :) Aus dieser Quelle :

Wenn Sie Ihr Gerät an Ihren Mac angeschlossen haben, wird auch der Debugger von XCode aktiviert. Also einfach das Gerät vor dem Testen trennen :)


7

Ich habe die Lösung mithilfe der folgenden Schritte gefunden:
1. Gehen Sie zu Schema bearbeiten. 2. Ausführen -> Info. 3. Ändern Sie die Build-Konfiguration in Release. Führen Sie nun die App zum Absturz aus. Sie erhalten eine E-Mail.


6

Wir sind kürzlich auf dieses Problem gestoßen, und ich habe festgestellt, dass irgendwo auf dem Weg das Build-Skript entfernt wurde. Durch erneutes Hinzufügen wurde das Problem für uns behoben:
./Crashlytics.framework/run <your_api_key> <build_secret>

Hinweis: Wenn Sie Cocoapods verwenden, möchten Sie uns Folgendes anstelle der oben genannten ( Quelle ): ./Pods/CrashlyticsFramework/Crashlytics.framework/run

Hinzufügen eines Build-Skripts:

  1. Um eine Run Script Build Phase in Xcode 6 hinzuzufügen, wählen Sie Ihr Anwendungsziel in Ihrem Projekt aus und wählen Sie dann "Build Phases".
  2. Klicken Sie auf das kleine "Plus" -Symbol und wählen Sie "New Run Script Build Phase".
  3. Sie sollten jetzt einen Abschnitt "Skript ausführen" in der Mitte Ihrer Optionen für die Erstellungsphase sehen, wie oben gezeigt.
  4. Fügen Sie im Hauptteil der Phase "Skript erstellen" das Skript ein. "

Das obige Zitat stammt aus dem visuellen Tutorial von Crashlytics , auf das in diesem Beitrag verwiesen wird .

Hinweis: Ich habe diese Antwort ursprünglich wörtlich für den Crashlytics-Fehlercode 202 beim Senden von Dateien veröffentlicht .


Das scheint mir geholfen zu haben.
Chris Prince

1
Ich habe Fabric zuvor für die Twitter-Integration verwendet. Jetzt möchte ich Crashlytics. Außerdem habe ich ein Framework hinzugefügt und alle Anweisungen befolgt, aber ich habe keine Crash-Berichte auf meinem
Dashboard erhalten.

@iOS_Ramesh Ich würde gerne versuchen, Ihnen zu helfen, aber ohne mehr zu wissen, wird es schwierig sein. Um dies zu tun, sollten Sie eine neue Frage öffnen, in der dargelegt wird, wo Sie sich gerade befinden (der Schritt, den Sie zur Integration befolgt haben, alle geeigneten Codefragmente und alle Rückmeldungen, die Sie von Crashlytics oder der Konsole erhalten).
James Nelson


1
Danke für den Tipp. Wir haben ["Release" = "$ {CONFIGURATION}"] in unserem Run Script überprüfen lassen und unsere Release-Konfiguration umbenannt.
Marián Černý

4

Von der RayWenderlich-Website:

Sie erhalten keine Absturzberichte, wenn Xcode das Absturzereignis abfängt! Damit alle folgenden Beispiele funktionieren, müssen Sie die Anwendung erstellen und ausführen und dann auf die Stopp-Schaltfläche von Xcode klicken. Auf diese Weise wird die neueste Version auf dem Gerät installiert. Sobald dies erledigt ist, können Sie die App auf dem Gerät selbst starten und dann alles abstürzen lassen, was Sie wollen! Alle Abstürze auf Ihrem iOS-Gerät werden abgefangen und an die Serverkomponente des Dienstes gesendet, den Sie in die App integriert haben. Absturzberichte werden normalerweise beim nächsten Start der App an den Server gesendet. Die folgenden Schritte zum Generieren eines Absturzberichts auf dem Server sind daher wie folgt: Erstellen und Ausführen auf Xcode. Drücken Sie die Stopp-Taste. Führen Sie die App auf Ihrem iOS-Gerät aus. Lassen Sie die App abstürzen. Führen Sie die App erneut aus.



3

Stellen Sie sicher, dass Sie den Absturz nicht zu früh erzwingen.

Setze [Crashlytics sharedInstance].debugModeauf YES;

Achten Sie auf

Crashlytics] Settings loaded

in den Xcode-Konsolenprotokollen.

Erzwingen Sie dann den Absturz und starten Sie die App neu. Der Absturz wird jetzt gemeldet.


3

Beim Versuch des Testabsturzcodes stieß ich auf ein ähnliches Problem.

Crashlytics.sharedInstance().crash()

Ich habe meine App von einem Gerät ohne Xcode ausgeführt, und der Absturz wurde im Crashlytics Dashboard nicht angezeigt. Was für mich funktioniert hat, war der folgende Tipp von der Crashlytics-Website:

  • Stellen Sie sicher, dass Sie die App nach dem Absturz starten, damit der Absturz hochgeladen werden kann

Ich habe den obigen Absturz () -Aufruf auskommentiert und die App erneut ausgeführt. Dann wurde der Absturz im Dashboard angezeigt.


2

Dies ist für Xcode 9 aus Crashlytics 3.4.0 SCHRITT 1 SCHRITT 2

Seien Sie danach geduldig und warten Sie einige Minuten.


1

Haben Sie versucht, [[Crashlytics sharedInstance] crash]auf einem Gerät zu laufen und zu prüfen, ob dies gemeldet wird? Es gibt einige Gründe, warum Crashlytics möglicherweise nicht funktionieren, einschließlich anderer Crash-Reporter usw.


Nein, ich verwende int * x = NULL; * x = 42; Code zum Anzeigen des Absturzberichts. Darüber hinaus stürzt meine App auch für verschiedene Kerndatenmodelle ab.
Farhad Rubel

1

Wenn Sie die dSYM-Datei nicht hochladen, zeigt Crashlytics Ihren Absturz nicht an, obwohl der Bericht erfolgreich hochgeladen wurde.

Dieses Problem kann auftreten, wenn Sie Ihr Build-Skript so eingerichtet haben, dass es nur auf Ihrem CI-Server ausgeführt wird. Wenn Sie Ihre App dann über xcode auf Ihr Telefon kopiert haben und sie ausführen, ohne an den Debugger angehängt zu sein, wird der Bericht hochgeladen, aber aufgrund der fehlenden dSYM-Datei ignoriert.



1

Manchmal dauert es einige Zeit, bis die Protokolle angezeigt werden. Ich kann sie nach 15-20 Minuten finden


0

Eines der Probleme ist meines Erachtens, dass es in der Run Script-Phase eine separate Run Script-Phase für CrashLytics sein sollte. Wann hatte das Skript ausgeführt

./Fabric.framework/run

Mit einigen meiner anderen Skripte war alles in Ordnung, CrashLytics Log Show Report wurde übermittelt, aber nichts war in der Weboberfläche.

Wenn ich eine weitere Run-Skriptphase nur mit Fabric-Run hinzufüge, erscheint dies wie eine Magie :)

Mein erster Versuch war mit Cocoapods, aber das hat nicht funktioniert. Wenn ich das gesamte Framework und eine separate Ausführungsskriptphase manuell hinzufüge, hat das funktioniert.


-1

Das hat bei mir funktioniert,

Wenn Sie auf iDevice testen, trennen Sie iDevice einfach von Ihrem Xcode und führen Sie Ihre App aus. Wenn es abgestürzt ist, wird es im Dashboard aktualisiert.


-3

Ich habe das Problem gelöst, indem ich die Option "Skript nur bei Installation ausführen" im Skript "Ausführen" deaktiviert habe (eine für Fabric (Crashlytics)).

Geben Sie hier die Bildbeschreibung ein


Das ist nur das Skript, das die Symbole zu Crashlytics hochlädt. Wie kann das Problem behoben werden, dass Absturzberichte nicht gesendet werden? Welche Schritte müssen Sie unternehmen, um die Verwendung von Crashlytics zu vermeiden, wenn die Symbole nicht hochgeladen wurden? Diese Antwort ist irreführend und einfach falsch.
Droppy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.