Versão em idioma do Xcode 9 Swift (SWIFT_VERSION)

115

Eu recentemente atualizei o xcode para a versão 9. Antes disso no Xcode 8.x sempre que eu uso para fazer pod updateisso me mostra um código de atualização para converter o código para Swift 3 e fazer isso resolver os erros. Mas agora está me dando este erro:

A configuração de compilação “Swift Language Version” (SWIFT_VERSION) deve ser definida para um valor suportado para destinos que usam Swift. Essa configuração pode ser definida no editor de configurações de construção.

Para este erro eu tentei Build Settings > Swift Language Versione era o Swift 3.2 Mas como a chamada de atualização reinstalou alguns dos pods como Alamofire e diz para instalar o Xcode 8.x para converter o código para o Swift 3, então eu preciso instalar um versão adicional com o Xcode mais recente? Se sim, como posso instalar o Xcode 8 com o Xcode 9?

Chaudhry Talha
fonte
tente limpar os dados derivados e construir o projeto no Xcode 9.
iAviator
Qual é a sua versão rápida no Xcode 8 ??
santhoshkumar
era 8.3.3 eu acho. era o mais recente antes do xcode 9.
Chaudhry Talha

Respostas:

181

Resposta à sua pergunta:
Você pode baixar o Xcode 8.x no Portal de download da Apple ou baixar o Xcode 8.3.3 (ou consulte: Onde baixar a versão anterior do Xcode ), se você tiver uma conta de desenvolvedor premium (id da apple). Você pode instalar e trabalhar com o Xcode 9 e o Xcode 8.x em um sistema único (mac). (Certifique-se de ter Command Line Toolssuporte para ambas as versões do Xcode, para trabalhar com o terminal (consulte: Como instalar a 'Ferramenta de linha de comando' ))


Dica: como migrar seu código Xcode 9 compatível com versões Swift (Swift 3.2 ou 4)
Xcode 9 permite conversão / migração de Swift 3.0paraSwift 3.2/4.0 somente de . Portanto, se a versão atual da linguagem Swift de seu projeto estiver abaixo de 3.0, você deve migrar seu código em uma versão compatível com Swift 3 usando o Xcode 8.x.

Esta é uma mensagem de erro comum que o Xcode 9 mostra se ele identifica o idioma Swift abaixo de 3.0, durante a migração.

insira a descrição da imagem aqui


O Swift 3.2 é compatível com o Xcode 9 e o Xcode 8.

Projeto ► (Selecione o destino do projeto) ► Configurações de construção ► (Digite 'swift' na barra de pesquisa) Idioma do compilador Swift ► Versão do idioma do Swift ► Clique na lista de idiomas para abri-la.

insira a descrição da imagem aqui



Converta seu código-fonte de Swift 2.0 para 3.2 usando o Xcode 8 e continue com o Xcode 9 (Swift 3.2 ou 4).


Para facilitar a migração de seu código, siga estas etapas: (isso o ajudará a converter para a versão mais recente do swift suportada por sua ferramenta Xcode)

Xcode: Menus: Edit ▶ Covert ▶ To Current Swift Syntax

insira a descrição da imagem aqui

Krunal
fonte
9
Se você veio aqui porque está apenas agora (dezembro de 2018) limpando algum código do Swift 2, ficará desapontado ao saber que o Xcode 8 não roda no Mojave.
bugloaf
53

Para projetos Objective C criados usando o Xcode 8 e agora abrindo no Xcode 9, ele está mostrando o mesmo erro mencionado na pergunta.

Para corrigir isso, pressione o botão + em Build Settings e selecione Add User-Defined Setting conforme mostrado na imagem abaixo

configuração de construção

Então, na nova linha criada, adicione SWIFT_VERSIONcomo chave e 3.2como valor como abaixo.

insira a descrição da imagem aqui

Isso corrigirá o erro para projetos c objetivos.

R. Mohan
fonte
2
Isso me ajudou. Obrigado.
Andreas Kraft
9
Se você está tendo esse problema com CocoaPods, pode ser necessário adicionar esta configuração de compilação à seção pods.xcodeproject.
Stewart Macdonald
1
Isso funcionou para mim, eu também tive que modificar 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' nas configurações de compilação para '$ (herdado)'
F-1 de
1
Obrigado novamente 2 meses depois
janeiro
1
Aprecie a solução.
user366584
4

Eu só consegui isso depois de criar um novo projeto Objective-C no Xcode 10, depois de adicionar um arquivo de modelo de dados principais ao projeto.

Encontrei duas maneiras de consertar isso:

  1. A maneira fácil: abra o inspetor de arquivos do modelo de dados principais ( - 1) e altere o idioma de Swift para Objective-C

Alterar a linguagem do modelo de dados principais

  1. Método mais longo e perigoso

O modelo contém um arquivo de "conteúdo" com esta linha:

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

Lá dentro há uma sourceLanguage="Swift"entrada. Altere para sourceLanguage="Objective-C"e o erro desaparece.

Para encontrar o arquivo de "conteúdo", clique com o botão direito .xcdatamodeldno Xcode e selecione "Mostrar no Finder". Clique com o botão direito do mouse no arquivo real (Finder) e clique em "Mostrar conteúdo do pacote"

Além disso: Alterar o idioma do modelo impedirá o Xcode de gerar arquivos de subclasse de objeto gerenciado no Swift.

nevan king
fonte
1

Isso pode acontecer quando você adicionou Core Data a um projeto existente.
Verifique o:
<Nome> / <Nome> .xcdatamodeld / <Nome> .xcdatamodel /
arquivo de conteúdo .
Este arquivo contém uma entrada "sourceLanguage" que (por padrão) pode ter sido definida como "Swift". Mude para "Objective-C".

digitaldaemon
fonte
0

Acabei de clicar no botão de conversão rápida mais recente e definir a configuração de criação de destino do aplicativo -> Versão de idioma do Swift: swift 4.0,

Espero que isso ajude.

Atal Singh
fonte
0

Esta solução funciona quando nada mais funciona:

Passei mais de uma semana para converter todo o projeto e cheguei a uma solução abaixo:

Primeiro, desintegre a dependência dos cocopods do projeto e, em seguida, comece a converter o projeto para a versão swift mais recente.

Vá para o diretório do projeto no terminal e digite:

pod deintegrate

Isso desintegrará os cocopods do projeto e nenhum vestígio de CocoaPods será deixado no projeto. Mas ao mesmo tempo, ele não excluirá o xcworkspace e os podfiles. Tudo bem se eles estiverem presentes.

Agora você tem que abrir o xcodeproj (não o xcworkspace) e você obterá muitos erros porque você chamou métodos de dependência de cocoapods em seus projetos principais.

Portanto, para remover esses erros, você tem duas opções:

  1. Comente todo o código que você usou da biblioteca cocoapods.
  2. Crie uma classe wrapper que tenha métodos fictícios semelhantes à biblioteca cocopods e, em seguida, chame-a.

Assim que todos os erros forem removidos, você pode converter o código para a versão mais recente do swift.

Às vezes, se você estiver recebendo erros estranhos, tente limpar os dados derivados e tente novamente.

Shubham Mishra
fonte
0

talvez você precise baixar o conjunto de ferramentas. Este erro ocorre quando você não tem a versão correta do compilador swift.

dalmato
fonte
-3

No meu caso, todos os avisos desapareceram depois que alterei diretamente a versão do swift de 2.x para 4.0 nas configurações de compilação, exceto dois avisos.

Estes aviso relacionado com myprojectnameTestse myprojectnameUITestspasta. Não percebi e achei que fosse relacionado à imigração direta do Xcode 7 para o Xcode 9 e achei que não poderia resolver esse problema e deveria instalar a versão do Xcode 8 perdida.

No meu caso, apaguei essas pastas e todos os avisos desapareceram, mas você pode recriar esta pasta e contém usando:

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

e use este artigo para criar casos de teste: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html

iman kazemayni
fonte
e alguem me diga qual é o meu erro !?
iman kazemayni
2
Eu pessoalmente não iria negar isso, nada de errado com sua resposta, mas o melhor lugar será comentar a pergunta do OP. Além disso, você pode dar uma olhada em stackoverflow.com/help/how-to-answer, que o ajudará a encontrar a maneira correta de responder às perguntas.
grassyburrito