El módulo compilado con swift 3.0 no se puede importar en Swift 3.0.1

87

Actualicé Xcode a 8.1 GM y ahora recibo el siguiente error para SwiftyJSON. Otros marcos importados parecen funcionar. ¿Hay alguna manera de forzar que esto funcione en Swift 3 hasta que SwiftyJSON actualice su marco? Usé Carthage para importar / actualizar marcos. También intenté cambiar de Use Legacy Swift language versionencendido y apagado sin éxito.

El módulo compilado con Swift 3.0 no se puede importar en Swift 3.0.1: Módulos / SwiftyJSON.swiftmodule / arm64.swiftmodule

HH887
fuente

Respuestas:

171

SwiftyJson se está descargando precompilado por carthage. La descarga precompilada es con Swift Versión 3.0. Eso hace que el compilador se queje de que la versión no es correcta. Usando el siguiente comando:

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

SwiftyJson (y todos los demás marcos dentro de Carthage) se compilarán localmente usando la versión local de Swift (3.0.1) y el compilador ya no se quejará.

zirinisp
fuente
7
Probablemente me ahorraste una hora de búsqueda. Gracias.
djv
24
De nada. Para ser honesto, Carthage debería ser un poco más inteligente y verificar el número de versión rápido.
zirinisp
¿Alguna otra idea? Porque esto no funcionó para mí, aunque en mi caso estoy teniendo problemas con Unbox
Xernox
Esto fue excelente. ¿Hay alguna manera de insertar esto en el Cartfilepara que pueda escribir carthage updatesin que otros desarrolladores necesiten saber / preocuparse por las banderas adicionales?
Craig Otis
1
Tuve un error similar con PromiseKit 4.0 después de actualizar de XCode 8.0 a XCode 8.1 Estaba teniendo un error EXC_BAD_ACCESS. Al final, PromiseKit tuvo que recompilarse con swift 3.0.1 y se resolvió el problema.
Ricardo Anjos
21

Elimine la aplicación chache de DerivedData y reconstruya. el error puede corregirse.

La ruta DerivedData como esta:

~/Library/Developer/Xcode/DerivedData/
yo-chou
fuente
Funcionó para mí, elimino esta carpeta, elimino la carpeta de pod y uso "pod install". Y arreglado.
Jose Pose S
Hola. Esta solución funcionó para mí. ¿Puede explicar en detalle qué sucede cuando borramos datos derivados? ¿Cómo desaparece el error?
iPhoneDeveloper
También funcionó para mí, gracias.
Hasya
10

Asegúrese de haber colocado el nuevo paquete XCode 8.1 GM en su carpeta de Aplicaciones. Nos encontramos con este problema cuando uno de nosotros estaba ejecutando Carthage para actualizar nuestras dependencias, pero no había reemplazado la antigua aplicación XCode 8.0 en la carpeta de aplicaciones (8.1 GM se estaba ejecutando desde el escritorio).

Desea asegurarse de que cuando ejecute lo siguiente en la terminal: xcrun swift -versionque regrese Apple Swift version 3.0.1.

Clay Garrett
fuente
Esto funcionó para mí, ¡gracias! Además, el comando que funcionó en la terminal fue xcrun swift -version
HH887
2
Sigo teniendo el mismo problema. Cualquier otra sugerencia
harsh_v
2
Este comando funcionó para mí: actualización de carthage --platform iOS --no-use-binaries
HH887
2
Lo he hecho carthage update --platform iOS --no-use-binariesy todavía no funciona. Limpié mi proyecto y reinicié Xcode y todavía recibo el error. ¿Algo más que pueda probar?
Clifton Labrum
1
Intenté eso. VuelveApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum
9

Actualizar el valor predeterminado Xcodea uno nuevo en la terminal funcionó para mí.

Paso 1: use el siguiente comando para actualizar la versión de Xcode a la última en Terminal. Árbitro

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

Paso 2: ahora prueba el comando de actualización de carthage

carthage update --platform iOS
Mohammad Zaid Pathan
fuente
9

Solo para dar las últimas actualizaciones:

Carthage lanzó la versión 0.20 el 27 de febrero de 2017.

Carthage ahora solo usa el binario preconstruido si el binario preconstruido disponible es compatible .

Dicho esto, ya no tiene que usar: --no-use-binariespara evitar un marco de precompilación incompatible.

Así que asegúrese de tener la versión de Carthage mayor que0.20 y simplemente haga:

carthage update --platform iOS
kanekin
fuente
XCode 8.3.3 Después de actualizar Carthage a la versión 0.25 y después de hacer lo siguiente, me funcionó la actualización de carthage --platform iOS --no-use-binaries
anoop4real
@ anoop4real ¿No te funciona sin --no-use-binaries? Carthage debería poder detectar si el binario es compatible con su versión del compilador. Si no es compatible, se supone que eliminará automáticamente el binario descargado y creará el marco localmente.
kanekin
5

Como dijo @zirinisp:

  1. Puede usar el siguiente comando:carthage update --platform iOS --no-use-binaries
  2. Usando el siguiente comando: xcrun swift -versionpara ver la versión Swift
  3. Haga esto: Xcode->preferences->locationspara borrar los datos derivados y los datos de archivos, lo más importante es cambiar las herramientas de la línea de comandos a " Xcode 8.1"
  4. Usando el siguiente comando : xcrun swift -version, puede ver que la versión rápida es 3.0.1
  5. Conjunto Use Legacy Swift Language Version = NO

Espero que te ayude

kris
fuente
1
  1. Mueva la versión beta / GM si el Xcode a la carpeta / Aplicaciones y asígnele el nombre Xcode-beta

  2. Verifique la salida de:

    xcrun swift --version

Al ejecutar este comando en la terminal, su salida debe coincidir con la versión rápida que desea que compile la aplicación, porque Carthage usa la salida de este comando para determinar la versión local de Swift.

  1. Actualice la versión de Xcode a la última en Terminal ejecutando el siguiente comando:

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

  2. Cree las bibliotecas para iOS y evite que Carthage descargue binarios precompilados existentes (pero incompatibles), ejecutando el siguiente comando:

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

  3. Limpiar y construir

Tul
fuente
0

Tuve exactamente el mismo problema con la biblioteca XCTest_Gherkin, lo que funcionó para mí fue:

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

Espero eso ayude. Estoy usando Cocoapods.

Alan Steiman
fuente
0

En la configuración de compilación de Xcode, asegúrese de que sus rutas de búsqueda de Framework contengan la carpeta de compilación de Carthage adecuada:

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