Ich habe eine App und zwei App-Erweiterungen (Tastatur und iMessage-Erweiterungen), die drei Frameworks verwenden, die wir gebaut haben. Die Frameworks sind Teil des Projekts und haben jeweils ihr eigenes Ziel. Die App und die Erweiterungen werden in diesen Frameworks verknüpft und wir verwenden sie, um allgemeine Aufgaben wie den Zugriff auf eine Datenbank auszuführen.Crashlytics Bericht von Ausnahme in Framework
Wenn wir Crashlytics im AppDelegate initialisiert wie diese
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
Fabric.with([Crashlytics.self])
... more
}
Dann sollte es stürzt sogar berichten, wenn der Absturz in einem der verknüpften Rahmen aufgetreten ist, nicht wahr? Wenn die dSYM-Dateien für die App, die App-Erweiterungen und die Frameworks vorhanden sind, dann sollte es möglich sein, den Absturz sogar in den Framework-Code zu symbolisieren, richtig?
Ich habe einige Schwierigkeiten, Crystigytics zu bekommen, um Dinge zuverlässig zu melden. Wenn ich Crashlytics.sharedinstance().crash()
in eine Funktion im Hauptleitungscode einfüge, dann scheint es, dass es gut funktioniert. Aber wenn ich eine Funktion von einem UIAlertAction wie folgt aufrufen ...
@objc func onPreviewLongPress(_ notification : Notification)
{
if let userInfo = notification.userInfo, let collectionName = userInfo["collectionName"] as! String? {
let alert = UIAlertController(title: "", message: "Enter the code:", preferredStyle: .alert)
alert.addTextField { (textField) in
textField.text = ""
}
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (_) in
let textField = alert.textFields![0]
// original code snipped
if textField.text!.doesContain("crash") {
self.callForCrash()
}
}))
self.present(alert, animated: true, completion: nil)
}
}
private func callForCrash() {
Crashlytics.sharedInstance().crash() // DOES NOT REPORT!!!
}
Ich habe auch versucht, einen Absturz zu zwingen durch Teilung zwingt durch Null ...
private func callForCrash() {
let nom = 12;
let result = nom/zeroNum(13)
print(result)
}
// separate function to allow division by zero to get through swift parsing
private func zeroNum(_ num: Int) -> Int {
return num - num;
}
Dieses berichten auch nicht. Wenn ich aber gerade die Crashlytics.sharedInstance().crash()
in den Code vor dem Alert setze, dann wird es gut berichtet.
Ich habe den Installationsvorgang und den Beispielcode in den letzten paar Tagen mehrmals durchgeführt.
- Die Konsole zeigt die Version, die ich zu Test bin versucht, einschließlich der brandneuen Build-Nummer
- Die Konsole ist nicht Probleme mit fehlenden DSYM Dateien berichten,
- ich habe nicht Bitcode aktiviert,
- Ich baue nur 'aktive Architektur' = Ja (Ich habe auch versucht, das auf Nein zu setzen),
- Das Skript läuft für die App und die zwei App-Erweiterungen (Ich habe noch nicht versucht, eine Erweiterung zu testen)
- Ich habe versucht, von Xc zu laufen ode dann stoppen, um nach der Installation zu starten,
- Ich habe auch versucht, Ad-hoc-Build und die Installation über das Geräte-Fenster (Xcode 9.2)
- Ich trigger den Absturz und starten Sie dann die App neu, so wird es berichten
Kann jemand sehen, was ich verpasst haben könnte? Ich habe gelesen, dass arm64 ein Problem ist, aber das war ziemlich alt, also bin ich mir nicht sicher, ob das immer noch ein Problem ist. Kann ich im Protokoll nach etwas suchen, das mir sagt, ob es funktioniert oder nicht? UPDATE Ist es möglich, dass sowohl die Android- als auch die iOS-Version der App mit der gleichen ID "com.mydomain.myapp" zu unvorhersehbarem Verhalten führen kann? Es wird separat auf der Fabric-Konsole angezeigt.
TIA, Mike
Große Frage, und froh zu sehen, Sie implementieren uns in einem komplexen Projekt. Kannst du sicherstellen, dass die Build-Phase für alle Ziele funktioniert? Es spielt keine Rolle, ob Sie die gleichen Kennungen plattformübergreifend verwenden. Wenn Sie innerhalb des Projekts unterschiedliche Paket-IDs verwenden, die dies möglicherweise auch verursachen. –
Danke für den Kommentar Todd. Wenn Sie "alle Ziele" sagen, nehme ich an, dass Sie nicht die Frameworks meinen, oder? Die Frameworks selbst haben keine Bündel-IDs. Ich habe das Ausführungsskript in den Build-Phasen für die App, die Tastaturerweiterung und die iMessage-Erweiterung. Kannst du mir noch etwas weiter empfehlen, während ich versuche, dies heute fertig zu stellen? – Mikey
Ich habe gerade etwas von dem Framework zurückbekommen, der Name wurde entstellt, aber es ist genug für mich, um die Funktion zu finden, die abgestürzt ist. Ich werde in einer Minute ein Update veröffentlichen. – Mikey