Problema no Legacy Swift do Xcode 8 Beta 3 Use


201

Eu tenho um projeto Objective-C no Xcode 8 Beta 3. Desde a atualização, sempre que tento compilar, recebo o seguinte erro:

É necessário que a opção "Usar versão do idioma do Swift herdado" (SWIFT_VERSION) seja configurada corretamente para destinos que usam o Swift. Use o menu [Editar> Converter> Para a sintaxe Swift atual…] para escolher uma versão Swift ou use o editor Configurações de compilação para definir diretamente a configuração de compilação.

Alguém já encontrou isso? Como é um projeto Objective-C, não há configuração de compilação para configurar o Swift. Também verifiquei que nenhuma das dependências do projeto ou o CocoaPods estão usando o Swift. A única solução que tenho é usar o Beta 2. Alguma idéia de como posso corrigir esse problema?

Também devo mencionar que estou executando o OSX 10.12 Beta 2.


Eu também estou tendo este problema ...
rockdaswift

Respostas:


364

Se você estiver usando o CocoaPods e desejar que ele seja corrigido automaticamente toda vez que estiver fazendo um pod install, você poderá adicionar essas linhas ao final do seu 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: Agora, esse problema foi corrigido se você usar o CocoaPods v1.1.1 ou posterior. Não se esqueça de remover a ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESconfiguração dos principais objetivos do projeto.


24
Se você está tentando usar o 2.3 na sua base de código por enquanto, use em 2.3vez de 3.0 Ótima solução! Isso efetivamente faz o "Use Legacy Swift Language Version"para No (ou se você alterá-lo para 2.3ele Yes). O benefício desta opção é que toda vez que você pod installdefine essa configuração automaticamente! Impressionante. Vejo que também SWIFT_VERSIONé definido em projetos Obj-C . Presumo que não há efeitos adversos?
Herbal7ea 13/09/16

8
Isso é ótimo, mas é bastante perturbador que, sem um especialista em Ruby no StackOverflow, milhares e milhões de projetos sejam SOL. Alterei manualmente a configuração SWIFT_VERSION do Xcode para 2.3 em todos os módulos e no projeto Pod, usando Configurações de compilação, e não funcionou, mas funcionou. Significado mágico perturbador escondido. Eu odeio isso.
BaseZen 18/09/16

5
Eu literalmente logado só para lhe dar adereços neste
Dnaso

1
Eu tenho um projeto de Obj-C com gráficos (em Swift), AfNetworking e alguns outros pods de Obj-C. Eu usei o script acima no meu arquivo pod. Todos os erros / avisos relacionados ao swift desapareceram, mas agora meu projeto não consegue encontrar a estrutura do AFNetwoking.
Ibnetariq 27/09/16

1
@ Mr.Bista A solução aprovada stackoverflow.com/a/38597681/2854405 faz com que funcione das configurações do Xcode. Mas você pode ter que fazer isso com todos os repositórios de Pod que você tiver toda vez que fizer um pod install / update. Esta solução torna as coisas mais rápidas. Você também pode atualizar sua versão do Cocoapods agora: também deve corrigir esse problema.
Tulleb

119

Acabei de encontrar uma maneira de consertar isso.

Vá para as configurações de compilação do projeto ou biblioteca e defina o atributo Versão do compilador Swift "Usar versão do idioma do Swift herdado" de Não especificado para Sim ou NÃO.

insira a descrição da imagem aqui


13
Eu não vejo essa opção no meu projeto Objective-C
Bryan

Você tem alguma biblioteca de projetos Swift no seu projeto Obj-C?
Rockstarwift

2
Se você estiver usando swift e cocoapods, o comando acima em cocoapods efetivamente faz isso. Se você não quiser alterar isso toda vez pod install, recomendo usar a resposta do @Tulleb acima.
Herbal7ea 13/09/16

Agora meu erro é Swift Compiler Error em uma classe auto
Eduardo Oliveros

1
Esta opção não está mais disponível.
Hemang

33

Eu tenho ignorado esse problema há um tempo e, enquanto isso, estou trabalhando em outras coisas - finalmente encontrei a solução para o meu problema.

Como meu projeto é o Objective-C, imaginei que um dos Pods que eu estava usando estivesse usando o Swift, verifiquei cada Pod e nenhum deles.

A solução final foi que meu modelo de dados principais foi definido para gerar código no Swift, embora eu os tenha gerado manualmente no menu Arquivo> Novo> NSManagedObjectSubclass. Tudo o que eu precisava fazer era mudar para o Objective-C.

captura de tela


1
Como você encontrou isso? Xcode não diz nada sobre isso. Você me salvou.
Ryan

2
De fato, minha solução e meu salvador. Obrigado! Estúpida como a Apple faz modelos CoreData automaticamente 'Swifty' quando toda a App é objetivo-c ....
Bob de Graaf

18

Esse problema também é visível no Xcode-8.1. Quando adicionamos um novo destino, como extensão ou widget, a biblioteca de terceiros é integrada no novo destino, com a ajuda de cocópodes. Após a instalação do Pod . Podemos enfrentar o mesmo erro acima.

Altere a versão do idioma Swift herdado em todas as configurações de criação de biblioteca para

Não .

insira a descrição da imagem aqui


Na minha configuração de caso, Usar versão do idioma do Swift herdado como Sim resolveu o problema.
Jayprakash Dubey

Certifique-se que para cada lib ter este problema que você quer definir Sim ou Não .. no meu caso não funcionou
hanzolo

Isso funcionou para mim. Por favor, certifique-se de fazer o mesmo para o alvo de teste bem
zizutg

@zizutg: - Temos que cruzar o check-in em todos os alvos. Obrigado em apontar novamente.
Shrawan

9

Se você estiver usando o Xcode 8 ou posterior

  1. Vá para Configurações de compilação
  2. Encontre usar a versão do idioma rápido herdado
  3. Sim - Swift 2.3
  4. Não - Swift 3.0 insira a descrição da imagem aqui

5

Adicione o código abaixo no final do 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

Estou trabalhando em um projeto que mesclou o código objetivo e o código swift. Anteriormente, usei a versão 2.3 do swift e, após a atualização para o swift 3, não consegui compilar o projeto. O Xcode reclamou da mensagem de erro mencionada.

Aparentemente, ainda havia alguma versão Swift desatualizada especificada no meu arquivo project.pbxproj. Havia o veloz 3.0.1 especificado:

SWIFT_VERSION = 3.0.1;

Visto que eu já tinha o 3.0.2 instalado:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Então, eu o corrigi alterando a versão Swift no arquivo project-pbxproj para:

SWIFT_VERSION = 3.0;

Parece que o especificador de versão no nível do patch foi muito específico.


4

No meu caso, basta fazer o seguinte

Escolha o projeto Target => Vá para a configuração Build => pesquise por "Swift Language Version" => dê ao Value a versão Swift atual

Isso é tudo Corrigido meu problema

Siga esta imagem


4

Eu recebi o mesmo erro. Tentei pesquisar "Usar a versão do idioma do Legacy Swift", mas não foi encontrado. Estou usando o Xcode 8.3.3 Depois de navegar muito e contornar, encontrei esta solução e funcionou para mim.insira a descrição da imagem aqui

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

defina "Usar versão do idioma do Swift herdado" como "SIM" se você estiver usando uma versão antiga do swift em seu projeto ou qualquer terceiro rápido. "Não" se o seu projeto atualizar para a versão rápida atual. se você não configurar sua versão rápida, após cada atualização e instalação, a estrutura do Pod precisará especificar isso.


2

Na verdade, tive que fazer uma pesquisa por "Legacy Swift" para poder alterá-lo de não especificado para "Sim". Quando simplesmente rolei para a seção descrita acima, não consegui alterá-lo. Espero que isso ajude alguém.


2

Meu projeto está escrito em Swift. Eu tenho o mesmo erro com fastlane. O que aconteceu foi o meu Xcode atualizado automaticamente, então tive que atualizar meu projeto para o Swift 3.0. Tenho muitos erros. A correção e a depuração estavam demorando muito e não valia a pena naquele momento, então decidi instalar uma versão mais antiga do Xcode. Reverti meu código para 2.3. Então fastlane betanão estava mais funcionando. Acontece que eu precisava definir a Command Line Tool para 7.3. insira a descrição da imagem aqui


1

Eu estava tendo esse mesmo problema e o resolvi fazendo o seguinte:

Em Projeto> Configurações de compilação:

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

Então no meu Podfile:

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

O uso dessas três configurações removeu todos os avisos e me permitiu compilar corretamente.

O mais obscuro e o que realmente obteve progresso na compilação foi alterar o SWIFT_VERSION no Podfile de 3 para 3,0, conforme sugerido aqui .


1

A partir do XCode 8, 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 usar o swift 2.3, basta ativar o sinalizador Use a versão do idioma do Legacy Swift para YES a partir da Configuração de compilação, e o XCode usará o Swift 2.3 para esse destino do projeto.


1

Antes de tentar soluções complicadas, aqui está uma verificação básica que você precisa fazer se for iniciante no Cocoapods e tiver esse problema.

Pode ser necessário:

  • Abra seu Podfile novamente
  • Verifique se a linha da plataforma não está comentada com um '#'. Finalmente, deve parecer algo como:

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

  • Salve seu Podfile, feche o Xcode e execute pod install novamente
  • Abra seu projeto.xcworkspace

Talvez seja só isso.

Caso contrário, você pode ir acima ;-)


1

Eu tive esse mesmo problema depois de atualizar para o xcode 8.3.2, mas a opção "Usar linguagem Swift herdada" desapareceu. Esta parece ser a opção de mudar agora: Versão Swift Lang

Usou essa correção com Alamofire e outras bibliotecas e tudo funciona bem.


1

Vá para Configuração de criação do projeto para o projeto e o Destino faz abaixo de dois.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Alterar para o mais recente Swift 3 .

Erro resolvido.

Se foi solucionada a sua correção de erro, goste.


1

No Xcode 9 beta. Vá para Configurações do projeto, Configurações da compilação, procure a versão do idioma Swift. No Xcode 9, você deve especificar se está usando o Swift 3.2 ou o Swift 4.


Eu tinha um projeto no 9.0b em que definir o projeto e o destino para o Swift 4 continuava produzindo o erro, definir o Swift 3.2 e removê-lo. ainda recebe um erro.
green_knight

1

Se você mudar ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESpara NOainda não funcionar, é por causa do problema do xcode, não do seu problema. Executando as seguintes etapas:

1.Altere a ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESpropriedade para estar YESno alvo de aviso

2. então ele mostrará um aviso na barra esquerda que recomenda que você mude para o swift 3.0

3. depois mude de volta para NO. Reconstrua o projeto, o xcode finalmente detectará sua alteração no NO!

Problema resolvido neste caso!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.