Xcode 9 Swift-Sprachversion (SWIFT_VERSION)


115

Ich habe kürzlich xcode auf Version 9 aktualisiert. Vorher pod updatezeigt mir Xcode 8.x, wann immer ich es verwende, einen Aktualisierungscode, um den Code in Swift 3 zu konvertieren und damit die Fehler zu beheben. Aber jetzt gibt es mir diesen Fehler:

Die Build-Einstellung „Swift Language Version“ (SWIFT_VERSION) muss für Ziele, die Swift verwenden, auf einen unterstützten Wert festgelegt werden. Diese Einstellung kann im Build-Einstellungseditor festgelegt werden.

Für diesen Fehler habe ich es versucht Build Settings > Swift Language Versionund es war Swift 3.2. Da der Update-Aufruf jedoch einige der Pods wie Alamofire neu installiert hat und Xcode 8.x installiert werden muss, um den Code in Swift 3 zu konvertieren, muss ich einen installieren zusätzliche Version mit dem neuesten Xcode? Wenn ja, wie kann ich dann Xcode 8 mit Xcode 9 installieren?


Versuchen Sie, die abgeleiteten Daten zu
bereinigen,

Was ist deine schnelle Version in Xcode 8?
Santhoshkumar

es war 8.3.3, denke ich. es war das letzte vor xcode 9.
Chaudhry Talha

Antworten:


181

Antwort auf Ihre Frage:
Sie können Xcode 8.x vom Apple Download Portal oder Xcode 8.3.3 herunterladen (oder siehe: Wo Sie eine ältere Version von Xcode herunterladen können ), wenn Sie ein Premium-Entwicklerkonto (Apple-ID) haben. Sie können sowohl Xcode 9 als auch Xcode 8.x in einem einzigen (Mac) System installieren und damit arbeiten. (Stellen Sie sicher, dass Sie Command Line Toolsbeide Xcode-Versionen unterstützen, um mit dem Terminal arbeiten zu können (siehe: Installieren des 'Befehlszeilen-Tools' ))


Tipp: So migrieren Sie Ihren Code Xcode 9-kompatible Swift-Versionen (Swift 3.2 oder 4)
Xcode 9 ermöglicht nur die Konvertierung / Migration von Swift 3.0nach Swift 3.2/4.0. Wenn die aktuelle Version der Swift-Sprache Ihres Projekts unter 3.0 liegt, müssen Sie Ihren Code in einer Swift 3-kompatiblen Version mit Xcode 8.x migrieren.

Dies ist eine häufige Fehlermeldung, die Xcode 9 während der Migration anzeigt, wenn die Swift-Sprache unter 3.0 identifiziert wird.

Geben Sie hier die Bildbeschreibung ein


Swift 3.2 wird von Xcode 9 und Xcode 8 unterstützt.

Projekt ► (Wählen Sie Ihr Projektziel aus) ► Build-Einstellungen ► (Geben Sie 'swift' in die Suchleiste ein) Swift Compiler Language ► Swift Language Version ► Klicken Sie auf die Sprachliste, um sie zu öffnen.

Geben Sie hier die Bildbeschreibung ein



Konvertieren Sie Ihren Quellcode mit Xcode 8 von Swift 2.0 in 3.2 und fahren Sie dann mit Xcode 9 (Swift 3.2 oder 4) fort.


Führen Sie die folgenden Schritte aus, um die Migration Ihres Codes zu vereinfachen: (Dies hilft Ihnen bei der Konvertierung in die neueste Version von Swift, die von Ihrem Xcode-Tool unterstützt wird.)

Xcode: Menüs: Bearbeiten ▶ Verdeckt ▶ Auf aktuelle Swift-Syntax

Geben Sie hier die Bildbeschreibung ein


9
Wenn Sie hierher gekommen sind, weil Sie erst jetzt (Dezember 2018) Swift 2-Code abstauben, werden Sie enttäuscht sein zu erfahren, dass Xcode 8 nicht auf Mojave ausgeführt wird.
Bugloaf

53

Bei Objective C-Projekten, die mit Xcode 8 erstellt wurden und jetzt in Xcode 9 geöffnet werden, wird der gleiche Fehler wie in der Frage angegeben angezeigt.

Um dies zu beheben, klicken Sie in den Build-Einstellungen auf die Schaltfläche + und wählen Sie Benutzerdefinierte Einstellungen hinzufügen (siehe Abbildung unten)

Build-Einstellung

Fügen Sie dann in der neu erstellten Zeile SWIFT_VERSIONals Schlüssel und 3.2als Wert wie unten hinzu.

Geben Sie hier die Bildbeschreibung ein

Der Fehler für objektive c-Projekte wird behoben.


2
Das hat mir geholfen. Vielen Dank.
Andreas Kraft

9
Wenn Sie dieses Problem mit CocoaPods haben, müssen Sie diese Build-Einstellung möglicherweise zum Abschnitt pods.xcodeproject hinzufügen.
Stewart Macdonald

1
Dies funktionierte für mich. Ich musste auch die 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' in den Build-Einstellungen auf '$ (geerbt)' ändern
F-1

1
Vielen Dank noch einmal 2 Monate später
Jan

1
Schätzen Sie die Lösung.
user366584

4

Ich habe dies gerade erhalten, nachdem ich ein neues Objective-C-Projekt in Xcode 10 erstellt habe, nachdem ich dem Projekt eine Core Data-Modelldatei hinzugefügt habe.

Ich habe zwei Möglichkeiten gefunden, dies zu beheben:

  1. Der einfache Weg: Öffnen Sie den Dateiinspektor des Kerndatenmodells ( - 1) und ändern Sie die Sprache von Swift in Objective-C

Ändern Sie die Modellsprache des Kerndaten

  1. Längere und gefährlichere Methode

Das Modell enthält eine "Inhalts" -Datei mit dieser Zeile:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

Da drin ist ein sourceLanguage="Swift"Eintrag. Ändern Sie es in sourceLanguage="Objective-C"und der Fehler verschwindet.

Um die "Inhalts" -Datei zu finden, klicken Sie mit der rechten Maustaste auf den .xcdatamodeldin Xcode und führen Sie "Im Finder anzeigen" aus. Klicken Sie mit der rechten Maustaste auf die aktuelle (Finder-) Datei und führen Sie "Paketinhalt anzeigen" aus.

Außerdem: Durch Ändern der Modellsprache wird verhindert, dass Xcode in Swift Unterklassendateien für verwaltete Objekte generiert.


1

Dies kann passieren, wenn Sie einem vorhandenen Projekt Kerndaten hinzugefügt haben.
Überprüfen Sie die Datei :
<Name> / <Name> .xcdatamodeld / <Name> .xcdatamodel / content
.
Diese Datei enthält einen Eintrag "sourceLanguage", der (standardmäßig) auf "Swift" gesetzt wurde. Ändern Sie es in "Objective-C".


0

Ich klicke einfach auf die neueste Schaltfläche für die schnelle Konvertierung und setze die Einstellung für die App-Zielerstellung -> Schnelle Sprachversion: schnell 4.0,

Hoffe das wird helfen.


0

Diese Lösung funktioniert, wenn nichts anderes funktioniert:

Ich habe mehr als eine Woche damit verbracht, das gesamte Projekt zu konvertieren, und bin zu einer Lösung gekommen:

De-Integration der Cocopods-Abhängigkeit vom Projekt und anschließende Konvertierung des Projekts in die neueste schnelle Version.

Gehen Sie im Terminal zum Projektverzeichnis und geben Sie Folgendes ein:

pod deintegrate

Dadurch werden Cocopods aus dem Projekt entfernt und es bleiben keine Spuren von CocoaPods im Projekt zurück. Gleichzeitig werden der xcworkspace und die Poddateien jedoch nicht gelöscht. Es ist in Ordnung, wenn sie anwesend sind.

Jetzt müssen Sie xcodeproj (nicht xcworkspace) öffnen und es werden viele Fehler angezeigt, da Sie in Ihren Hauptprojekten Cocoapods-Abhängigkeitsmethoden aufgerufen haben.

Um diese Fehler zu beseitigen, haben Sie zwei Möglichkeiten:

  1. Kommentieren Sie den gesamten Code aus der Cocoapods-Bibliothek.
  2. Erstellen Sie eine Wrapper-Klasse mit Dummy-Methoden, die der Cocopods-Bibliothek ähneln, und rufen Sie sie dann auf.

Sobald alle Fehler behoben sind, können Sie den Code in die neueste schnelle Version konvertieren.

Wenn Sie seltsame Fehler erhalten, versuchen Sie manchmal, abgeleitete Daten zu bereinigen, und versuchen Sie es erneut.


0

Möglicherweise müssen Sie die Toolchain herunterladen. Dieser Fehler tritt auf, wenn Sie nicht über die richtige Version des Swift-Compilers verfügen.


-3

In meinem Fall verschwanden alle Warnungen, nachdem ich die schnelle Version in den Build-Einstellungen direkt von 2.x auf 4.0 geändert hatte, mit Ausnahme von zwei Warnungen.

Diese Warnung bezog sich auf myprojectnameTestsund myprojectnameUITestsOrdner. Ich habe es nicht bemerkt und dachte, dass es sich um eine direkte Einwanderung von Xcode 7 nach Xcode 9 handelt. Ich dachte, ich könnte dieses Problem nicht lösen und sollte die verpasste Xcode 8-Version installieren.

In meinem Fall habe ich diese Ordner gelöscht und alle Warnungen sind verschwunden, aber Sie können diesen Ordner neu erstellen und enthalten Folgendes:

file > new > target > (uitest or unittest extensions)

Verwenden Sie diesen Artikel zum Erstellen von Testfällen: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


und jemand sagt mir, was ist mein Fehler!?
Iman Kazemayni

2
Ich würde dies nicht persönlich ablehnen, nichts ist falsch an Ihrer Antwort, aber der beste Ort wird sein, die Frage des OP zu kommentieren. Sie können auch einen Blick auf stackoverflow.com/help/how-to-answer werfen, der Ihnen hilft, die richtige Art der Beantwortung von Fragen zu finden.
Grassburburo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.