El compilador de Swift 5.1.2 no puede importar el módulo compilado con Swift 5.1.2

91

Tengo un marco (en este caso es RxSwift) que he compilado usando Xcode 11.0 en el RxSwift.frameworkpaquete de estilo tradicional

Esto importó bien en Xcode 11.0 y también 11.1 nunca tuvo ningún problema con él

Hoy, con el lanzamiento de Apple de Xcode 11.2, actualicé y me aparece el error:

El compilador de Swift 5.1.2 no puede importar el módulo compilado con Swift 5.1.2

Estoy acostumbrado a desajustes rápidos del compilador, y sé que puedo recompilar RxSwift usando Xcode 11.2 y continuar, pero la característica principal de Swift 5.1 fue la estabilidad del módulo .

Tenía la impresión de que ahora que tenemos la estabilidad del módulo, los marcos no tendrán que volver a compilarse con cada nueva versión de Xcode, sin embargo, este no es el caso.

Si alguien puede explicar lo que está pasando aquí, lo agradecería mucho. ¿Xcode 11.2 exhibe un error? ¿o de alguna manera necesito decirle que quería estabilidad del módulo cuando compilé originalmente con Xcode 11.0?

Orion Edwards
fuente
Para mí, Toolchain con una versión rápida anterior funcionó: stackoverflow.com/a/43142147/5846135
Zeero0

Respuestas:

108

OK, resulta que si ves el video WWDC, lo explican: https://developer.apple.com/videos/play/wwdc2019/416/

Debe establecer la opción Construir bibliotecas para distribución en en la configuración de compilación de su marco, de lo contrario, el compilador rápido no genera los .swiftinterfacearchivos necesarios que son la clave para que futuros compiladores puedan cargar su biblioteca anterior.

Esto termina en su archivo project.pbxproj como:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Después de configurar este indicador, Xcode 11.2 (swift 5.1.2) pudo usar un marco que compilé usando Xcode 11.0 (swift 5.1) y todo parece funcionar correctamente.

Esperemos que esta pregunta / respuesta sirva como una referencia útil para todos los que no han visto todos los videos de WWDC

Si el error persiste, vaya a Producto > Limpiar carpeta de compilación y vuelva a compilar .

Orion Edwards
fuente
1
¡Increíble! Ahora esperemos que todos los desarrolladores de frameworks de terceros descubran esto - ja ja :)
Mihai Fratu
25
Esto no ayuda en mi caso. Lo configuré en "SÍ" pero todavía recibo el error. ¿Algunas ideas?
davidOhara
3
Estoy trabajando con Cartago y 10 frameworks ... ish. Es lo carthagesuficientemente inteligente como para aprender esto de mi archivo .pbxproj , o como dice @MihaiFratu arriba, ¿todos los desarrolladores de frameworks de terceros necesitan configurar esto ellos mismos en sus proyectos de framework?
nteissler
99
@davidOhara en mi caso tuvo que ver con este problema conocido en Xcode 11.2: si un módulo está construido con BUILD_LIBRARIES_FOR_DISTRIBUTION y contiene un tipo público con el mismo nombre que el módulo, los clientes no podrán importar el módulo. (19481048) (FB5863238) en las notas de la versión Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino
2
@davidOhara Lamentablemente no he encontrado una solución. Para nosotros, renombrar la clase tampoco es posible, ya que es la clase principal de nuestro marco y rompería el código de nuestro cliente. Si construyo el framework usando Xcode 11.2, entonces se compila en Xcode 11.2 pero no se compilará en 11.1 o anterior. El lanzamiento de Xcode 11.2.1 GM de hoy no ha solucionado el problema. Aquí está el boleto en el rastreador de problemas rápidos en caso de que quiera vigilarlo: bugs.swift.org/browse/SR-11704 También hay un radar conectado.
Richard Chirino
2

Tuve el mismo error al importar bibliotecas de terceros. Lo arreglé usando cadenas de herramientas en Xcode y tomando el lanzamiento el 19 de septiembre de 2019 desde aquí https://swift.org/download/#releases . Después de eso tuve que volver a importar mis bibliotecas y funcionó.

Sergio
fuente
esta fue la solución más simple, muchas gracias
Krishan Patel
Tengo un problema en el módulo Framework compilado con Swift 5.1.2 no puede ser importado por Swift 5.2.2 ¿cómo podemos resolver este problema?
Kishan Suthar
0

Puede usar Carthage para agregar el marco RxSwift.

Básicamente, Carthage le ofrece un paquete de estilo de marco tradicional RxSwift .

Entonces inténtalo carthage update --no-use-binaries.

iMoeNya
fuente
Voto negativo porque con Cartago solo estás reconstruyendo tu biblioteca en el nuevo compilador. La pregunta es explícitamente sobre la carga de bibliotecas binarias creadas por el compilador anterior
Orion Edwards
0

Esto hizo que mi error de compilación desapareciera.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
Rinni
fuente
brew bundle? ¿Qué hace?
skywinder
Voto negativo porque con Cartago estás reconstruyendo tu biblioteca en el nuevo compilador. La pregunta es explícitamente sobre la carga de bibliotecas binarias creadas por el compilador anterior
Orion Edwards