Mit Swift 3.0 kompiliertes Modul kann nicht in Swift 3.0.1 importiert werden

87

Ich habe Xcode auf 8.1 GM aktualisiert und erhalte jetzt den folgenden Fehler für SwiftyJSON. Andere importierte Frameworks scheinen zu funktionieren. Gibt es eine Möglichkeit, dies in Swift 3 zu erzwingen, bis SwiftyJSON das Framework aktualisiert? Ich habe Karthago verwendet, um Frameworks zu importieren / zu aktualisieren. Ich habe auch versucht, das Ein- Use Legacy Swift language versionund Ausschalten ohne Erfolg zu ändern .

Mit Swift 3.0 kompilierte Module können nicht in Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule importiert werden

HH887
quelle

Antworten:

171

SwiftyJson wird von Karthago vorkompiliert heruntergeladen. Der vorkompilierte Download erfolgt mit Swift Version 3.0. Der Compiler beschwert sich daher, dass die Version nicht korrekt ist. Verwenden Sie den folgenden Befehl:

carthage update --platform iOS --no-use-binaries

SwiftyJson (und alle anderen Frameworks in Karthago) werden lokal mit der lokalen Version von Swift (3.0.1) kompiliert und der Compiler wird sich nicht mehr beschweren.

zirinisp
quelle
7
Sie haben mir wahrscheinlich eine Stunde Suche erspart. Danke dir.
DJV
24
Bitte schön. Um ehrlich zu sein, sollte Karthago etwas intelligenter sein und die schnelle Versionsnummer überprüfen.
Zirinisp
Irgendwelche anderen Ideen? Weil dies bei mir nicht funktioniert hat, obwohl ich in meinem Fall Probleme mit Unbox
Xernox
Das war ausgezeichnet. Gibt es eine Möglichkeit, dies in das einzubetten, Cartfilesodass ich einfach tippen kann, carthage updateohne dass andere Entwickler die zusätzlichen Flags kennen / sich darum kümmern müssen?
Craig Otis
1
Ich hatte einen ähnlichen Fehler mit PromiseKit 4.0 nach dem Update von XCode 8.0 auf XCode 8.1. Ich hatte einen EXC_BAD_ACCESS-Fehler. Am Ende musste PromiseKit mit Swift 3.0.1 neu kompiliert werden und das Problem wurde gelöst.
Ricardo Anjos
21

Entfernen Sie den App-Chache aus DerivedData und erstellen Sie ihn neu. Der Fehler kann behoben werden.

Der DerivedData-Pfad lautet wie folgt:

~/Library/Developer/Xcode/DerivedData/
Ich-Chou
quelle
Ich habe für mich gearbeitet, diesen Ordner entfernt, den Pod-Ordner entfernt und "pod install" verwendet. Und behoben.
Jose Pose S
Hallo. Diese Lösung hat bei mir funktioniert. Können Sie im Detail erklären, was passiert, wenn wir abgeleitete Daten löschen? Wie geht der Fehler weg?
iPhoneDeveloper
Hat auch für mich gearbeitet, danke.
Hasya
10

Stellen Sie sicher, dass Sie das neue XCode 8.1 GM-Paket in Ihrem Anwendungsordner abgelegt haben. Dieses Problem trat auf, als einer von uns Karthago ausführte, um seine Abhängigkeiten zu aktualisieren, aber die alte XCode 8.0-Anwendung im Anwendungsordner nicht ersetzt hatte (8.1 GM wurde vom Desktop ausgeführt).

Sie wollen sicherstellen, dass , wenn Sie die folgende im Terminal auszuführen: xcrun swift -versiondass es zurückgibt Apple Swift version 3.0.1.

Clay Garrett
quelle
Das hat bei mir funktioniert, danke! Auch der Befehl, der im Terminal funktionierte, war xcrun swift -version
HH887
2
Immer noch das gleiche Problem. Alle anderen Vorschläge
harsch_v
2
Dieser Befehl funktionierte für mich: Karthago Update - Plattform iOS
no
2
Ich habe es getan carthage update --platform iOS --no-use-binariesund es funktioniert immer noch nicht. Ich habe mein Projekt bereinigt und Xcode neu gestartet und erhalte immer noch den Fehler. Kann ich noch etwas ausprobieren?
Clifton Labrum
1
Das habe ich versucht. Es kehrt zurückApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum
9

Das Aktualisieren der Standardeinstellung Xcodeauf eine neue am Terminal hat bei mir funktioniert.

Schritt 1: Verwenden Sie den folgenden Befehl, um die Xcode-Version auf dem Terminal auf den neuesten Stand zu bringen. Ref

sudo xcode-select -switch <path/to/>Xcode.app

Schritt 2: Versuchen Sie nun den Befehl carthage update

carthage update --platform iOS
Mohammad Zaid Pathan
quelle
9

Nur um die neuesten Updates zu geben:

Carthage hat am 27. Februar 2017 die Version 0.20 veröffentlicht .

Karthago verwendet jetzt nur die Pre-Build-Binärdatei, wenn die verfügbare Pre-Build-Binärdatei kompatibel ist .

Das heißt, Sie müssen nicht mehr verwenden: --no-use-binariesum inkompatibles Pre-Build-Framework zu vermeiden.

Stellen Sie also sicher, dass Sie eine Karthago-Version haben, die größer ist als0.20 und tun Sie einfach Folgendes:

carthage update --platform iOS
Kanekin
quelle
XCode 8.3.3 Nach dem Update von Carthage auf die Version 0.25 und nachdem ich es unten getan habe, funktionierte es für mich das Update von Carthage
Plattform
@ anoop4real Ohne geht es bei dir nicht --no-use-binaries? Karthago sollte erkennen können, ob die Binärdatei mit Ihrer Compilerversion kompatibel ist. Wenn es nicht kompatibel ist, soll es die heruntergeladene Binärdatei automatisch löschen und das Framework lokal erstellen.
Kanekin
5

Genau wie @zirinisp sagte:

  1. Sie können den folgenden Befehl verwenden:carthage update --platform iOS --no-use-binaries
  2. Verwenden Sie den folgenden Befehl: xcrun swift -versionum die Swift-Version anzuzeigen
  3. Gehen Sie folgendermaßen vor: Xcode->preferences->locationsUm die abgeleiteten Daten zu löschen und Daten zu archivieren, müssen Sie die Befehlszeilentools auf " Xcode 8.1" ändern.
  4. Mit dem folgenden Befehl: xcrun swift -versionkönnen Sie sehen, dass die schnelle Version 3.0.1 ist
  5. einstellen Use Legacy Swift Language Version = NO

ich hoffe es hilft dir

kris
quelle
1
  1. Verschieben Sie die Beta / GM-Version des Ordners Xcode in den Ordner / Applications und nennen Sie sie Xcode-Beta

  2. Überprüfen Sie die Ausgabe von:

    xcrun swift --version

Wenn Sie diesen Befehl im Terminal ausführen, sollte seine Ausgabe mit der schnellen Version übereinstimmen, die die App kompilieren soll, da Karthago die Ausgabe dieses Befehls verwendet, um die lokale Swift-Version zu bestimmen.

  1. Aktualisieren Sie die Xcode-Version auf dem Terminal auf den neuesten Stand, indem Sie den folgenden Befehl ausführen:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Erstellen Sie die Bibliotheken für iOS und verhindern Sie, dass Karthago vorhandene (noch nicht kompatible) vorkompilierte Binärdateien herunterlädt, indem Sie den folgenden Befehl ausführen:

    carthage update --platform iOS --no-use-binaries

  3. Reinigen und bauen

Tul
quelle
0

Ich hatte genau das gleiche Problem mit der Bibliothek XCTest_Gherkin, was für mich funktionierte, war:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Ich hoffe es hilft. Ich benutze Cocoapods.

Alan Steiman
quelle
0

Stellen Sie in den Xcode- Build-Einstellungen sicher, dass Ihre Framework-Suchpfade den entsprechenden Carthage Build-Ordner enthalten:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
John Cromie
quelle