web-dev-qa-db-ger.com

dyld`__abort_with_payload: Ohne Fehlermeldung

Wenn ich meine App mit XCode starte, habe ich einen Absturz, aber keinen Fehler

Die App hält gerade an diesem Thread an

 enter image description here

Was kann ich tun, um weitere Informationen zu dieser Ausgabe zu erhalten?

46
Kevin ABRIOUX

Wenn Sie benutzerdefinierte Frameworks verwenden, müssen Sie sie in den Abschnitt "Embedded Binaries" einfügen, der sich im Xcode-Projekt unter der Registerkarte "Ziel"/"Allgemein" befindet.

79
mkonovalov

Für mich hat eine einfache Clean und Rebuild das Problem gelöst. Ich hoffe es hilft.

44
KlixxOne

Dies wurde durch das Hinzufügen des Frameworks zur Liste der eingebetteten binären Assets behoben. So sieht das Setup eines Fremd-Frameworks in der Xcode-GUI als Embedded Framework (Xcode 9.2, persönlich mag ich einen visuellen Brotkrumenpfad besser aus ;-)): enter image description here

Hat Apple die Laufzeit absichtlich abgestürzt, um dem Entwickler auf irgendeine Weise das Problem mitzuteilen, dass Sie Nicht-Apple-Frameworks nicht als einfach verknüpfte Frameworks in der iOS-Entwicklung verwenden können? Es wäre besser, wenn es als Build-Fehler auftauchen würde, denke ich ... mit einem Button mit der Aufschrift "Move it!"

Die Verwendung von Embedded Binaries verhindert, dass Endbenutzer das Framework unabhängig von Ihrer App hinzufügen müssen (oder dass Sie ein Installationsprogramm verwenden). Im Fall des iPhone (iOS) ist das unmöglich, aber unter macOS ist es möglich, kann aber schnell unübersichtlich werden. 

Für den Endbenutzer ist es viel angenehmer, eine App einfach per Drag & Drop auf macOS zu installieren, wodurch Embedded zum Vorteil wird. Beim Einbetten werden auch die klassischen "DLL-Konflikte" vermieden, wenn externe Versionen Ihres Frameworks verwaltet werden müssen. (Speicherplatz ist billig, die Zeit meines Kunden ist kostbar).

12
William Cerniuk

Ich habe den Fehler gerade in meinem Projekt behoben!
Wenn Sie das Swift-Framework im Object-C-Projekt verwenden, sollten Sie die Build-Einstellungen ändern.
Option "Swift Standard Libraries" immer in YES einbetten. so was:  enter image description here

hoffe das war nützlich für dich.

9
Hongbo Liu

Endlich gelöst! 

Was für mich funktionierte, war, das Framework "optional" anstatt "erforderlich" zu machen.

Hoffentlich hilft das!

7
Eran Talmor

Das Deaktivieren von "Guard Malloc" in der Diagnose funktionierte für mich.  See Image for settings

4
infiniteLoop

Ich habe einen Fehler mit derselben Signatur festgestellt (mein Projekt war in Obj-C) und stellte fest, dass ich vergessen hatte, mich mit dem entsprechenden Framework zu verbinden. Die Fehlermeldung im Debug-Protokoll, die zum Auffinden des Fehlers führte, lautete: 

dyld: Symbol nicht gefunden: _OBJC_CLASS _ $ _ SFSafariViewController

Für meinen spezifischen Fehler wurde das Problem durch das Hinzufügen von SafariServices.framework unter Targets -> Build Phases -> "Link Binary With Libraries" behoben. Sie haben zwar wahrscheinlich nicht den gleichen spezifischen Fehler und die gleiche Auflösung, das Überprüfen des Debug-Protokolls auf Hinweise ist jedoch hilfreich.

3
user1825506

1) Fahren Sie mit der Ausführung fort, um zu sehen, ob eine Nachricht im Debugger angezeigt wird, z. B. "MyFramework.framework" nicht gefunden wurde. Wenn dies der Fall ist, folgen Sie dieser Diskussion: OS X Framework Library wurde nicht geladen: "Image not found" .__ Diese Antwort hat für mich funktioniert: https://stackoverflow.com/a/44796734/4060763

2) Stellen Sie sicher, dass Sie Ihre Binärdateien über den Abschnitt "Binärdateien einbetten" hinzugefügt haben.

3) Stellen Sie sicher, dass Sie das Signieren von Frameworks im Abschnitt Buildphase aktiviert haben.

4) Stellen Sie sicher, dass die eingebetteten Frameworks keine Symlinks sind.

5) Sie können die verknüpften Frameworks optional machen, anstatt sie in der Phase "Binär mit Bibliotheken verknüpfen" erforderlich zu machen. Dadurch wird iOS angewiesen, während des Starts nicht nach diesen Frameworks zu suchen. Trotzdem müssen Sie die Fehler beheben, um diese Frameworks zu verwenden!

6) Prüfen Sie, ob alle info.plist-Einträge korrekt sind. In meinem Fall habe ich eine Mac-Datei "info.plist" für iOS verwendet. Es wurde nach einer XIB-Datei gesucht, die im iOS-Projekt nicht vorhanden war.

7) Reinigen und bauen Sie nach einer solchen Änderung. Dies ist erforderlich, da xcode diese Dateien nicht kopiert/ändert, wenn sie bereits vorhanden sind.

8) Entfernen Sie die App vom iPad und installieren Sie sie. Grund wie 7.

3
coolVick

Um die ursprüngliche Frage zu beantworten: "Was kann ich tun, um weitere Informationen zum Problem zu haben?", Dieser Apple Forumsthread gibt einen sehr einfachen Tipp: einfach führen Sie Ihre abstürzende App außerhalb von XCode aus (dh stoppen Sie es von XCode und führen Sie ihn dann manuell auf Ihrem Gerät aus. Daraufhin wird ein Absturzprotokoll erstellt, das weitere Informationen zu den Ereignissen enthält. Sie können dieses Protokoll dann im Menü XCode-Fenster/Geräte und Simulatoren -> Geräteprotokolle anzeigen anzeigen.

2
fred

Ich hatte gerade die Anwendung der "Privacy - Camera Usage Description" in der info.plist verpasst.

Ich weiß nicht, ob diese Info anderen hilft. 

2
Linus Karlsson

Ich hatte ein ähnliches Problem, das durch das Fehlen der Berechtigungsspezifikation in plist (so komisch wie es ist ..) behoben wurde.

Ich habe versucht, AVCaptureDevice zu verwenden, und es stürzte nur beim Starten ab (meine App war sehr minimal)

Das Hinzufügen von -Privacy - Camera Usage Descriptionzu info.plist hat es für mich gelöst.

1
Rock_Artist

Wenn Sie ein in Swift geschriebenes Framework in einer Objective-C-Anwendung verwenden, müssen Sie die Swift-Toolchain in die App aufnehmen, die das Framework verwendet.

Die Methode, die ich dazu gefunden habe, ist das Erstellen einer Dummy-Swift-Datei in der App, sodass XCode Swift erkennt und dem Projekt entsprechend hinzufügt. Sie können dann die Dummy-Datei löschen.

Ich würde es lieben, wenn jemand eine bessere Möglichkeit hätte, Swift explizit zu einem Objective-c-Projekt hinzuzufügen, ohne eine Swift-Datei hinzuzufügen.

1
markw

Ich finde den richtigen Weg, um das Problem zu lösen.

Stellen Sie sicher, dass der AppleWWDRCA.cer System-Standardmodus eingestellt ist. Dann wird es funktionieren:

enter image description here

1
Leo

Ich stand vor demselben Problem. Die Einstellung "Immer Swift Standard Libraries einbetten" auf "Ja" in den Build-Einstellungen meines Ziels hat für mich funktioniert.

0
Arpit Panda

Manchmal passiert es, wenn Sie System-Frameworks verwenden, auf die nur von einer späteren iOS-Version als Ihrer Zielversion zugegriffen werden kann. Es kann behoben werden, indem das verknüpfte Framework als optional markiert wird.

Beispielsweise wird ein auf iOS 11 ausgerichtetes Projekt, das AuthenticationServices für iOS 12 AutoFill-Funktion verwendet, unter iOS 11 zum Absturz gebracht.

0
LilKitty

Ich hatte gerade das gleiche Problem und der Grund dafür lag darin, dass ich meine Entwicklerzertifikate widerrufen und mit Xcode 10 neue Zertifikate nach einem neuen MacOS Mojave-Update erstellt hatte (für einige löschte es alle Anmeldeinformationen und veraltete einige Schlüsselbundzertifikate). 

Alles, was ich tun musste, war, die installierten Apps von meinem Gerät zu entfernen und sie erneut über Xcode auszuführen, damit das richtige neue Bereitstellungsprofil auf meinem Gerät installiert werden kann :)

0
xscoder

Ich hatte diese Situation nach dem Update von Xcode auf v10.2.1 und Swift auf v5.0 Wenn Sie Carthage + RxSwift verwenden, verwendet der neue RxSwift RxRelay.framework. Sie sollten zu Ihrem/Carthage/Build-Verzeichnis gehen, um dieses Framework zu finden und es in Ihr Projekt zu ziehen. Vergiss nicht, es auch deinem carthage copy-frameworks Skript hinzuzufügen: $(SRCROOT)/Carthage/Build/iOS/RxRelay.framework

Gelöst dank: https://stackoverflow.com/a/52550148/2493555

0
milczi

wenn Sie das Carthage-Build-Framework verwenden, müssen Sie es nach dem Ziehen in Ihr Projekt zu General/Embedded Binaries hinzufügen.

0
responser

Ich habe meinen Fehler in meinem Projekt behoben.
1. Überprüfen Sie die anderen Threads, wenn ein Fehler aufgetreten ist. Ich habe festgestellt, dass mein Fehler die Kamera betrifft.

enter image description here

  1. Fügen Sie die Camera Privacy in der Datei "Info.plist" hinzu.
    1) Öffnen Sie die Datei info.plist.
    2) Fügen Sie einen neuen Schlüssel mit dem Namen "Privacy - Camera Usage Description" hinzu und geben Sie eine Zeichenfolge ein, in der beschrieben wird, warum die App eine Kamera benötigt.

enter image description here

0
WangYang