it-swarm.com.de

Crashlytics zeigt keine Abstürze

Ich habe Crashlitycs soeben installiert, wie diese offizielle Anweisung.

Ich habe für das Debug-Informationsformat "DWARF with dSYM File" für Debug und Release festgelegt und Bitcode deaktiviert (einige Leute schrieben, dass es helfen könnte):

 enter image description here

AppDelegate:

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

Um einen Absturz zu simulieren, benutze ich

Crashlytics.sharedInstance().crash()

und

var ggg: Int!
print(ggg)

Crashlitics sammelt einige Informationen zu Sitzungen. Zum Beispiel werden Informationen zur Paketversion aktualisiert:

 enter image description here

Also funktioniert die Verbindung mit Crashlitics. Die Informationen zum Absturz sind jedoch leer:

 enter image description here

Ich verwende XCode 8 und iOS 9/10. Was mache ich falsch?

EDIT:

Ich habe es auf einem Simulator und einem Gerät ohne XCode-Debugger-Verbindung getestet (d. H. Starten vom Bildschirm "Sumulator/Gerät").

Schließlich habe ich nach 7-8 Stunden nach Abstürzen einige Crashlytics-Berichte erhalten. Ich habe sie früher erwartet, weil laut Dokumentation :

Innerhalb weniger Minuten sollte der Absturz auf Ihrem Fabric erscheinen Instrumententafel.

Ich habe jedoch nicht alle Abstürze erhalten, auf die ich gewartet habe. In meinen Experimenten habe ich verschiedene Wege zur Initialisierung von Crashlytics ausprobiert:

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

Könnte es der Grund sein? Ich habe auch die ähnliche unbeantwortete Frage gefunden.

19
Avt

Die folgenden Begriffe überprüft,

  1. Stellen Sie sicher, dass sich die Crashlytics SDK-Zeile hinter allen anderen SDK-Zeilen von Drittanbietern befindet. (Es muss der letzte sein, der in Ihrer appDidFinishLaunching-Methode aufgerufen wird.) 

  2. Erzwingen Sie einen Absturz und starten Sie die App erneut. Xcode muss getrennt werden, damit der Absturzbericht nicht abgefangen werden kann. Befolgen Sie zum Trennen von Xcode die Anweisungen here

  3. Wenn Sie [Crashlytics sharedInstance] abstürzen]; Um den Absturz zu testen, stellen Sie sicher, dass er nicht in der appDidFinishLaunching-Methode enthalten ist. 

Diese werden bereits im Support-Abschnitt erwähnt. Hier sind weitere -

  1. Überprüfen Sie Ihre Organisation -> Ihre App -> Fehlendes dSYM. Zeigt es eine fehlende dSYM-Datei an

 enter image description here

wenn ja, dann machen Sie den folgenden Schritt

  1. Klicken Sie mit der rechten Maustaste auf Ihr Archiv -> Im Finder anzeigen -> Klicken Sie mit der rechten Maustaste auf die Datei und klicken Sie auf Paketinhalt anzeigen
  2. Klicken Sie mit der rechten Maustaste auf dSYM-Datei -> Paketinhalt anzeigen -> Inhalt -> Ressourcen -> DWARF (In Terminal öffnen)
  3. Führen Sie den Befehl dwarfdump --uuid "Dateiname aus, den Sie dort im Zwergenordner gesehen haben"

 enter image description here

Dies zeigt alle zugehörigen UUIDs an. Wenn eine der aufgelisteten UUIDs mit der in der fehlenden dSYM-ID angegebenen übereinstimmt, komprimieren Sie einfach den dSYM-Ordner und laden Sie ihn in das crashlytics Missing dSYM-Segment hoch.

Dieser Schritt ist wichtig, weil die dSYM-Datei, die wir aus dem Organisator extrahieren, manchmal keine korrekte UUID enthält. Und nachdem wir das falsche hochgeladen haben, warten wir auf die Aktualisierungen. Stellen Sie daher sicher, dass Sie die richtige dSYM-Datei hochladen.

Abgesehen von den oben genannten Dingen wirken sich die Bitcode-Eigenschaft und das Debug-Informationsformat in den Build-Einstellungen auch auf die Absturzberichte aus.

24
Rahul Verma

Sie müssen die App aber nicht von Xcode aus ausführen. 

Wenn Sie ein Gerät verwenden, starten Sie einfach die App, ohne dass USB verbunden ist . Wenn Sie den Simulator verwenden, beenden Sie die Ausführung der App über Xcode. Dann öffnen Sie es erneut per Mausklick.

Navigieren Sie dann zu buttonPress oder function, die die Crashlytics.sharedInstance().crash() aufrufen.

Dann reopen die App nach einem Absturz erneut. (Dies kann bei Bedarf mit der Konsole verbunden werden.) Dieser Schritt ist wichtig, da Absturzberichte den Absturzbericht unmittelbar vor dem Beenden der App speichern. Wenn Sie die App das nächste Mal öffnen, wird der Bericht bis zu crashlytics hochgeladen.

Die Dokumente hier erklären das Problem auch.

8
Zac Kwan

Eine weitere mögliche Ursache für Abstürze, die nicht hochgeladen werden, ist die Implementierung des Crashlytics-Delegaten, ohne den Beendigungshandler aufzurufen: 

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

Stattdessen sollte es so aussehen: 

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

Überprüfen Sie in Ihren Build-Einstellungen, ob das Debug-Informationsformat "DWARF with dSYM File" für Debug und Release ist

2
Parth

Auch 2019 relevant.

Genau wie Zac Kwan gesagt, müssen Sie dies tun, ohne dass Ihre App-Instanz an Xcode angehängt ist.

Wenn Sie Folio erstellen diese Dokumente, verstehen Sie das so, dass Sie die erforderlichen Informationen hinzufügen und dann zum Testen die Absturztaste drücken und dann neu starten, alles über Xcode.

Mach Folgendes:

  1. Fügen Sie Ihrem Projekt die erforderlichen Crashlytics-Informationen hinzu. Führen Sie es einmal in Xcode aus. Dann gehen Sie weiter und manuell zu Ihrem Simulator, öffnen Sie Ihre App, erzwingen Sie den Absturz.
  2. Sie sollten eine E-Mail über einen "schwerwiegenden Fehler" erhalten.
  3. Etwa 5-10 Minuten später wird es in Ihrer Firebase-Konsole angezeigt.
1
Michael