Xcode 8 Beta 3 Verwenden Sie das Legacy Swift-Problem

201

Ich habe ein Objective-C-Projekt in Xcode 8 Beta 3. Seit der Aktualisierung erhalte ich bei jedem Build-Versuch die folgende Fehlermeldung:

"Legacy Swift Language Version verwenden" (SWIFT_VERSION) muss für Ziele, die Swift verwenden, korrekt konfiguriert sein. Verwenden Sie das Menü [Bearbeiten> Konvertieren> In aktuelle Swift-Syntax…], um eine Swift-Version auszuwählen, oder verwenden Sie den Editor für Build-Einstellungen, um die Build-Einstellungen direkt zu konfigurieren.

Hat jemand dies angetroffen? Da es sich um ein Objective-C-Projekt handelt, gibt es keine Build-Einstellung zum Konfigurieren von Swift. Ich habe auch sichergestellt, dass keine der Projektabhängigkeiten oder CocoaPods Swift verwenden. Die einzige Lösung, die ich habe, ist die Verwendung von Beta 2. Irgendwelche Ideen, wie ich dieses Problem beheben könnte?

Ich sollte auch erwähnen, dass ich OSX 10.12 Beta 2 verwende.

Bryan
quelle
Ich habe auch dieses Problem ...
Rockdaswift

Antworten:

364

Wenn Sie CocoaPods verwenden und möchten, dass es jedes Mal automatisch repariert wird, wenn Sie eine ausführen pod install, können Sie diese Zeilen am Ende Ihrer Poddatei hinzufügen:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

BEARBEITEN: Dieses Problem ist jetzt behoben, wenn Sie CocoaPods v1.1.1 oder höher verwenden. Vergessen Sie nicht, die ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESEinstellung aus Ihren Hauptprojektzielen zu entfernen .

Tulleb
quelle
24
Wenn Sie vorerst versuchen, 2.3 in Ihrer Codebasis zu verwenden, verwenden Sie 2.3anstelle der 3.0 großartigen Lösung! Damit wird an die "Use Legacy Swift Language Version"zu No (oder , wenn Sie es ändern 2.3es ist Yes). Der Vorteil dieser Option ist pod installjedoch, dass Sie diese Einstellung jedes Mal automatisch festlegen! Genial. Ich sehe SWIFT_VERSION, dass dies auch bei Obj-C- Projekten der Fall ist . Ich gehe davon aus, dass es keine nachteiligen Auswirkungen gibt.
Herbal7ea
8
Das ist großartig, aber es ist ziemlich beunruhigend, dass ohne einen Ruby-Experten für StackOverflow Tausende und Millionen von Projekten SOL sind. Ich habe die Xcode-Einstellung SWIFT_VERSION in jedem Modul und im Pod-Projekt mithilfe der Build-Einstellungen manuell auf 2,3 geändert, und es hat nicht funktioniert, aber das hat funktioniert. Das heißt versteckte störende Magie. Ich hasse, dass.
BaseZen
5
Ich habe mich buchstäblich angemeldet, um Ihnen Requisiten zu geben
Dnaso
1
Ich habe ein Obj-C-Projekt mit Charts (in Swift), AfNetworking und einigen anderen Obj-C-Pods. Ich habe das obige Skript in meiner Pod-Datei verwendet. Alle Fehler / Warnungen im Zusammenhang mit Swift sind verschwunden, aber jetzt kann mein Projekt das AFNetwoking-Framework nicht finden.
Ibnetariq
1
@ Mr.Bista Mit der genehmigten Lösung stackoverflow.com/a/38597681/2854405 funktioniert es über die Xcode-Einstellungen. Aber Sie müssen es möglicherweise mit jedem einzelnen Pod-Repo tun, das Sie jedes Mal haben, wenn Sie ein machen pod install / update. Diese Lösung macht die Dinge schneller. Sie können Ihre Cocoapods-Version jetzt auch aktualisieren: Dieses Problem sollte ebenfalls behoben werden.
Tulleb
119

Ich habe gerade einen Weg gefunden, das Problem zu beheben.

Gehen Sie zu den Build-Einstellungen des Projekts oder der Bibliothek und setzen Sie das Swift Compiler-Versionsattribut "Legacy Swift Language Version verwenden" von "Nicht angegeben" auf "Ja" oder "NEIN".

Geben Sie hier die Bildbeschreibung ein

rockdaswift
quelle
13
Ich sehe diese Option nicht in meinem Objective-C-Projekt
Bryan
Haben Sie Swift-Projektbibliotheken in Ihrem Obj-C-Projekt?
Rockdaswift
2
Wenn Sie Swift- und Cocoapods verwenden, führt der obige Befehl in Cocoapods dies effektiv aus. Wenn Sie dies nicht jedes Mal ändern müssen, pod installempfehle ich die Verwendung der obigen Antwort von @Tulleb.
Herbal7ea
Jetzt ist mein Fehler Swift Compiler Error in einer Selbstklasse
Eduardo Oliveros
1
Diese Option ist nicht mehr verfügbar.
Hemang
33

Ich habe dieses Problem schon eine Weile ignoriert und in der Zwischenzeit nur an anderen Dingen gearbeitet - ich habe endlich die Lösung für mein Problem gefunden.

Da mein Projekt Objective-C ist, habe ich angenommen, dass einer der von mir verwendeten Pods Swift verwendet. Ich habe jeden Pod überprüft und keiner von ihnen.

Die endgültige Lösung bestand darin, dass mein Core Data-Modell so eingestellt war, dass Code in Swift generiert wird, obwohl ich sie manuell im Menü Datei> Neu> NSManagedObjectSubclass generiert habe. Ich musste es nur auf Objective-C umstellen.

Bildschirmfoto

Bryan
quelle
1
Wie haben Sie das gefunden? Xcode sagt nichts darüber. Du hast mich gerettet.
Ryan
2
In der Tat meine Lösung und mein Retter. Vielen Dank! Blöd, wie Apple Coredata-Modelle automatisch "schnell" macht, wenn die gesamte App objektiv ist ...
Bob de Graaf
18

Dieses Problem ist auch in Xcode-8.1 sichtbar. Wenn wir ein neues Ziel wie Erweiterung oder Widget hinzufügen, wird die Bibliothek eines Drittanbieters mithilfe von Kokopoden in ein neues Ziel integriert. Nach der Pod-Installation . Wir können den gleichen Fehler wie oben sehen.

Ändern Sie die Use Legacy Swift Language-Version in jeder Library Build-Einstellung in

Nein .

Geben Sie hier die Bildbeschreibung ein

Shrawan
quelle
In meinem Fall wurde das Problem durch die Einstellung "Legacy Swift Language Version verwenden" auf "Ja" behoben.
Jayprakash Dubey
Stellen Sie sicher, dass Sie für jede Bibliothek mit diesem Problem entweder Ja oder Nein setzen. In meinem Fall Nein funktioniert
Hanzolo
Das hat bei mir funktioniert. Bitte stellen Sie sicher, dass Sie das gleiche auch für das
Testziel
@zizutg: - Wir müssen alle Ziele überprüfen. Nochmals vielen Dank.
Shrawan
9

Wenn Sie Xcode 8 oder höher verwenden

  1. Gehen Sie zu Build Settings
  2. Suchen Sie nach einer älteren, schnellen Sprachversion
  3. Ja - Swift 2.3
  4. Nein - Swift 3.0 Geben Sie hier die Bildbeschreibung ein
Mohammad Kamran Usmani
quelle
5

Fügen Sie den folgenden Code am Ende der Poddatei hinzu.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end
Sunil Aruru
quelle
4

Ich arbeite an einem Projekt mit gemischtem Objective-C- und Swift-Code. Ich habe zuvor Swift Version 2.3 verwendet und nach dem Upgrade auf Swift 3 konnte ich das Projekt nicht erstellen. Xcode hat sich mit der genannten Fehlermeldung beschwert.

Anscheinend war in meiner Datei project.pbxproj noch eine veraltete Swift-Version angegeben. Es wurde schnell 3.0.1 angegeben:

SWIFT_VERSION = 3.0.1;

Während ich bereits 3.0.2 installiert hatte:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Sooo, ich habe es behoben, indem ich die Swift-Version in der project-pbxproj-Datei geändert habe in:

SWIFT_VERSION = 3.0;

Der Versionsspezifizierer auf Patch-Ebene scheint zu spezifisch zu sein.

Leviathan
quelle
4

In meinem Fall muss ich nur die folgenden Dinge tun

Wählen Sie das Projektziel => Gehen Sie zur Build-Einstellung => Suchen Sie nach „Swift Language Version“ => Geben Sie Value die aktuelle Swift-Version

Das ist alles Es hat mein Problem behoben

Folgen Sie diesem Bild

khusboo suhasini
quelle
4

Ich habe den gleichen Fehler bekommen. Ich habe versucht, nach "Use Legacy Swift Language Version" zu suchen, aber nicht gefunden. Ich benutze Xcode 8.3.3 Nachdem ich zu viel gesurft und herumgearbeitet habe, habe ich diese Lösung gefunden, und das hat bei mir funktioniert.Geben Sie hier die Bildbeschreibung ein

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)
Aklesh Rathaur
quelle
3

Setzen Sie "Use Legacy Swift Language Version" auf "YES", wenn Sie eine alte Version von Swift in Ihrem Projekt oder einen schnellen Drittanbieter verwenden. "Nein", wenn Ihr Projekt auf die aktuelle schnelle Version aktualisiert wurde. Wenn Sie Ihre schnelle Version nicht konfigurieren, muss das Pod Framework dies nach jedem Update und jeder Installation angeben.

Mohammad Arifuzzaman
quelle
2

Ich musste tatsächlich nach "Legacy Swift" suchen, um es von "nicht angegeben" in "Ja" ändern zu können. Als ich einfach zu dem oben beschriebenen Abschnitt gescrollt habe, konnte ich es nicht ändern. Ich hoffe das wird jemandem helfen.

Bergmann
quelle
2

Mein Projekt ist in Swift geschrieben. Ich habe den gleichen Fehler mit fastlane. Was passierte war, dass mein Xcode automatisch aktualisiert wurde, sodass ich mein Projekt auf Swift 3.0 aktualisieren musste. Ich habe eine Menge Fehler. Das Reparieren und Debuggen nahm zu viel Zeit in Anspruch und es hat sich in diesem Moment nicht gelohnt. Deshalb habe ich beschlossen, eine ältere Version von Xcode zu installieren. Mein Code wurde auf 2.3 zurückgesetzt. Dann fastlane betafunktionierte es nicht mehr. Es stellte sich heraus, dass ich das Befehlszeilen-Tool auf 7.3 setzen musste. Geben Sie hier die Bildbeschreibung ein

Yoninja
quelle
1

Ich hatte das gleiche Problem und löste es wie folgt:

In Projekt> Build-Einstellungen:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

Dann in meinem Podfile:

config.build_settings['SWIFT_VERSION'] = '3.0'

Mit diesen drei Einstellungen wurden alle Warnungen entfernt und ich konnte ordnungsgemäß kompilieren.

Der dunkelste und tatsächlich am weitesten fortgeschrittene Kompilierungsprozess war das Ändern der SWIFT_VERSION im Podfile von 3 auf 3.0, wie hier vorgeschlagen .

Hector Partidas
quelle
1

Ab XCode 8 können Sie Swift 2.3 verwenden, obwohl XCode 8 Swift 3.x als Standardversion von Swift verwendet. Um Swift 2.3 zu verwenden, aktivieren Sie einfach das Flag "Legacy Swift Language Version verwenden" in der Build-Einstellung auf "YES". XCode verwendet dann Swift 2.3 für dieses Projektziel.

arunjos007
quelle
1

Bevor Sie komplizierte Lösungen ausprobieren, finden Sie hier eine grundlegende Überprüfung, die Sie durchführen müssen, wenn Sie Cocoapods noch nicht kennen und dieses Problem auftritt.

Möglicherweise müssen Sie:

  • Öffnen Sie Ihr Podfile erneut
  • Stellen Sie sicher, dass die Zeile für die Plattform nicht mit einem '#' auskommentiert ist. Es sollte endlich so aussehen wie:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Speichern Sie Ihre Poddatei, schließen Sie Xcode und führen Sie sie pod installerneut aus
  • Öffnen Sie Ihren project.xcworkspace

Vielleicht ist es nur das.

Wenn nicht, kannst du oben gehen ;-)

Diphaze
quelle
1

Ich hatte das gleiche Problem nach dem Update auf xcode 8.3.2, aber die Option "Legacy Swift Language verwenden" war weg. Dies scheint die Option zu sein, die Sie jetzt ändern können: Swift Lang Version

Verwendet dieses Update mit Alamofire und anderen Bibliotheken und alles funktioniert in Ordnung.

Jorge Irún
quelle
1

Gehen Sie zu Project Build Setting für Project und Target Do unter zwei.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Zum neuesten wechseln Swift 3.

Fehler behoben.

Wenn Ihre Fehlerbehebung behoben ist, gefällt sie Ihnen bitte.

kiran
quelle
1

In Xcode 9 Beta. Gehen Sie zu Projekteinstellungen, Build-Einstellungen und suchen Sie nach Swift Language Version. In Xcode 9 müssen Sie angeben, ob Sie Swift 3.2 oder Swift 4 verwenden.

Niall Kehoe
quelle
Ich hatte ein Projekt in 9.0b, in dem das Setzen des Projekts und des Ziels auf Swift 4 weiterhin den Fehler verursachte. Das Setzen von beiden auf Swift 3.2 entfernte ihn und das Zurücksetzen von beiden auf Swift 4 ist in Ordnung, sodass man alles richtig machen kann und bekomme immer noch einen Fehler.
green_knight
1

Wenn Sie ändern, ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESum NOimmer noch nicht zu arbeiten, liegt es am Xcode-Problem, nicht an Ihrem Problem. Führen Sie die folgenden Schritte aus:

1.Ändern Sie die ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESEigenschaft so, dass sie sich YESauf dem Warnziel befindet

2. Dann wird in der linken Leiste eine Warnung angezeigt, die empfiehlt, auf Swift 3.0 zu wechseln

3. Dann wechseln Sie zurück zu NO. Erstellen Sie das Projekt neu, der xcode erkennt endlich Ihre Änderung an NO!

Problem in diesem Fall gelöst!

Wangdu Lin
quelle