Como vejo a versão do Swift que estou usando?

567

Acabei de criar um novo projeto Swift no Xcode. Eu estou querendo saber qual versão do Swift está usando.

Como posso ver, no Xcode ou no terminal, qual versão do Swift estou usando dentro do meu projeto?

David Snabel
fonte
7
Além do título de stackoverflow.com/questions/29140476/…, não encontro nenhuma semelhança com esta pergunta que é suficiente para rotular essa pergunta, pois ela é duplicada . A essência desta questão não é como encontrar a versão do Swift programaticamente , mas como encontrar a versão do Swift de maneira geral (via terminal, Xcode ou etc.). Isso é uma grande diferença.
David Snabel

Respostas:

407

As configurações de construção do projeto têm um bloco 'Swift Compiler - Languages', que armazena informações sobre a Swift Language Version no formato de valor-chave. Ele mostrará todas as versões do idioma Swift disponíveis (suportadas) para o seu Xcode e versão ativa também com uma marca de seleção.

Projeto ► (Selecione o destino do seu projeto) ► Configurações de compilação ► (Digite 'swift_version' na barra de pesquisa) Swift Compiler Language ► Swift Language Version ► Clique na lista Idioma para abri-lo (e haverá uma marca de seleção em qualquer uma das listas item, que será a versão rápida atual).

Veja este instantâneo, para facilitar o entendimento:

xcode com as áreas descritas realçadas


Com a ajuda do código a seguir, você pode encontrar programaticamente a versão Swift suportada pelo seu projeto.

#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

Aqui está o resultado usando o Playground (com o Xcode 11.x )

insira a descrição da imagem aqui

Krunal
fonte
10
Eu acho que essa é a resposta correta. Mais fácil do que ligar para o terminal. (especialmente se você tem versão diferente do Xcode instalado)
Mike Keskinov
17
Esta é a resposta correta, porque a versão rápida é configurada por destino.
Andrew Paul Simmons
2
Não vejo essa propriedade no meu projeto com o Xcode 8.1
logoff
6
você pode ver esta propriedade sobre as últimas versões do Xcode
Parkhya Dev
1
@ JonMcClung - A mesma opção também está disponível no Xcode 10.1. Acabei de verificar.
Krunal
500

O que eu faço é dizer no Terminal:

$ xcrun swift -version

A saída para o Xcode 6.3.2 é:

Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)

Obviamente, isso pressupõe que você xcrunestá apontando para sua cópia do Xcode corretamente. Se, como eu, você está manipulando várias versões do Xcode, isso pode ser uma preocupação! Para ter certeza de que é, diga

$ xcrun --find swift

e veja o caminho para o Xcode que ele mostra. Por exemplo:

/Applications/Xcode.app/...

Se esse é o seu Xcode, a saída -versioné precisa. Se precisar reconfigurar xcrun, use o menu pop-up Command Line Tools no painel de preferências Locations do Xcode.

mate
fonte
8
Você também pode usar xcode-select -ppara imprimir o caminho para o Xcode que o xcrun usará e sudo xcode-select -s /path/to/Xcode.appalterá-lo.
Jack Lawrence
4
Comecei a aprender o desenvolvimento do iOS e estou surpreso que o xcode não permita que você escolha a versão do swift, nem que você saiba a versão da GUI.
828 Alex
@RadekWilczak Não sei o que você quer dizer com "deveria ser". Eu apenas copiei o comando publicado e colei no Terminal e apertei Return, e ele funciona. Talvez haja outra alternativa, mas o que eu disse não está errado.
mate
1
Isso me deu a resposta errada. Porque o swift está configurado por destino. Veja a resposta abaixo em @Krunal para obter a melhor resposta.
Andrew Paul Simmons
Concordo com toda a "maneira correta é definir o SWIFT_VERSION" por projeto. No entanto, nas versões anteriores do Xcode, como 8.2, ele não indica claramente na interface do usuário qual versão do XCode é suportada no projeto e apenas possui "Usar versão do idioma do Swift herdado" na interface do usuário com Sim, Não, não especificado. A abordagem da linha de comando é extremamente útil para poder consultar rapidamente a resposta para qual é a versão máxima rápida disponível.
truedat101
104

Abra o terminal e escreva:

swift -version
Alzayed
fonte
12
Esta não é necessariamente a versão do swift que o Xcode vê. Além disso, você pode ter agilidade sem ter o Xcode.
asiby
64

A partir do Xcode 8.3, a Build Settingschave possui Swift Language Versionum valor da versão rápida que seu destino está usando.

Para Xcodes mais antigos, use esta solução, abra o terminal e digite o (s) seguinte (s) comando (s)

Caso 1: você instalou apenas um aplicativo Xcode

swift -version

Caso 2: você instalou vários aplicativos Xcode

  • Alternar active developer directory(Substitua Xcode_7.3.appdo seguinte comando pelo nome do arquivo do aplicativo Xcode no diretório de aplicativos para o qual você deseja verificar a versão rápida)

     sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
  • Então

     swift -version

NOTA: Do Xcode 8 ao Xcode 8.2.x, você pode usar o swift 2.3, mesmo que o Xcode 8 use o swift 3.x como versão rápida padrão. Para uso SWIFT 2.3, basta ligar bandeira Use Legacy Swift Language Versionpara YESpartir Build Settinge XCode usará Swift 2.3 para que a meta do projeto.

Aditya Deshmane
fonte
21

Você pode ver e selecionar qual versão Swift Xcode está usando:

Alvo -> Configurações de compilação -> Versão do idioma Swift :

insira a descrição da imagem aqui

Está disponível no Xcode 8.3 e Xcode 9 (não verificou versões anteriores)

joern
fonte
2
Swift Language Versionnão aparece como uma configuração no meu projeto do Xcode 8.2.1. Tem sim Use Legacy Swift Language Version.
Chris Prince
1
@ChrisPrince Sim, Swift Language Versionnão existia aqui em Build Settingsaté Xcode 8.3 .... em versões anteriores Xcode 8.x Use Legacy Swift Language Version, No= Swift 3 e Yes= Swift 2.3
William GP
17

Esta publicação no reddit me ajudou: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet

O Xcode 8 usa o Swift 3.0 como padrão. Mas você pode ativar o Swift 2.3. Vá para as Configurações de compilação do projeto e defina 'Usar versão do idioma do Legacy Swift' para YES.

Bom e velho reddit :)

alexisSchreier
fonte
1
Não consigo encontrar isso através de pesquisa 'Use Legado Swift Versão da linguagem' ou 'legado'
JerryZhou
Estou usando a versão mais recente do Xcode 8.3.2 (8E2002) e o swift 3 na Swift Language Version. Agora eu quero mudar isso para swift 2.3, mas há apenas uma opção swift 3.0 e 2nd não é especificado. então você poderia orientar como isso seria possível? obter 2,3 rápido no meu projeto atual? @alexisSchreier
Arsal
14

Para ver a versão padrão do swift instalada em sua máquina e, na linha de comando, digite o seguinte:

swift --version

Apple Swift versão 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)

Alvo: x86_64-apple-darwin17.6.0

Essa é provavelmente a versão incluída na versão da Xcode da loja de aplicativos que você instalou (a menos que você a tenha alterado).

Se você quiser determinar a versão real do Swift que está sendo usada por uma versão específica do Xcode (um beta, por exemplo) e, a partir da linha de comando, chame o binário swift no pacote Xcode e passe o parâmetro --version

/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version

Apple Swift versão 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)

Alvo: x86_64-apple-darwin17.6.0

Paul King
fonte
1

Estou usando o Swift do Google Colab. Veja como verificar isso na Colab.

!/swift/toolchain/usr/bin/swift --version

O resultado é 5.0-dev

korakot
fonte
-1

Contribuição bônus: estou usando um script node.js personalizado para extrair uma sequência limpa para uso com a documentação do Jazzy. Você pode usar isso de alguma maneira, se encontrar um local para trabalhar no seu processo de desenvolvimento:

Chamado a partir de um 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

Você também pode usar regex, é claro, mas faça o que quiser:]


fonte
-1

Ao digitar o comando swift no terminal, ele mostrará a versão, enquanto estiver acessando o console Swift (algo como abaixo)

System-IOSs-MacBook-Air:~ system$ swift
Welcome to Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7).
Type :help for assistance.
Super Nova
fonte
-1
  1. Selecione seu projeto
  2. Configuração de compilação
  3. procure por "linguagem rápida"
  4. agora você pode ver qual versão rápida você está usando no seu projeto

https://i.stack.imgur.com/Ojn3m.png

goti viral
fonte
Qual é a diferença da primeira solução fornecida em stackoverflow.com/a/46080904/1187415 ?
Martin R
Bem, eu vou jogar diretório do projeto principal e quando você digita "linguagem rápida" é apenas mostrar rápida versão em cima em Build Configurações nada mais do que isso ..
viral goti
-1

Você receberá isso na configuração do projeto

insira a descrição da imagem aqui

FARUQUE HOSSAIN
fonte