Mit Swift 4.0 kompiliertes Modul kann nicht in Swift 4.0.1 importiert werden

90

Ich habe das Framework jedoch mit demselben Xcode neu kompiliert und es gibt mir immer noch diesen Fehler.

  • Basis-SDK iOS 11.1 für beide
  • Swift Language Version Swift 4.0 für beide
  • Pods / Karthago nicht benutzen

Ich hoffe, jemand könnte es wissen

Simon
quelle
Es scheint, dass Apple diese 10-jährige Verfallsmitteilung für Ziel C überdenken muss: ^) Dies hat mich jetzt bei> 1 Projekt gebissen und bei beiden handelt es sich um binäre Frameworks von Drittanbietern.
Anton Tropashko

Antworten:

136

Aktualisieren:

Für Release-Versionen von Xcode:

Dieser Fehler (und ähnliche Fehler bei Swift 4.1, 4.2 usw.) tritt auf, wenn ein Projekt mit Xcode 9.1, 9.2, 9.3, 9.4, 10 usw. geöffnet wird, das Frameworks verwendet, die mit früheren Xcode-Tools erstellt wurden.

Um das Problem zu beheben, aktualisieren und carthage update --platform iOSerstellen Sie Ihre Frameworks mithilfe von Carthage ( ), Cocoapods ( pod updateoder pod install) oder manuell mit den neuen aktualisierten Xcode-Tools neu. Die Tools sollten automatisch aktualisiert werden, wenn Sie Xcode aktualisieren. Andernfalls können Sie die in der ursprünglichen Antwort unten beschriebenen Schritte ausführen.

Möglicherweise müssen Sie auch Ihr Projekt cmd + shift + kund möglicherweise Ihren Build-Ordner bereinigen cmd + option + shift + k, damit Xcode keine zwischengespeicherten Framework-Builds verwendet.

In einigen Fällen müssen Sie möglicherweise auch Ihren abgeleiteten Datenordner löschen (leicht zu finden, indem Sie zu Xcode-Einstellungen -> Speicherorte -> Abgeleiteter Datenordner gehen ( Danke Stunner ).

Für Beta-Versionen von Xcode:

Siehe die ursprüngliche Antwort unten und befolgen Sie dann die obigen Schritte.

Ursprüngliche Antwort:

Wahrscheinlich sind Ihre xcodebuild-Tools immer noch auf Xcode 9.0 eingestellt, das mit Swift 4.0 erstellt wird und nicht mit Swift 4.0.1 von Xcode 9.1 Beta kompatibel ist.

Checken Sie das Terminal mit dem folgenden Befehl ein:

xcodebuild -version

Oder gehen Sie einfach zu Xcode-Einstellungen -> Standorte und überprüfen / ändern Sie die Befehlszeilen-Tools in Xcode 9.1. Sie sollten dann eingestellt sein.

Zig
quelle
1
Ich habe auch abgeleitete Daten gelöscht und das Projekt bereinigt. Ich weiß nicht, ob es für alle notwendig ist, aber hier schien es zu sein. Vielen Dank
Simon
3
Hallo @Zig. Ein Repo, das ich auf Github (mattdonnelly / swifter) verwende, ist bei Swift 4.0, wurde aber offensichtlich mit XCode 9.0 kompiliert, daher tritt dieses Problem auf. Welche Schritte sind erforderlich, um den Cocoapod eines anderen Benutzers auf Github für XCode 9.1 und höher neu zu kompilieren?
Joseph Beuys 'Mutter
1
Gibt es eine Möglichkeit, ein Befehlszeilenprogramm hinzuzufügen? Ich habe nur Xcode 9.3 in meiner Befehlszeilen-Dropdown-Liste. und ich habe auch dieses Problem
Tara Löwenzahn
1
Einige meiner Hülsen sind nicht bereit für Swift 4.2, also musste ich den Stift Swift Language Versionzu Swift 4für diejenigen. Dann hat es funktioniert.
Skofgar
1
Plus 1 für die Verknüpfung zum Bereinigen des Build-Ordners - wusste ich nicht, wie man es ohne weiteres macht.
Matt
25

Mein Problem war darauf zurückzuführen, dass ein externes Framework für Swift 4.0.2 nicht kompiliert wurde. Ich hatte diese Datei über Karthago hinzugefügt , also läuft:

carthage update --platform iOS

Und dann hat es für mich funktioniert, das Projekt zu cmd + shift + kbereinigen cmd + option + shift + kund den Ordner zu erstellen und den abgeleiteten Datenordner zu löschen (lediglich in den Papierkorb zu verschieben).

Stunner
quelle
2
Dies ist in der Tat im Wesentlichen die Lösung. Das gleiche passierte heute (18. April) aufgrund des neuesten schnellen Updates von Apple! :)
Fattie
cmd + option + shift + k ist der Trick nach der Aktualisierung von Karthago. Vielen Dank!
Leonardo Leite
15

In meinem Fall habe ich die xCode 11 Beta-Version heruntergeladen, um SwiftUI zu testen. Beim Ausführen meines Projekts wurde der Fehler "Mit Swift 5.1 kompiliertes Modul kann vom Swift 5.0.1-Compiler nicht importiert werden: ..." angezeigt .

Um dieses Problem zu beheben. Ich habe das xCode-Befehlszeilentool in ein neues xCode 11-Kommentarzeilentool geändert. Danach können Sie mit SwiftUI ein neues xcode-Projekt erstellen.

Xcode -> Einstellungen -> Speicherort -> XCode-Befehlszeilen-Tool

Xcode Commend Line Tool

Ich hoffe, dies wird jemandem helfen, der mit neuen Freameworks testen möchte :)

Emre Gürses
quelle
9

Installieren Sie von hier aus die Xcode Toolchain einer bestimmten Xcode-Version, die für Sie funktioniert hat .

Eine Xcode-Toolchain enthält eine Kopie des Compilers, der lldb und anderer verwandter Tools, die erforderlich sind, um eine zusammenhängende Entwicklungserfahrung für die Arbeit in einer bestimmten Version von Swift bereitzustellen.

Öffnen Sie die Xcode-Einstellungen, navigieren Sie zu Komponenten> Toolchains und wählen Sie die installierte Swift-Toolchain aus.

Auf diese Weise können Sie die App vorerst kompilieren und ausführen.

Tina
quelle
Nachdem ich 2 Tage lang jede mögliche Lösung mit Karthago-Update, Bootstrap, schnellen Spracheinstellungen usw. gesucht und ausprobiert hatte, fand ich hier die richtige Antwort :)
memresubasi
7

Ich bin auf dieses Problem mit Xcode 10 Beta gestoßen, das Swift 4.2 hinzufügt. Mein Problem hatte nichts mit Karthago oder externen Abhängigkeiten zu tun.

Gehen Sie zu YourTarget > Build Settings > Swift Language Versionfür alle Ihre Xcode-Ziele.

Meine waren alle bereit Swift 4.

Nach dem Hinzufügen einer Erstellungsphase zum Kopieren von Dateien wurde der Fehler angezeigt

: 0: Fehler: Mit Swift 4.1.2 kompiliertes Modul kann vom Swift 4.2-Compiler nicht importiert werden: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Der Befehl MergeSwiftModule ist mit einem Exit-Code ungleich Null fehlgeschlagen

Ich habe dann jedes Ziel Swift Language Versionauf gesetzt Swift 4.2, wodurch der Fehler behoben wurde.

Ich bin mir jedoch nicht sicher, warum der Fehler überhaupt aufgetreten ist, da alle Ziele Swift 4gleichermaßen gültig sein sollten.

pkamb
quelle
1
Ich habe Probleme zu findenBuild Settings
Chandrew
@Chandrew klicke zuerst auf dein Ziel. Antwort aktualisiert.
Pkamb
3

In meinem Fall (Xcode 9.2):

Ich ging zu Xcode Preferences > Locations > Derived Data

Ich habe dann die Daten gelöscht und einen sauberen Build durchgeführt und war in Ordnung.

user3288482
quelle
1

In meinem Fall habe ich CocoaPods mit Plugin verwendet cocoapods-binary, um Bibliotheken für Binärdateien vorab zu erstellen. Nachdem ich Xcode von 10 auf 11 aktualisiert habe, gibt Xcode folgende Fehlermeldung aus:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

Ich behebe es, indem ich das /PodsVerzeichnis entferne und ausführe pod install.

Benjamin Wen
quelle
0

In meinem Fall habe ich das Framework mit der Version neu kompiliert, über die es sich beschwert hat.

Um das Karthago neu zu kompilieren, auszuführen pod updateoder zu aktualisieren (welches auch immer Sie verwenden), und erstellen Sie das Projekt.

Suchen Sie dann im Finder nach dem Framework. Kopieren theFramework.frameworkSie das Projekt in Ihr Projekt und stellen Sie sicher, dass Sie "Elemente bei Bedarf kopieren". Erstellen Sie das Projekt erneut und es sollte funktionieren.

Joseph Francis
quelle