Xcode 9 Swift Language Version (SWIFT_VERSION)


115

Ho recentemente aggiornato xcode alla versione 9. Prima in Xcode 8.x ogni volta che lo uso pod updatemi mostra un codice di aggiornamento per convertire il codice in Swift 3 e così facendo risolvono gli errori. Ma ora mi sta dando questo errore:

L'impostazione di build "Swift Language Version" (SWIFT_VERSION) deve essere impostata su un valore supportato per le destinazioni che utilizzano Swift. Questa impostazione può essere impostata nell'editor delle impostazioni di build.

Per questo errore ho provato Build Settings > Swift Language Versioned era Swift 3.2 Ma poiché la chiamata di aggiornamento ha reinstallato alcuni dei pod come Alamofire e dice di installare Xcode 8.x per convertire il codice in Swift 3, quindi devo installare un versione aggiuntiva con l'ultimo Xcode? Se sì, come posso installare Xcode 8 con Xcode 9?


prova a pulire i dati derivati ​​e crea il progetto su Xcode 9.
iAviator

Qual è la tua versione rapida in Xcode 8 ??
santhoshkumar

era 8.3.3 credo. era l'ultimo prima di xcode 9.
Chaudhry Talha

Risposte:


181

Risposta alla tua domanda:
puoi scaricare Xcode 8.x dal portale di download di Apple o scaricare Xcode 8.3.3 (o vedere: Dove scaricare la versione precedente di Xcode ), se hai un account sviluppatore premium (ID Apple). Puoi installare e lavorare con Xcode 9 e Xcode 8.x in un unico sistema (mac). (Assicurati di Command Line Toolssupportare entrambe le versioni di Xcode, per lavorare con il terminale (vedi: Come installare 'Command Line Tool' ))


Suggerimento: come migrare il codice Versioni Swift compatibili con Xcode 9 (Swift 3.2 o 4)
Xcode 9 consente la conversione / migrazione solo da Swift 3.0a Swift 3.2/4.0. Quindi, se la versione corrente della lingua Swift del tuo progetto è inferiore alla 3.0, devi migrare il codice nella versione compatibile con Swift 3 utilizzando Xcode 8.x.

Questo è un messaggio di errore comune che Xcode 9 mostra se identifica la lingua Swift inferiore a 3.0, durante la migrazione.

inserisci qui la descrizione dell'immagine


Swift 3.2 è supportato da Xcode 9 e Xcode 8 entrambi.

Progetto ► (Seleziona la destinazione del tuo progetto) ► Impostazioni build ► (Digita 'swift' nella barra di ricerca) Lingua di Swift Compiler ► Versione in lingua Swift ► Fai clic sull'elenco delle lingue per aprirlo.

inserisci qui la descrizione dell'immagine



Converti il ​​tuo codice sorgente da Swift 2.0 a 3.2 usando Xcode 8 e poi continua con Xcode 9 (Swift 3.2 o 4).


Per una migrazione più semplice del codice, segui questi passaggi: (ti aiuterà a convertire nell'ultima versione di swift supportata dal tuo Xcode Tool)

Xcode: Menu: Modifica ▶ Covert ▶ Alla sintassi Swift corrente

inserisci qui la descrizione dell'immagine


9
Se sei venuto qui perché stai solo ora (dicembre 2018) rispolverando un po 'di codice Swift 2, rimarrai deluso nell'apprendere che Xcode 8 non funziona su Mojave.
bugloaf

53

Per i progetti Objective C creati utilizzando Xcode 8 e ora aperti in Xcode 9, mostra lo stesso errore menzionato nella domanda.

Per risolvere il problema, premere il pulsante + in Impostazioni build e selezionare Aggiungi impostazione definita dall'utente come mostrato nell'immagine sottostante

costruire l'impostazione

Quindi nella nuova riga creata aggiungi SWIFT_VERSIONcome chiave e 3.2come valore come di seguito.

inserisci qui la descrizione dell'immagine

Risolverà l'errore per i progetti dell'obiettivo c.


2
Questo mi ha aiutato. Grazie.
Andreas Kraft

9
Se riscontri questo problema con CocoaPods, potresti dover aggiungere questa impostazione di build alla sezione pods.xcodeproject.
Stewart Macdonald

1
Questo ha funzionato per me, ho anche dovuto modificare "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES" nelle impostazioni di build in "$ (inherited)"
F-1

1
Grazie ancora 2 mesi dopo
gennaio

1
Apprezza la soluzione.
user366584

4

L'ho appena ricevuto dopo aver creato un nuovo progetto Objective-C in Xcode 10, dopo aver aggiunto un file di modello Core Data al progetto.

Ho trovato due modi per risolvere questo problema:

  1. Il modo più semplice: apri File Inspector ( - 1) del modello Core Data e cambia la lingua da Swift a Objective-C

Cambia il linguaggio del modello Core Data

  1. Metodo più lungo e più pericoloso

Il modello contiene un file "contenuto" con questa riga:

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

Dentro c'è una sourceLanguage="Swift"voce. Modificalo in sourceLanguage="Objective-C"e l'errore scompare.

Per trovare il file "contenuto", fare clic con il pulsante destro del mouse su .xcdatamodeldXcode e fare "Mostra nel Finder". Fare clic con il pulsante destro del mouse sul file effettivo (Finder) e fare "Mostra contenuto pacchetto"

Inoltre: la modifica della lingua del modello impedirà a Xcode di generare file di sottoclassi di oggetti gestiti in Swift.


1

Questo può accadere quando hai aggiunto Core Data a un progetto esistente.
Controllare:
<Name> / <Name> .xcdatamodeld / <Name> .xcdatamodel /
file di contenuto .
Questo file contiene una voce "sourceLanguage" che (per impostazione predefinita) potrebbe essere stata impostata su "Swift". Cambialo in "Objective-C".


0

Faccio semplicemente clic sull'ultimo pulsante di conversione rapida e imposto l'impostazione build di destinazione dell'app-> Versione lingua Swift: swift 4.0,

Spero che questo ti aiuti.


0

Questa soluzione funziona quando nient'altro funziona:

Ho impiegato più di una settimana per convertire l'intero progetto e sono arrivato a una soluzione di seguito:

Innanzitutto, disintegrare la dipendenza di cocopod dal progetto e quindi iniziare a convertire il progetto nell'ultima versione rapida.

Vai a Project Directory nel terminale e digita:

pod deintegrate

Questo disintegrerà i cocopods dal progetto e nessuna traccia di CocoaPods sarà lasciata nel progetto. Ma allo stesso tempo, non cancellerà xcworkspace e podfile. Va bene se sono presenti.

Ora devi aprire xcodeproj (non xcworkspace) e otterrai molti errori perché hai chiamato metodi di dipendenza cocoapods nei tuoi progetti principali.

Quindi per rimuovere quegli errori hai due opzioni:

  1. Commenta tutto il codice che hai usato dalla libreria cocoapods.
  2. Crea una classe wrapper che abbia metodi fittizi simili alla libreria cocopods, quindi chiamala.

Una volta rimossi tutti gli errori, puoi convertire il codice nell'ultima versione swift.

A volte, se si verificano errori strani, provare a pulire i dati derivati ​​e riprovare.


0

forse hai bisogno di scaricare toolchain. Questo errore si verifica quando non si dispone della versione corretta del compilatore swift.


-3

Nel mio caso, tutti gli avvisi sono scomparsi dopo che ho modificato direttamente la versione di swift da 2.xa 4.0 nelle impostazioni di build tranne due avvisi.

Questi avvisi relativi a myprojectnameTestse myprojectnameUITestscartella. Non me ne sono accorto e ho pensato che si riferisse all'immigrazione diretta da Xcode 7 a Xcode 9 e pensavo di non poter risolvere questo problema e avrei dovuto installare la versione Xcode 8 mancata.

Nel mio caso, ho eliminato queste cartelle e tutti gli avvisi sono scomparsi, ma puoi ricreare questa cartella e contiene usando questo:

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

e usa questo articolo per creare casi di test: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


e qualcuno mi dica qual è il mio errore !?
iman kazemayni

2
Personalmente non lo sottovaluterei, niente di sbagliato nella tua risposta, ma il posto migliore sarà commentare la domanda dell'OP. Inoltre puoi dare un'occhiata a stackoverflow.com/help/how-to-answer che ti aiuterà a trovare il modo corretto di rispondere alle domande.
grassyburrito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.