O módulo compilado com o Swift 5.1 não pode ser importado pelo compilador Swift 5.1.2

91

Eu tenho uma estrutura (neste caso, é RxSwift) que compilei usando o Xcode 11.0 no RxSwift.frameworkpacote de estilo tradicional

Essa multa importada para o Xcode 11.0 e também a 11.1 nunca teve problemas com ela

Hoje, após o lançamento do Xcode 11.2 pela Apple, atualizei e recebi o erro:

O módulo compilado com o Swift 5.1 não pode ser importado pelo compilador Swift 5.1.2

Estou acostumado a desviar rapidamente do compilador e sei que posso recompilar o RxSwift usando o Xcode 11.2 e continuar, mas o recurso principal do Swift 5.1 foi a estabilidade do módulo .

Fiquei com a impressão de que agora que temos estabilidade do módulo, os frameworks não precisarão ser recompilados a cada nova versão do Xcode, mas esse claramente não é o caso.

Se alguém puder explicar o que está acontecendo aqui, eu agradeceria muito. O Xcode 11.2 está exibindo um bug? ou de alguma forma eu preciso dizer que queria estabilidade do módulo quando compilei originalmente com o Xcode 11.0?

Orion Edwards
fonte
Para mim Toolchain com versão mais antiga rápida funcionou: stackoverflow.com/a/43142147/5846135
Zeero0

Respostas:

108

OK, acontece que, se você assistir ao vídeo da WWDC, eles explicam: https://developer.apple.com/videos/play/wwdc2019/416/

Você precisa definir a opção Compilar Bibliotecas para Distribuição como Sim nas configurações de compilação da estrutura, caso contrário, o compilador rápido não gera os .swiftinterfacearquivos necessários, que são a chave para futuros compiladores poderem carregar sua biblioteca antiga.

Isso acaba no seu arquivo project.pbxproj como:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Depois de definir esse sinalizador, uma estrutura que compilei usando o Xcode 11.0 (swift 5.1) pôde ser usada pelo Xcode 11.2 (swift 5.1.2) e tudo parece estar funcionando corretamente.

Espero que esta pergunta / resposta sirva como uma referência útil para todos que não assistiram a todos os vídeos da WWDC

Se o erro persistir, vá para Produto > Limpar pasta de compilação e Compilar novamente.

Orion Edwards
fonte
11
Impressionante! Agora vamos esperar que todos os quadros desenvolvedores 3rd party descobrir isso - ha ha :)
Mihai Fratu
25
Isso não ajuda no meu caso. Eu o defino como "SIM", mas ainda estou recebendo o erro. Alguma ideia?
DavidOhara #
3
Estou trabalhando com Cartago e 10 estruturas ... ish. É carthageinteligente o suficiente para capturar isso no meu arquivo .pbxproj ou, como o @MihaiFratu diz acima, todos os desenvolvedores de estruturas de terceiros precisam definir isso sozinhos em seus projetos de estrutura?
Nteissler 01/11/19
9
@davidOhara, no meu caso, tinha a ver com esse problema conhecido no Xcode 11.2: se um módulo for construído com BUILD_LIBRARIES_FOR_DISTRIBUTION e contiver um tipo público com o mesmo nome que o próprio módulo, os clientes não conseguirão importar o módulo. (19481048) (FB5863238) nas notas de versão do Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino
2
@davidOhara Infelizmente, não encontrei uma solução alternativa. Para nós, renomear a classe também não é possível, pois é a classe principal de nossa estrutura e quebraria o código de nosso cliente. Se eu construir a estrutura usando o Xcode 11.2, ele será compilado no Xcode 11.2, mas não será compilado no 11.1 ou anterior. A versão de hoje do Xcode 11.2.1 GM não corrigiu o problema. Aqui está o ticket do rastreador de problemas rápidos, caso você queira ficar de olho nele: bugs.swift.org/browse/SR-11704 Há também um radar anexado a ele.
Richard Chirino
2

Eu tive o mesmo erro ao importar bibliotecas de terceiros. Corrigi-o usando cadeias de ferramentas no Xcode e tendo o lançamento em 19 de setembro de 2019 a partir daqui https://swift.org/download/#releases . Depois disso, tive que reimportar minhas bibliotecas e funcionou.

Sergio
fonte
esta foi a solução mais simples, graças a um monte
Krishan Patel
Eu tenho um problema no framework. O módulo compilado com o Swift 5.1.2 não pode ser importado pelo Swift 5.2.2. Como podemos resolver esse problema?
Kishan Suthar 18/04
0

Você pode usar Carthage para adicionar a estrutura RxSwift.

Basicamente, Cartago oferece um pacote semelhante ao estilo tradicional RxSwift.framework .

Então tente carthage update --no-use-binaries.

iMoeNya
fonte
Votos negativos porque com o carthage você está apenas reconstruindo sua biblioteca no novo compilador. A questão é explicitamente sobre o carregamento de bibliotecas binárias criadas pelo compilador anterior
Orion Edwards
0

Isso fez o erro do meu compilador desaparecer.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
Rinni
fonte
brew bundle? O que isso faz?
skywinder 16/04
Votos negativos porque com o carthage você está reconstruindo sua biblioteca no novo compilador. A questão é explicitamente sobre o carregamento de bibliotecas binárias criadas pelo compilador anterior
Orion Edwards