Ho appena creato un nuovo progetto Swift in Xcode. Mi chiedo quale versione di Swift stia utilizzando.
Come posso vedere, in Xcode o nel terminale, quale versione di Swift sto usando nel mio progetto?
Ho appena creato un nuovo progetto Swift in Xcode. Mi chiedo quale versione di Swift stia utilizzando.
Come posso vedere, in Xcode o nel terminale, quale versione di Swift sto usando nel mio progetto?
Risposte:
Le impostazioni di compilazione del progetto hanno un blocco "Swift Compiler - Languages", che memorizza le informazioni su Swift Language Version in formato chiave-valore. Ti mostrerà tutte le versioni disponibili (supportate) di Swift Language per il tuo Xcode e la versione attiva anche con un segno di spunta.
Progetto ► (Seleziona il tuo obiettivo di progetto) ► Costruisci impostazioni ► (Digita 'swift_version' nella barra di ricerca) Lingua del compilatore Swift ► Versione della lingua Swift ► Fai clic sull'elenco Lingua per aprirlo (e ci sarà un segno di spunta su uno qualsiasi dell'elenco -item, che sarà l'attuale versione rapida).
Guarda questa istantanea, per una facile comprensione:
Con l'aiuto del seguente codice, a livello di codice è possibile trovare la versione Swift supportata dal progetto.
#if swift(>=5.2)
print("Hello, Swift 5.2")
#elseif swift(>=5.1)
print("Hello, Swift 5.1")
#elseif swift(>=5.0)
print("Hello, Swift 5.0")
#elseif swift(>=4.2)
print("Hello, Swift 4.2")
#elseif swift(>=4.1)
print("Hello, Swift 4.1")
#elseif swift(>=4.0)
print("Hello, Swift 4.0")
#elseif swift(>=3.2)
print("Hello, Swift 3.2")
#elseif swift(>=3.0)
print("Hello, Swift 3.0")
#elseif swift(>=2.2)
print("Hello, Swift 2.2")
#elseif swift(>=2.1)
print("Hello, Swift 2.1")
#elseif swift(>=2.0)
print("Hello, Swift 2.0")
#elseif swift(>=1.2)
print("Hello, Swift 1.2")
#elseif swift(>=1.1)
print("Hello, Swift 1.1")
#elseif swift(>=1.0)
print("Hello, Swift 1.0")
#endif
Ecco il risultato usando Playground (con Xcode 11.x )
Quello che faccio è dire nel Terminale:
$ xcrun swift -version
L'output per Xcode 6.3.2 è:
Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)
Ovviamente ciò presuppone che tu xcrun
stia indicando correttamente la tua copia di Xcode. Se, come me, stai manipolando diverse versioni di Xcode, questo può essere un problema! Per assicurarsi che lo sia, diciamo
$ xcrun --find swift
e guarda il percorso di Xcode che ti mostra. Per esempio:
/Applications/Xcode.app/...
Se questo è il tuo Xcode, l'output da -version
è accurato. Se è necessario eseguire il repoint xcrun
, utilizzare il menu a comparsa Strumenti della riga di comando nel riquadro delle preferenze Posizioni di Xcode.
xcode-select -p
per stampare il percorso dell'Xcode che userà xcrun e sudo xcode-select -s /path/to/Xcode.app
per cambiarlo.
Da Xcode 8.3 in poi Build Settings
ha una chiave Swift Language Version
con un valore di versione rapida che il tuo target sta usando.
Per i vecchi Xcodes utilizzare questa soluzione, aprire il terminale e digitare i seguenti comandi
Caso 1: hai installato solo un'app Xcode
swift -version
Caso 2: hai installato più app Xcode
Passa active developer directory
(Sostituisci Xcode_7.3.app
dal seguente comando con il nome del file dell'app Xcode dalla directory dell'applicazione per cui desideri verificare la versione rapida)
sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
Poi
swift -version
NOTA: da Xcode 8 a Xcode 8.2.x è possibile utilizzare swift 2.3 anche se Xcode 8 utilizza swift 3.x come versione rapida predefinita. Per utilizzare Swift 2.3 , basta attivare flag Use Legacy Swift Language Version
per YES
da Build Setting
e XCode utilizzerà Swift 2.3 per quel target di progetto.
Puoi vedere e selezionare quale versione di Swift Xcode sta usando in:
Target -> Impostazioni build -> Versione lingua veloce :
Questo è disponibile in Xcode 8.3 e Xcode 9 (non ho controllato le versioni precedenti)
Swift Language Version
non compare come impostazione nel mio progetto Xcode 8.2.1. Ha Use Legacy Swift Language Version
.
Swift Language Version
non esisteva qui Build Settings
fino a Xcode 8.3 .... nelle precedenti versioni di Xcode 8.x Use Legacy Swift Language Version
, No
= Swift 3, e Yes
= Swift 2.3
Questo post reddit mi ha aiutato: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet
Xcode 8 utilizza Swift 3.0 come impostazione predefinita. Ma puoi attivare Swift 2.3. Vai a Impostazioni di costruzione del progetto e imposta 'Usa versione legacy Swift Language' su SÌ.
Buon vecchio reddit :)
Per vedere la versione predefinita di swift installata sul tuo computer, quindi dalla riga di comando, digita quanto segue:
swift --version
Apple Swift versione 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)
Target: x86_64-apple-darwin17.6.0
Questa è molto probabilmente la versione inclusa nella versione di Xcode dell'app store installata (a meno che non sia stata modificata).
Se si desidera determinare la versione effettiva di Swift utilizzata da una particolare versione di Xcode (una beta, ad esempio), quindi dalla riga di comando, richiamare il binario swift all'interno del bundle Xcode e passargli il parametro --version
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version
Apple Swift versione 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)
Target: x86_64-apple-darwin17.6.0
/usr/bin/swiftc --version
Nel caso in cui qualcuno stia cercando una mappatura one-to-one rapida della versione Swift basata sulla versione Xcode:
Xcode 11.5 : Swift version 5.2.4
Xcode 11.4 : Swift version 5.2
Xcode 11.3 : Swift version 5.1.3
Xcode 11.2.1: Swift version 5.1.2
Ottenuto eseguendo il comando seguente, come indicato nelle diverse versioni di Xcode:
/Applications/Xcode11.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version
Contributo bonus: sto usando uno script node.js personalizzato per estrarre una stringa pulita da usare con la documentazione Jazzy. Potresti ottenere un po 'di questo se riesci a trovare un posto dove lavorarlo nel tuo processo di sviluppo:
Richiamato da uno script Bash:
#!/bin/bash
swiftversion=$(node SwiftVerSlicer.js "${xcrun swift -version}");
echo $swiftversion
SwiftVerSlicer.js:
// begin script
const inputString = `${process.argv[2]}`
let searchTerm = (inputString.indexOf('(') - 1)//-1 cause whitespace
let version = inputString.slice(0,searchTerm)
console.log(version)
// end script
Puoi anche usare regex ovviamente, ma fai quello che vuoi:]