Xcode 8 Beta 3 Usa il problema Legacy Swift


201

Ho un progetto Objective-C in Xcode 8 Beta 3. Dall'aggiornamento, ogni volta che provo a creare ricevo il seguente errore:

"Usa la versione legacy di Swift Language" (SWIFT_VERSION) è necessario per essere configurato correttamente per i target che utilizzano Swift. Utilizzare il menu [Modifica> Converti> In sintassi Swift corrente ...] per scegliere una versione Swift o utilizzare l'editor Impostazioni build per configurare direttamente l'impostazione build.

Qualcuno ha riscontrato questo? Poiché si tratta di un progetto Objective-C, non esiste alcuna impostazione di build per configurare Swift. Ho anche assicurato che nessuna delle dipendenze del progetto o CocoaPods utilizza Swift. L'unica soluzione che ho è usare la Beta 2. Qualche idea su come risolvere questo problema?

Dovrei anche menzionare che sto eseguendo OSX 10.12 Beta 2.


Ho anche questo problema ...
rockdaswift,

Risposte:


364

Se stai usando CocoaPods e vuoi che venga riparato automaticamente ogni volta che lo fai pod install, allora puoi aggiungere queste righe alla fine del tuo 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 è ora risolto se si utilizza CocoaPods v1.1.1 o successive. Non dimenticare di rimuovere l' ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESimpostazione dai principali obiettivi del progetto.


24
Se per il momento stai provando a usare la 2.3 nella tua base di codice, usa 2.3invece di 3.0 Ottima soluzione! Questo rende efficace la "Use Legacy Swift Language Version"a No (o se si cambia ad 2.3essa la Yes). Il vantaggio di questa opzione è però ogni volta che pod installsi imposta tale impostazione automaticamente! Eccezionale. Vedo che SWIFT_VERSIONviene impostato anche su progetti Obj-C . Presumo che non ci siano effetti negativi?
Herbal7ea,

8
È fantastico, 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 su 2.3 in ogni modulo e nel progetto Pod, usando Build Settings, e non ha funzionato, ma ha funzionato. Significa magia inquietante nascosta. Io odio che.
BaseZen,

5
Ho letteralmente effettuato l'accesso solo per darti
suggerimenti

1
Ho un progetto Obj-C con grafici (in Swift), AfNetworking e alcuni altri pod Obj-C. Ho usato lo script sopra nel mio file pod. Tutti gli errori / avvisi relativi a swift sono spariti ma ora il mio progetto non riesce a trovare il framework AFNetwoking.
ibnetariq,

1
@ Mr.Bista La soluzione approvata stackoverflow.com/a/38597681/2854405 lo fa funzionare dalle impostazioni Xcode. Ma potresti doverlo fare con ogni singolo repository Pod che hai ogni volta che lo stai facendo pod install / update. Questa soluzione rende le cose più veloci. Puoi anche aggiornare la tua versione di Cocoapods ora: dovrebbe anche risolvere questo problema.
Tulleb,

119

Ho appena trovato un modo per risolverlo.

Vai alle impostazioni di compilazione del progetto o della libreria e imposta l'attributo Versione compilatore Swift "Usa versione lingua Swift legacy" da Non specificato a Sì o NO.

inserisci qui la descrizione dell'immagine


13
Non vedo questa opzione nel mio progetto Objective-C
Bryan,

Hai delle librerie di progetti Swift nel tuo progetto Obj-C?
rockdaswift,

2
Se stai usando swift e cocoapods, il comando sopra in cocoapods lo fa efficacemente. Se non vuoi cambiarlo ogni volta che pod installti consiglio di usare la risposta di @Tulleb sopra.
Herbal7ea,

Ora il mio errore è Swift Compiler Error in un self class
Eduardo Oliveros,

1
Questa opzione non è più disponibile.
Hemang,

33

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

Dato che il mio progetto è Objective-C, ho pensato che forse uno dei Pod che stavo usando utilizzava Swift, ho controllato ogni Pod e nessuno di essi lo era.

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

immagine dello schermo


1
Come hai trovato questo? Xcode non dice nulla al riguardo. Mi hai salvato.
Ryan,

2
Anzi la mia soluzione e il mio salvatore. Grazie! Stupido il modo in cui Apple rende automaticamente i modelli Coredata "Swifty" quando l'intera App è obiettiva ....
Bob de Graaf

18

Questo problema è visibile anche in Xcode-8.1. Quando aggiungiamo nuovi Target come Extension o Widget e la libreria di terze parti viene integrata nel nuovo target con l'aiuto dei cocopodi. Dopo l' installazione del pod . Possiamo riscontrare lo stesso errore di cui sopra.

Modificare la versione di utilizzo della lingua Swift legacy in ogni impostazione di compilazione della libreria in

No .

inserisci qui la descrizione dell'immagine


Nel mio caso, l'impostazione Usa legacy Swift Language Version su Sì ha risolto il problema.
Jayprakash Dubey,

Assicurati che per ogni libreria con questo problema sia impostato Sì o No .. nel mio caso No ha funzionato
hanzolo

Questo ha funzionato per me. Assicurati di fare lo stesso anche per il Test target
zizutg

@zizutg: - Dobbiamo effettuare un controllo incrociato di tutti gli obiettivi. Grazie per indicare di nuovo.
Shrawan,

9

Se si utilizza Xcode 8 o versioni successive

  1. Vai a Impostazioni di costruzione
  2. Trova utilizzare la versione della lingua rapida legacy
  3. Sì - Swift 2.3
  4. No - Swift 3.0 inserisci qui la descrizione dell'immagine

5

Aggiungi sotto il 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

4

Sto lavorando a un progetto che ha misurato object-c e codice rapido Ho usato precedentemente la versione 2.3 rapida e dopo l'aggiornamento a rapido 3 non sono stato in grado di costruire il progetto. Xcode si è lamentato del messaggio di errore menzionato.

Apparentemente, c'era ancora una versione obsoleta di Swift specificata nel mio file project.pbxproj. È stato specificato swift 3.0.1:

SWIFT_VERSION = 3.0.1;

Considerando che avevo già installato 3.0.2:

$ 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, l'ho risolto cambiando la versione di Swift nel file project-pbxproj in:

SWIFT_VERSION = 3.0;

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


4

Nel mio caso ho appena fatto le seguenti cose

Scegli il progetto Target => Vai a Build setting => Cerca "Swift Language Version" => dai a Value la versione attuale di Swift

Questo è tutto Ha risolto il mio problema

Segui questa immagine


4

Ho avuto lo stesso errore. Ho provato a cercare "Usa la versione legacy di Swift Language", ma non ho trovato. Sto usando Xcode 8.3.3 Dopo aver navigato troppo e aver lavorato intorno ho trovato questa soluzione, e questo ha funzionato per me.inserisci qui la descrizione dell'immagine

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

3

impostare "Usa versione legacy di Swift Language" su "YES" se si utilizza una vecchia versione di swift nel proprio progetto o una terza parte rapida. "No" se il progetto è aggiornato alla versione rapida corrente. se non configuri la tua versione rapida, dopo ogni aggiornamento e installazione, il framework Pod deve specificarlo.


2

In realtà ho dovuto cercare "Legacy Swift" per essere in grado di cambiarlo da non specificato a "Sì". Quando sono semplicemente passato alla sezione sopra descritta, non sono stato in grado di cambiarlo. Spero che questo possa aiutare qualcuno.


2

Il mio progetto è scritto in Swift. Ho avuto lo stesso errore con fastlane. Quello che è successo è stato l'aggiornamento automatico del mio Xcode, quindi ho dovuto aggiornare il mio progetto a Swift 3.0. Ho 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. Ripristinato il mio codice su 2.3. Quindi fastlane betanon funzionava più. Ho scoperto che dovevo impostare lo strumento da riga di comando su 7.3. inserisci qui la descrizione dell'immagine


1

Stavo riscontrando lo stesso problema e l'ho risolto nel modo seguente:

In Progetto> Impostazioni build:

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

Quindi nel mio Podfile:

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

L'uso di queste tre impostazioni ha rimosso tutti gli avvisi e mi ha permesso di compilare correttamente.

Il più oscuro e ciò che effettivamente ha fatto progressi per la compilazione è stato cambiare SWIFT_VERSION nel Podfile da 3 a 3.0, come suggerito qui .


1

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


1

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

Potrebbe essere necessario:

  • Apri di nuovo il tuo Podfile
  • Verificare che la riga per la piattaforma non sia commentata con un '#'. Dovrebbe finalmente apparire come qualcosa di simile:

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

  • Salva il tuo podfile, chiudi Xcode ed esegui di pod installnuovo
  • Apri il tuo project.xcworkspace

Forse è solo quello.

In caso contrario, puoi andare sopra ;-)


1

Ho avuto lo stesso problema dopo l'aggiornamento a xcode 8.3.2 ma l'opzione "Usa legacy Swift Language" non c'era più. Questa sembra essere l'opzione per cambiare ora: Versione Swift Lang

Ho usato questa correzione con Alamofire e altre librerie e tutto funziona bene.


1

Vai a Impostazione build progetto per progetto e Target fai sotto due.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Passa all'ultima Swift 3.

Errore risolto

Se è stata risolta la correzione dell'errore, ti piace.


1

In Xcode 9 beta. Vai su Impostazioni progetto, Crea impostazioni, cerca Swift Language Version. In Xcode 9 è necessario specificare se si utilizza Swift 3.2 o Swift 4.


Avevo un progetto in 9.0b in cui l'impostazione sia del progetto che del target su Swift 4 continuava a produrre l'errore, impostando entrambi su Swift 3.2 lo ha rimosso e impostando entrambi su Swift 4 ora va bene, quindi si può fare tutto bene e viene ancora visualizzato un errore.
green_knight

1

Se si cambia ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESper NOancora non lavoro, è perché la questione Xcode, non è il tuo problema. Effettuare le seguenti operazioni:

1.Cambiare la ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESproprietà in modo che si trovi YESsul target di avviso

2. quindi mostrerà un avviso sulla barra di sinistra che consiglia di passare a rapido 3.0

3. quindi tornare a NO. Ricostruisci il progetto, l'xcode finalmente rileva la tua modifica in NO!

Problema risolto in questo caso!

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.