2016-07-18 202 views
188

Ho un progetto di Objective-C in Xcode 8 Beta 3. Dal momento che l'aggiornamento, ogni volta che provo a costruire ricevo il seguente errore:Xcode 8 Beta 3 Utilizzare Legacy Swift problema

“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.

Chiunque ha incontrato questo? Dato che si tratta di un progetto Objective-C, non ci sono impostazioni di build per configurare Swift. Mi sono anche assicurato che nessuna delle dipendenze del progetto o CocoaPod stia usando Swift. L'unica soluzione che ho è usare Beta 2. Qualche idea su come risolvere questo problema?

Vorrei anche ricordare sto correndo OSX 10.12 Beta 2.

+0

Inoltre sto avendo questo problema ... – rockdaswift

risposta

32

Ho ignorato questo problema da un po 'di tempo e sto solo lavorando su altre cose nel frattempo - ho finalmente trovato la soluzione al mio problema.

Dal momento che il mio progetto è Objective-C ho pensato che forse uno dei pod che sto usando usava Swift, ho controllato ogni pod e nessuno di loro lo era.

La soluzione finale era che il mio modello Core Data era impostato per generare codice in Swift anche se sono stati generati manualmente nel menu File> Nuovo> NSManagedObjectSubclass. Tutto quello che dovevo fare era passare a Objective-C.

screenshot

+1

Come hai trovato questo? Xcode non dice nulla a riguardo. Mi hai salvato. – Ryan

+2

In effetti la mia soluzione e il mio salvatore. Grazie! Stupido come Apple rende automaticamente i modelli di Coredata 'Swifty' quando l'intera App è oggettiva-c .... –

+0

Bingo !!!! Perfetto grazie .... –

117

ho appena trovato un modo per risolvere il problema.

Passare alle impostazioni di Build del progetto o della libreria e impostare l'attributo Swift Compiler Version "Use Legacy Swift Language Version" da Non specificato a Sì o NO.

enter image description here

+13

non vedo questa opzione nel mio progetto di Objective-C – Bryan

+0

Avete delle librerie di progetto Swift nel progetto Obj-C? – rockdaswift

+2

Se state usando swift e cocoapods, il comando sopra in cocoapods lo fa efficacemente. Se non vuoi modificarlo ogni volta che esegui l'installazione di pod, ti consiglio di usare la risposta di @Tulleb qui sopra. – Herbal7ea

363

Se si utilizza CocoaPods e vogliono che venga fissata automaticamente ogni volta che si sta facendo una pod install, allora si può aggiungere queste righe alla fine del vostro Podfile:

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 

EDIT : Questo problema è stato risolto se si utilizza CocoaPods v1.1.1 o versioni successive. Non dimenticare di rimuovere l'impostazione ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES dai target principali del progetto.

+0

Qualche idea per una correzione usando Carthage? –

+24

Se al momento stai tentando di utilizzare ** 2.3 ** nella base di codice, utilizza '2.3' anziché' 3.0' Ottima soluzione! Ciò rende effettivamente '' Use Legacy Swift Language Version ''a' No' (o se lo si cambia in '2.3' è' Yes'). Il vantaggio di questa opzione è che ogni volta che si installa 'pod 'si imposta automaticamente questa impostazione! Eccezionale. Vedo 'SWIFT_VERSION' viene impostato su ** Progetti Obj-C **. Presumo che non ci siano effetti avversi? – Herbal7ea

+8

Questo è grandioso, ma è abbastanza inquietante che senza un esperto di Ruby su StackOverflow, migliaia e milioni di progetti siano SOL. Ho modificato manualmente l'impostazione Xcode SWIFT_VERSION a 2.3 in ogni modulo e nel progetto Pod, usando Impostazioni di costruzione, e non ha funzionato, ma così è stato. Significato di magia inquietante nascosta. Odio che. – BaseZen

2

set "Usa Legacy Swift Versione linguaggio" a "Sì" se si utilizza una versione vecchia di rapida nel progetto o qualsiasi 3a parte veloce. "No" se il tuo progetto è aggiornato alla versione attuale attuale. se non si configura la versione rapida, dopo ogni aggiornamento e installazione, il framework Pod deve specificarlo.

5

Aggiungere il seguente codice alla fine del podfile.

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 
1

ho dovuto fare una ricerca per "Legacy Swift" per essere in grado di cambiare da non specificato "Sì" Quando ho semplicemente scorrere verso il basso fino alla sezione di cui sopra, non ero in grado di cambiarlo. Spero che questo possa aiutare qualcuno.

16

Questo problema è visibile anche in Xcode-8.1. Quando aggiungiamo un nuovo Target come Extension o Widget e la libreria di terze parti è integrata in un nuovo target con l'aiuto di cocopods. Dopo l'installazione del Pod. Possiamo affrontare lo stesso errore di cui sopra.

Modificare il Usa Legacy Swift Versione linguaggio in ogni Costruire Biblioteca Impostazione per

No.

enter image description here

+0

Nel mio caso l'impostazione Utilizza Legacy Swift Language Version su Sì ha risolto il problema. –

+0

Assicurati che per ogni lib con questo problema tu abbia impostato Sì o No .. nel mio caso No ha funzionato – hanzolo

+0

Questo ha funzionato per me. Assicurati di fare lo stesso anche per l'obiettivo del test – zizutg

1

Il mio progetto è scritto in Swift. Ho ottenuto lo stesso errore con fastlane. Quello che è successo è stato il mio Xcode aggiornato automaticamente, quindi ho dovuto aggiornare il mio progetto a Swift 3.0. Hai un sacco di errori. La correzione e il debug richiedevano troppo tempo e non ne valeva la pena in quel momento, quindi ho deciso di installare una versione precedente di Xcode. Ho ripristinato il mio codice a 2.3. Quindi fastlane beta non funzionava più. È venuto fuori che avevo bisogno di impostare lo strumento della riga di comando su 7.3. enter image description here

3

Sto lavorando su un progetto che ha mescolato Objective-C e il codice swift ho usato in precedenza rapida versione 2.3 e dopo l'aggiornamento a rapido 3 non sono riuscito a costruire il progetto. Xcode si è lamentato con il messaggio di errore menzionato.

Apparentemente, c'era ancora una versione obsoleta di Swift specificata nel mio file project.pbxproj. C'è stata rapida 3.0.1 specificato:

SWIFT_VERSION = 3.0.1; 

considerando che, ho già avuto 3.0.2 installato:

$ 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, ho riparato cambiando la versione Swift nel file di progetto-pbxproj a:

SWIFT_VERSION = 3.0; 

Sembra che l'identificatore di versione del livello di patch fosse troppo specifico.

0

Se si modifica ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES su NO ancora non funziona, è perché il problema di xcode, non è il tuo problema. Facendo i passi successivi: proprietà

1.Cambia ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES essere sì sul bersaglio avvertimento

2.Then mostrerà un avviso sulla barra di sinistra che consiglia di cambiare per SWIFT 3.0

3.Then cambiare di nuovo a NO. Ricostruisci il progetto, lo xcode finalmente rileva la tua modifica a NO!

Problema risolto in questo caso!

0

ho avuto questo stesso problema e risolto facendo le seguenti:

In Project> Crea Regolazioni:

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

Poi nel mio Podfile:

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

Utilizzando queste tre impostazioni rimuovere d tutti gli avvertimenti e mi ha permesso di compilare correttamente.

Il più oscuro e ciò che effettivamente ha ottenuto un progresso per la compilazione è stato il cambio SWIFT_VERSION nel Podfile da 3 a 3.0 come suggerito here.

0

Da XCode 8 in poi, è possibile utilizzare swift 2.3 anche se XCode 8 utilizza swift 3.x come versione swift predefinita. Per usare lo swift 2.3, basta attivare il flag Usa Legacy Swift Language Version su YES da Build Setting, quindi XCode userà Swift 2.3 per quel target di progetto.

9

Se si sta utilizzando Xcode 8 o poi

  1. Vai costruire Impostazioni
  2. trovare la versione uso eredità rapida lingua
  3. Sì - Swift 2.3
  4. No - Swift 3.0 enter image description here
0

Prima di provare soluzioni complicate, ecco un controllo di base che devi fare se non sei nuovo o Cocoapods e stai riscontrando questo problema.

potrebbe essere necessario:

  • Aprire il Podfile nuovo
  • Verificare che la linea per la piattaforma non è commentata con un '#'. Occorre infine apparire come qualcosa di simile a:

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

  • Salvare il Podfile, Close Xcode, ed eseguire di nuovo pod install
  • Aprire il project.xcworkspace

Forse è solo che .

In caso contrario, si può andare al di sopra ;-)

0

Ho avuto questo stesso problema dopo l'aggiornamento a Xcode 8.3.2, ma l'opzione "Utilizza Legacy Swift Language" non c'era più. Questa sembra essere la possibilità di cambiare ora: Swift Lang Version

Usato questa correzione con Alamofire e altre librerie e tutto funziona bene.

0

Vai a Impostazione di progetto per Progetto e Target fare sotto due.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 
And 
Swift Compiler - Version = Swift 3 

Modifica all'ultimo Swift 3.

Errore risolto.

Se è stato risolto il problema di errore, ti piace.

0

In Xcode 9 beta. Vai a Impostazioni progetto, Impostazioni di costruzione, cerca Swift Language Version. In Xcode 9 devi specificare se stai utilizzando Swift 3.2 o Swift 4.

+0

Avevo un progetto in 9.0b in cui l'impostazione del progetto e del target su Swift 4 continuava a produrre l'errore, impostando entrambi su Swift 3.2 rimosso e impostando entrambi su Swift 4 ora va bene, quindi si può fare tutto correttamente e ancora ottengono un errore. –

2

Nel mio caso ho Basta fare le cose Following

Scegli progetto di destinazione => Vai alla configurazione Regolazione => La ricerca di “Swift Versione linguaggio” => dare la versione Swift corrente Valore

Questo è tutto esso ha fissato la mia edizione

Follow This Image

+0

Questo ha funzionato per me grazie. –

3

ho ottenuto lo stesso errore. Ho provato a cercare "Use Legacy Swift Language Version", ma non trovato. Sto usando Xcode 8.3.3 Dopo aver navigato troppo e lavorando in giro ho trovato questa soluzione, e questo ha funzionato per me. enter image description here

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.)