El módulo compilado con Swift 4.0 no se puede importar en Swift 4.0.1

92

Sin embargo, he recompilado el marco usando el mismo Xcode y todavía me da este error.

  • Base SDK iOS 11.1 para ambos
  • Swift Language Version Swift 4.0 para ambos
  • No usar Pods / Carthage

Espero que alguien sepa

Simón
fuente
Parece que Apple necesita reconsiderar ese aviso de depreciación de 10 años para el Objetivo C: ^) Esto me ha afectado en> 1 proyecto ahora y en ambos estos son marcos binarios de terceros.
Anton Tropashko

Respuestas:

139

Actualizar:

Para versiones de lanzamiento de Xcode:

Este error (y errores similares relacionados con Swift 4.1, 4.2, etc.) se producirán al abrir un proyecto con Xcode 9.1, 9.2, 9.3, 9.4, 10, etc. que utiliza marcos que se crearon con herramientas de Xcode anteriores.

Para solucionar el problema, actualice y reconstruya sus marcos usando Carthage ( carthage update --platform iOS), Cocoapods ( pod updateo pod install), o manualmente, con las nuevas herramientas Xcode actualizadas. Las herramientas deben actualizarse automáticamente cuando actualice Xcode, pero si no, puede seguir los pasos que se describen a continuación en la respuesta original.

También es posible que deba limpiar su proyecto cmd + shift + ky posiblemente su carpeta de compilación cmd + option + shift + kpara que Xcode no use compilaciones de marco en caché.

En algunos casos, es posible que también deba eliminar su carpeta de datos derivados (se encuentra fácilmente yendo a Preferencias de Xcode -> Ubicaciones -> Carpeta de datos derivados ( Gracias Stunner )

Para versiones beta de Xcode:

Vea la respuesta original a continuación y luego siga los pasos anteriores.

Respuesta original:

Probablemente aún tenga sus herramientas de xcodebuild configuradas en Xcode 9.0, que se compila con Swift 4.0 y es incompatible con Swift 4.0.1 de Xcode 9.1 beta.

Verifique en la terminal usando el comando:

xcodebuild -version

O simplemente vaya a las preferencias de Xcode -> Ubicaciones y verifique / cambie las herramientas de línea de comando a Xcode 9.1. Entonces deberías estar listo.

Zig
fuente
1
También borré los datos derivados y borré el proyecto, no sé si es necesario para todos, pero aquí parecía estar. Gracias
Simon
3
Hola @Zig. Un repositorio que uso en github (mattdonnelly / swifter) está en Swift 4.0, pero obviamente se ha compilado usando XCode 9.0, así que tengo este problema. ¿Cuáles son los pasos necesarios para recompilar el cocoapod de otra persona en Github para XCode 9.1 y superior?
Mamá de Joseph Beuys
1
¿Hay alguna forma de agregar una herramienta de línea de comandos? Solo tengo Xcode 9.3 en el menú desplegable de mi línea de comandos. y yo también tengo este problema
tara tandel
1
Algunos de mis vainas no están listos para Swift 4.2, por lo tanto, tenía que echar la Swift Language Versionque Swift 4para aquellos. Entonces funcionó.
skofgar
1
Más 1 para el acceso directo para limpiar la carpeta de compilación, no era algo que supiera hacer de inmediato.
Matt
25

Mi problema se debió a que no se estaba compilando un marco externo para Swift 4.0.2. Había agregado este archivo a través de Carthage , por lo que ejecuta:

carthage update --platform iOS

Y luego limpiar el proyecto cmd + shift + ky la carpeta de compilación cmd + option + shift + ky eliminar la carpeta de datos derivados (simplemente moverlo a la papelera también funciona) funcionó para mí.

Persona maravillosa
fuente
2
de hecho, esta es esencialmente la solución. ¡Lo mismo sucedió hoy (18 de abril), debido a la última actualización rápida de Apple! :)
Fattie
cmd + option + shift + k es lo que hizo el truco después de actualizar Carthage. ¡Gracias!
Leonardo Leite
15

En mi caso, descargué la versión Beta de xCode 11 para probar SwiftUI. Cuando ejecuto mi proyecto, aparece el error "El módulo compilado con Swift 5.1 no puede ser importado por el compilador Swift 5.0.1: ..." .

Para solucionar este problema. Cambié la herramienta de línea de comando xCode a la nueva herramienta de línea de comentarios xCode 11. Después de eso, puede crear un nuevo proyecto de xcode con SwiftUI.

Xcode -> Preferencias -> Ubicación -> Herramienta de línea de comandos de XCode

Herramienta Xcode Commend Line

Espero que esto ayude a alguien que quiera probar con nuevo freamework :)

Emre Gürses
fuente
9

Instale Xcode Toolchain de la versión específica de Xcode que estaba funcionando para usted desde aquí .

Una cadena de herramientas de Xcode incluye una copia del compilador, lldb y otras herramientas relacionadas necesarias para proporcionar una experiencia de desarrollo coherente para trabajar en una versión específica de Swift.

Abra las Preferencias de Xcode, vaya a Componentes> Cadenas de herramientas y seleccione la cadena de herramientas Swift instalada.

Esto le permitirá compilar y ejecutar la aplicación por ahora.

Tina
fuente
Después de 2 días de buscar y probar todas las soluciones posibles con la actualización de carthage, bootstrap, configuraciones de idioma rápidas, etc., encontré la respuesta correcta aquí :)
memresubasi
7

Encontré este problema con Xcode 10 beta, que agrega Swift 4.2. Mi problema no estaba relacionado con Carthage ni con ninguna dependencia externa.

Vaya a YourTarget > Build Settings > Swift Language Versionpara todos sus objetivos de Xcode.

Los míos estaban listos Swift 4.

Después de agregar una fase de compilación de archivos de copia, comencé a recibir el error

: 0: error: el compilador de Swift 4.2 no puede importar el módulo compilado con Swift 4.1.2: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

El comando MergeSwiftModule falló con un código de salida distinto de cero

Luego configuré cada objetivo Swift Language Versionen Swift 4.2, lo que eliminó el error.

Sin embargo, no estoy seguro de por qué se produjo el error en primer lugar, ya que tener todos los objetivos establecidos en Swift 4debería ser igualmente válido.

pkamb
fuente
1
Tengo problemas para encontrarBuild Settings
Chandrew
@Chandrew haga clic en su objetivo primero. Respuesta actualizada.
pkamb
3

En mi caso (Xcode 9.2):

Fui a xcode Preferences > Locations > Derived Data

Luego eliminé los datos e hice una compilación limpia y estaba bien.

user3288482
fuente
1

En mi caso, utilicé CocoaPods con un complemento cocoapods-binarypara preconstruir bibliotecas en binarios. Después de actualizar Xcode de 10 a 11, Xcode me da este error:

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

Lo soluciono eliminando el /Podsdirectorio y ejecutándolo pod install.

Benjamin Wen
fuente
0

En mi caso, volví a compilar el marco con la versión de la que se quejaba.

Para volver a compilar, ejecute pod updateo actualice carthage (cualquiera que esté usando) y compile el proyecto.

Luego busque el marco en el buscador. Copie y pegue theFramework.frameworken su proyecto y asegúrese de "Copiar elementos si es necesario". Cree el proyecto de nuevo y debería funcionar.

Joseph Francis
fuente