Mit Swift 5.1 kompiliertes Modul kann vom Swift 5.1.2-Compiler nicht importiert werden

91

Ich habe einen Rahmen (in diesem Fall seinen RxSwift) , die ich zusammengestellt habe mit Xcode 11.0 in den traditionellen RxSwift.frameworkStil - Paket

Dies importierte gut in Xcode 11.0 und auch 11.1 hatte nie Probleme damit

Heute, nach der Veröffentlichung von Xcode 11.2 durch Apple, habe ich ein Upgrade durchgeführt und es wird der folgende Fehler angezeigt:

Mit Swift 5.1 kompiliertes Modul kann vom Swift 5.1.2-Compiler nicht importiert werden

Ich bin es gewohnt, dass Compiler nicht übereinstimmen, und ich bin mir bewusst, dass ich RxSwift einfach mit Xcode 11.2 neu kompilieren und weitermachen kann, aber die Hauptfunktion von Swift 5.1 war die Modulstabilität .

Ich hatte den Eindruck, dass Frameworks jetzt, da wir über Modulstabilität verfügen, nicht mehr bei jeder neuen Xcode-Version neu kompiliert werden müssen, aber dies ist eindeutig nicht der Fall.

Wenn jemand erklären kann, was hier los ist, würde ich es sehr schätzen. Zeigt Xcode 11.2 einen Fehler? oder musste ich irgendwie sagen, dass ich Modulstabilität wollte, als ich ursprünglich mit Xcode 11.0 kompiliert habe?

Orion Edwards
quelle
Für mich funktionierte Toolchain mit älterer schneller Version: stackoverflow.com/a/43142147/5846135
Zeero0

Antworten:

108

OK, es stellt sich heraus, wenn Sie das WWDC-Video ansehen, erklären sie es: https://developer.apple.com/videos/play/wwdc2019/416/

Sie müssen die Option " Bibliotheken für die Verteilung erstellen" in den Build-Einstellungen Ihres Frameworks auf " Ja" setzen. Andernfalls generiert der schnelle Compiler nicht die erforderlichen .swiftinterfaceDateien, die der Schlüssel für zukünftige Compiler sind, die Ihre alte Bibliothek laden können.

Dies endet in Ihrer project.pbxproj-Datei als:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Nach dem Setzen dieses Flags konnte ein mit Xcode 11.0 (swift 5.1) kompiliertes Framework von Xcode 11.2 (swift 5.1.2) verwendet werden und alles scheint korrekt zu funktionieren.

Hoffentlich dient diese Frage / Antwort als nützliche Referenz für alle, die nicht alle WWDC-Videos gesehen haben

Wenn der Fehler weiterhin besteht, gehen Sie zu Produkt > Build-Ordner bereinigen und erneut erstellen .

Orion Edwards
quelle
1
Genial! Hoffen wir nun, dass alle Framework-Entwickler von Drittanbietern dies entdecken - ha ha :)
Mihai Fratu
25
Das hilft in meinem Fall nicht. Ich habe es auf "JA" gesetzt, aber ich erhalte immer noch den Fehler. Irgendwelche Ideen?
DavidOhara
3
Ich arbeite mit Karthago und 10 Frameworks ... ish. Ist es carthageklug genug, dies aus meiner .pbxproj- Datei zu übernehmen, oder müssen, wie @MihaiFratu oben sagt, alle Framework-Entwickler von Drittanbietern dies selbst in ihren Framework-Projekten festlegen?
Nteissler
9
@davidOhara in meinem Fall hatte dies mit diesem bekannten Problem in Xcode 11.2 zu tun: Wenn ein Modul mit BUILD_LIBRARIES_FOR_DISTRIBUTION erstellt wurde und einen öffentlichen Typ mit demselben Namen wie das Modul selbst enthält, können Clients das Modul nicht importieren. (19481048) (FB5863238) in den Versionshinweisen zu Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino
2
@davidOhara Leider habe ich keine Problemumgehung gefunden. Für uns ist das Umbenennen der Klasse ebenfalls nicht möglich, da dies die Hauptklasse unseres Frameworks ist und den Code unseres Kunden beschädigen würde. Wenn ich das Framework mit Xcode 11.2 erstelle, wird es unter Xcode 11.2 kompiliert, aber nicht unter 11.1 oder früher. Die heutige GM-Version von Xcode 11.2.1 hat das Problem nicht behoben. Hier ist das Ticket für den Swift Issue Tracker, falls Sie es im Auge behalten möchten: bugs.swift.org/browse/SR-11704 Es ist auch ein Radar angeschlossen.
Richard Chirino
2

Ich hatte den gleichen Fehler beim Importieren von Bibliotheken von Drittanbietern. Ich habe es mithilfe von Toolchains in Xcode behoben und die Veröffentlichung vom 19. September 2019 von hier https://swift.org/download/#releases übernommen . Danach musste ich meine Bibliotheken erneut importieren und es funktionierte.

Sergio
quelle
Dies war die einfachste Lösung dank einer Menge
Krishan Patel
Ich habe ein Problem mit dem Framework. Das mit Swift 5.1.2 kompilierte Modul kann nicht mit Swift 5.2.2 importiert werden. Wie können wir dieses Problem lösen?
Kishan Suthar
0

Sie können Karthago verwenden, um das RxSwift-Framework hinzuzufügen.

Grundsätzlich bietet Ihnen Karthago ein ähnliches traditionelles RxSwift.framework-Stilpaket .

Dann versuchen Sie es carthage update --no-use-binaries.

iMoeNya
quelle
Downvote, weil Sie mit Karthago gerade Ihre Bibliothek auf dem neuen Compiler neu erstellen. Die Frage bezieht sich explizit auf das Laden von Binärbibliotheken, die vom vorherigen Compiler erstellt wurden
Orion Edwards,
0

Dadurch verschwand mein Compilerfehler.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
Rinni
quelle
brew bundle? was tut es?
Skywinder
Downvote, weil Sie mit Karthago Ihre Bibliothek auf dem neuen Compiler neu erstellen. Die Frage bezieht sich explizit auf das Laden von Binärbibliotheken, die vom vorherigen Compiler erstellt wurden
Orion Edwards,