Módulo compilado com swift 3.0 não pode ser importado em Swift 3.0.1

87

Eu atualizei o Xcode para 8.1 GM e agora estou recebendo o erro abaixo para SwiftyJSON. Outras estruturas importadas parecem funcionar. Existe uma maneira de forçar isso a funcionar no Swift 3 até que o SwiftyJSON atualize sua estrutura? Usei Carthage para importar / atualizar frameworks. Eu também tentei ligar Use Legacy Swift language versione desligar sem sucesso.

Módulo compilado com Swift 3.0 não pode ser importado em Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

HH887
fonte

Respostas:

171

O SwiftyJson está sendo baixado pré-compilado por carthage. O download pré-compilado está com o Swift Versão 3.0. Isso faz o compilador reclamar que a versão não está correta. Usando o seguinte comando:

carthage update --platform iOS --no-use-binaries

SwiftyJson (e todos os outros frameworks dentro de Carthage) serão compilados localmente usando a versão local do Swift (3.0.1) e o compilador não reclamará mais.

zirinisp
fonte
7
Você provavelmente me salvou uma hora de pesquisa. Obrigado.
djv
24
Você é bem vindo. Para ser honesto, cartago deve ser um pouco mais inteligente e verificar o número da versão do swift.
zirinisp
Alguma outra ideia? Porque isso não funcionou para mim, embora no meu caso eu esteja tendo problemas com o Unbox
Xernox
Isso era excelente. Existe uma maneira de incorporar isso ao Cartfilepara que eu possa digitar carthage updatesem que outros desenvolvedores precisem saber / se preocupar com os sinalizadores extras?
Craig Otis
1
Tive um erro semelhante com o PromiseKit 4.0 após atualizar do XCode 8.0 para o XCode 8.1. Estava tendo um erro EXC_BAD_ACCESS. No final, o PromiseKit teve que ser recompilado com o swift 3.0.1 e o problema foi resolvido.
Ricardo Anjos
21

Remova o chache do aplicativo de DerivedData e reconstrua. o erro pode ser corrigido.

O caminho DerivedData assim:

~/Library/Developer/Xcode/DerivedData/
i-chou
fonte
Funcionou para mim, eu removo este folter, removo a pasta pod e uso "pod install". E consertado.
Jose Pose S,
Oi. Essa solução funcionou para mim. Você pode explicar em detalhes o que acontece quando limpamos os dados derivados? Como o erro vai embora?
iPhoneDeveloper
Funcionou para mim também, obrigado.
Hasya
10

Certifique-se de ter colocado o novo pacote XCode 8.1 GM em sua pasta de Aplicativos. Encontramos esse problema quando um de nós estava executando o Carthage para atualizar nossas dependências, mas não substituiu o aplicativo XCode 8.0 antigo na pasta de aplicativos (o 8.1 GM estava executando a partir do Desktop).

Você quer ter certeza de que quando você executar o seguinte no terminal: xcrun swift -versionque ele retorne Apple Swift version 3.0.1.

Clay Garrett
fonte
Isso funcionou para mim, obrigado! Além disso, o comando que funcionava no terminal era xcrun swift -version
HH887
2
Ainda estou tendo o mesmo problema. Quaisquer outras sugestões
harsh_v
2
Este comando funcionou para mim: carthage update --platform iOS --no-use-binaries
HH887
2
Já fiz carthage update --platform iOS --no-use-binariese ainda não funciona. Limpei meu projeto e reiniciei o Xcode e ainda recebo o erro. Posso tentar mais alguma coisa?
Clifton Labrum
1
Eu tentei isso. Ele retornaApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum 01 de
9

Atualizar o padrão Xcodepara um novo no terminal funcionou para mim.

Etapa 1: use o seguinte comando para atualizar a versão do Xcode para a mais recente no Terminal. Ref

sudo xcode-select -switch <path/to/>Xcode.app

Etapa 2: agora tente o comando de atualização de carthage

carthage update --platform iOS
Mohammad Zaid Pathan
fonte
9

Apenas para dar as últimas atualizações:

Carthage lançou a versão 0.20 em 27 de fevereiro de 2017.

Carthage agora só usa o binário pré-compilado se o binário pré-compilado disponível for compatível .

Dito isso, você não precisa mais usar: --no-use-binariespara evitar uma estrutura de pré-construção incompatível.

Portanto, certifique-se de ter a versão do cartago maior do que0.20 e simplesmente faça:

carthage update --platform iOS
kanekin
fonte
XCode 8.3.3 Depois de atualizar o Carthage para a versão 0.25 e fazer a seguir, funcionou para mim atualização do carthage --platform iOS --no-use-binaries
anoop4real
@ anoop4real Não funciona para você sem --no-use-binaries? Cartago deve ser capaz de detectar se o binário é compatível com a versão do compilador. Se não for compatível, ele deve remover automaticamente o binário baixado e construir a estrutura localmente.
kanekin
5

Assim como @zirinisp disse:

  1. Você pode usar o seguinte comando:carthage update --platform iOS --no-use-binaries
  2. Usando o seguinte comando: xcrun swift -versionpara ver a versão Swift
  3. Faça isto: Xcode->preferences->locationspara limpar os dados derivados e os dados dos arquivos, o mais importante é alterar as ferramentas de linha de comando para "Xcode 8.1 "
  4. Usando o seguinte comando:, xcrun swift -versionvocê pode ver que a versão swift é 3.0.1
  5. Conjunto Use Legacy Swift Language Version = NO

Espero que te ajude

Kris
fonte
1
  1. Mova a versão beta / GM se o Xcode para a pasta / Aplicativos e nomeie-o como Xcode-beta

  2. Verifique a saída de:

    xcrun swift --version

executando este comando no terminal, sua saída deve corresponder à versão swift que você deseja que o aplicativo compile, porque Carthage usa a saída desse comando para determinar a versão local do Swift.

  1. Atualize a versão do Xcode para a mais recente no Terminal executando o seguinte comando:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Crie as bibliotecas para iOS e evite que Carthage baixe binários pré-compilados existentes (ainda incompatíveis), executando o seguinte comando:

    carthage update --platform iOS --no-use-binaries

  3. Limpar e construir

Tul
fonte
0

Eu tive exatamente o mesmo problema com a biblioteca XCTest_Gherkin, o que funcionou para mim foi:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Espero que ajude. Estou usando Cocoapods.

Alan Steiman
fonte
0

Em Xcode Build Settings, certifique-se de que seus Framework Search Paths contenham a pasta Carthage Build apropriada:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
John Cromie
fonte