Módulo compilado com Swift 4.0 não pode ser importado em Swift 4.0.1

90

No entanto, recompilei o framework usando o mesmo Xcode e ainda me dá esse erro.

  • SDK básico iOS 11.1 para ambos
  • Swift Language Versão Swift 4.0 para ambos
  • Não usando Pods / Cartago

Espero que alguém saiba

Simon
fonte
Parece que a Apple precisa reconsiderar aquele aviso de descontinuação de 10 anos para o Objetivo C: ^) Isso me incomodou em> 1 projeto agora e em ambos esses são frameworks binários de terceiros.
Anton Tropashko,

Respostas:

137

Atualizar:

Para versões de lançamento do Xcode:

Este erro (e erros semelhantes envolvendo Swift 4.1, 4.2, etc.) ocorrerá ao abrir um projeto com Xcode 9.1, 9.2, 9.3, 9.4, 10, etc. que usa estruturas que foram construídas com ferramentas Xcode anteriores.

Para corrigir o problema, atualize e reconstrua seus frameworks usando Carthage ( carthage update --platform iOS), Cocoapods ( pod updateou pod install), ou manualmente, com as novas ferramentas Xcode atualizadas. As ferramentas devem ser atualizadas automaticamente quando você atualiza o Xcode, mas se não, você pode seguir as etapas descritas abaixo na resposta original.

Você também pode precisar limpar seu projeto cmd + shift + ke possivelmente sua pasta de compilação cmd + option + shift + kpara fazer com que o Xcode não use compilações de framework em cache.

Em alguns casos, você também pode precisar excluir sua pasta de dados derivados (facilmente encontrada em Preferências do Xcode -> Locais -> Pasta de dados derivados ( Obrigado, Stunner )

Para versões beta do Xcode:

Veja a resposta original abaixo e siga as etapas acima.

Resposta Original:

Você provavelmente ainda tem suas ferramentas xcodebuild configuradas para Xcode 9.0, que é compilado com Swift 4.0 e é incompatível com Swift 4.0.1 do Xcode 9.1 beta.

Faça check-in no terminal usando o comando:

xcodebuild -version

Ou simplesmente acesse as preferências do Xcode -> Locais e verifique / altere as ferramentas de linha de comando para Xcode 9.1. Você deve estar pronto então.

Zig
fonte
1
Também limpei os dados derivados e limpei o projeto, não sei se necessário para todos, mas parecia que estava aqui. Obrigado
Simon,
3
Olá @Zig. Um repositório que uso no github (mattdonnelly / swifter) está no Swift 4.0, mas obviamente foi compilado usando o XCode 9.0, então estou tendo esse problema. Quais são as etapas necessárias para recompilar o cocoapod de outra pessoa no Github para XCode 9.1 e superior?
Mãe de Joseph Beuys em
1
existe uma maneira de adicionar ferramenta de linha de comando? Acabei de ter o Xcode 9.3 no menu suspenso da linha de comando. e eu também tenho esse problema
tara tandel
1
Alguns dos meus pods não estão prontos para o Swift 4.2, portanto, tive que fixá Swift Language Version- Swift 4los para eles. Então funcionou.
skofgar
1
Mais 1 para o atalho para limpar a pasta de compilação - não era algo que eu sabia fazer de imediato.
Matt
25

Meu problema era devido a uma estrutura externa que não estava sendo compilada para o Swift 4.0.2. Eu adicionei este arquivo via Carthage , então executando:

carthage update --platform iOS

E, em seguida, limpar o projeto cmd + shift + ke a pasta de construção cmd + option + shift + ke excluir a pasta de dados derivados (simplesmente movê-la para a lixeira também funciona) funcionou para mim.

Stunner
fonte
2
na verdade, esta é essencialmente a solução. A mesma coisa aconteceu hoje (18 de abril), devido à última atualização rápida da Apple! :)
Fattie
cmd + opção + shift + k é o que fez o truque após atualizar Cartago. Obrigado!
Leonardo Leite
15

No meu caso, baixei a versão beta do xCode 11 para testar o SwiftUI. Quando executo meu projeto, recebo o erro "Módulo compilado com Swift 5.1 não pode ser importado pelo compilador Swift 5.0.1: ..." .

Para corrigir esse problema. Eu mudei a ferramenta de linha de comando xCode para a nova ferramenta de linha de comentário xCode 11. Depois disso, você pode criar um novo projeto xcode com SwiftUI.

Xcode -> Preferências -> Localização -> Ferramenta de linha de comando XCode

Ferramenta Xcode Commend Line

Espero que isso ajude alguém que queira testar novos freamework :)

Emre Gürses
fonte
9

Instale o Xcode Toolchain da versão específica do Xcode que estava funcionando para você a partir daqui .

Um conjunto de ferramentas Xcode inclui uma cópia do compilador, lldb e outras ferramentas relacionadas necessárias para fornecer uma experiência de desenvolvimento coesa para trabalhar em uma versão específica do Swift.

Abra as Preferências do Xcode, navegue até Componentes> Conjuntos de ferramentas e selecione o conjunto de ferramentas Swift instalado.

Isso permitirá que você compile e execute o aplicativo por enquanto.

Tina
fonte
Após 2 dias pesquisando e tentando todas as soluções possíveis com atualização de carthage, bootstrap, configurações de idioma rápidas, etc. Eu encontrei a resposta certa aqui :)
memresubasi
7

Tive esse problema com o Xcode 10 beta, que adiciona o Swift 4.2. Meu problema não estava relacionado a Cartago ou quaisquer dependências externas.

Vá para YourTarget > Build Settings > Swift Language Versionpara todos os seus destinos Xcode.

Os meus foram configurados para Swift 4.

Depois de adicionar uma fase de compilação de cópia de arquivos, comecei a receber o erro

: 0: erro: o módulo compilado com o Swift 4.1.2 não pode ser importado pelo compilador Swift 4.2: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Command MergeSwiftModule falhou com um código de saída diferente de zero

Em seguida, configurei cada alvo Swift Language Versioncomo Swift 4.2, o que eliminou o erro.

Não tenho certeza por que o erro estava ocorrendo em primeiro lugar, porém, como ter todos os alvos definidos como Swift 4deve ser igualmente válido.

pkamb
fonte
1
Estou tendo problemas para encontrarBuild Settings
Chandrew
@Chandrew clique em seu alvo primeiro. Resposta atualizada.
pkamb
3

No meu caso (Xcode 9.2):

Eu fui para o Xcode Preferences > Locations > Derived Data

Em seguida, apaguei os dados e fiz uma compilação limpa e estava tudo bem.

user3288482
fonte
1

No meu caso, usei CocoaPods com plugin cocoapods-binarypara pré-construir bibliotecas para binários. Depois de atualizar o Xcode de 10 para 11, o Xcode me dá este erro:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

Eu conserto removendo o /Podsdiretório e executando pod install.

Benjamin Wen
fonte
0

No meu caso, eu recompilei o framework com qualquer versão da qual ele estava reclamando.

Para recompilar, execute pod updateou atualize o cartago (qualquer um que você estiver usando) e construa o projeto.

Em seguida, procure a estrutura no localizador. Copie e cole no theFramework.frameworkseu projeto e certifique-se de “Copiar itens se necessário.” Compile o projeto novamente e ele deve funcionar.

Joseph Francis
fonte