webentwicklung-frage-antwort-db.com.de

Warum verlinken Linker statische Bibliotheken mit Fehlern? iOS

Ich habe ein Problem mit der Verknüpfung meines gemischten Sprachrahmens mit einem Projekt.

1) Ich erstelle ein Framework mit Swift- und Objective-C-Klassen.

2) Die Hauptlogik wurde in einer Swift-Datei gespeichert. Zum Beispiel die Klasse mit der Methode, die NSLog aufruft ("Swift log was called").

3) Die Objective-C-Datei hat eine Klasse mit einer Methode, in der ich eine Instanz der Swift-Klasse erstelle und die Swift-Log-Methode aufrufe.

4) Ich verbinde dieses Framework mit meinem Objective-C-Projekt. Ich kann alles aufrufen, was ich in diesem Projekt benötige, aber wenn ich dieses Projekt erstellen möchte, erhalte ich eine Fehlermeldung. "linker command failed with exit code 1 (use -v to see invocation)"

Und Warnungen:

ld: warning: Could not find auto-linked library 'swiftFoundation'

ld: warning: Could not find auto-linked library 'swiftDarwin'

ld: warning: Could not find auto-linked library 'swiftCoreFoundation'

ld: warning: Could not find auto-linked library 'swiftCore'

ld: warning: Could not find auto-linked library 'swiftCoreGraphics'

ld: warning: Could not find auto-linked library 'swiftObjectiveC'

ld: warning: Could not find auto-linked library 'swiftDispatch'

ld: warning: Could not find auto-linked library 'swiftSwiftOnoneSupport'

Ich sah die Lösung auch darin, leere Swift-Dateien zu importieren, aber es war notwendig, ein Projekt ohne Papierkorb zu erstellen.

12

Anscheinend müssen Sie für reine Objective-c-Projekte diese $ (TOOLCHAIN_DIR)/usr/lib/Swift/$ (PLATFORM_NAME) zu den Bibliotheksuchpfaden Ihres Ziels hinzufügen. Dies funktionierte für mich, als ich eine in Swift geschriebene Bibliothek in ein Projekt in Objective-c aufgenommen hatte

22
Nathan

Für XCode 11 Beta 4 sollten die Bibliothekssuchpfade sein:

$(TOOLCHAIN_DIR)/usr/lib/Swift-5.0/$(PLATFORM_NAME)
9

In meinem Fall war es ein React-Native-Projekt, nachdem ich eine Swift Pods-Bibliothek hinzugefügt habe. Vielleicht kann nur Schritt 2 funktionieren:

  1. Hinzufügen einer neuen Swift Datei und eines Brigde Headers:

1) File -> New -> File<code>File -> New -> File</code>

2) Wählen Sie Swift FileSelect <code>Swift File</code>

3) Bestätigen Sie Create Bridging Headerenter image description here

  1. Gehe zu Build Settings und set Always Embed Swift Standard Libraries bis YESAlways Embed Swift Standard Libraries
7
AlVelig

Versuchen Sie diese Problemumgehung https://stackoverflow.com/a/50495316/1658268

Grundsätzlich fügen Sie einfach eine Dummy-Swift-Datei in Ihr Projekt ein und führen Sie Ihren Build erneut aus.

3
SudoPlz

Ich habe die gleichen Fehler erhalten, wenn ich versehentlich ein Projekt mit einem Swift 5.0-Snapshot kompilierte, der in den Xcode-Voreinstellungen »Komponenten» Toolchain konfiguriert ist.

2
Ralf Ebert
  1. Öffnen Sie ios/YourAppName.xcodeproj in Xcode
  2. Klicken Sie im Projektnavigator links mit der rechten Maustaste auf Ihren App-Namen, und klicken Sie auf Neue Datei.
  3. Erstellen Sie eine einzelne leere Swift-Datei für das Projekt (stellen Sie sicher, dass Ihr Ziel für den Anwendungsnamen beim Hinzufügen ausgewählt ist.)
  4. wenn Sie von Xcode gefragt werden, drücken Sie Create Bridging Header, und entfernen Sie die Swift-Datei nicht. Anschließend führen Sie den Build erneut aus.

Dies sollte das Problem beheben

2
Hussam Kurd

Hat jemand in der Lage, dies zu lösen? Ich arbeite mit einem reinen Swift-Projekt.

Keiner der folgenden Ansätze hat funktioniert:

  1. Das Hinzufügen einer leeren Datei funktioniert nicht (ich werde nicht einmal nach einem Überbrückungsheader gefragt)

  2. Das Ändern von Always Embed Swift Standard Libraries In Yes hat nicht funktioniert

  3. Hinzufügen von $(TOOLCHAIN_DIR)/usr/lib/Swift/$(PLATFORM_NAME) oder $(TOOLCHAIN_DIR)/usr/lib/Swift-5.0/$(PLATFORM_NAME) hat nicht funktioniert Warum passiert das überhaupt? Ich arbeite mit Xcode 10.3 und iOS 12.4.1. Funktioniert gut mit einem Simulator, aber nicht mit einem tatsächlichen iPhone oder iPad

P.S. Ich würde mich sehr freuen, wenn der Moderator meine Nachricht nicht ohne Erklärung entfernen könnte. Zeigen Sie mir zumindest in die richtige Richtung, anstatt es einfach zu entfernen.

0
user12049320

Falls dieser Fehler bei der Verwendung von Xcode 11 Beta 4 in Kombination mit Carthage auftritt, lesen Sie diese Problemumgehung:

https://github.com/Carthage/Carthage/issues/2825

Grundsätzlich besteht es darin, eine xcconfig mit den Fixes zu erstellen und diese in jeden Build einzufügen.

0
snod