programar programación programacion objective lenguaje entre diferencias ios objective-c xcode swift

ios - programacion - swift(lenguaje de programación)



importe la clase swift en object-c,<myModule>-Swift.h archivo no encontrado (7)

Actualizado mayo 2018 Xcode 9.3

  1. Configuraciones de compilación-> Nombre de encabezado de interfaz generado por Objective-C
    y establezca el valor en YourModule-Swift.h (esto generalmente ya está establecido, este es el nombre de archivo que necesita importar en el archivo .m #import "YourModule-Swift.h"

(Ejemplo, Proyecto llamado CData )

  1. Igual que en el Paso 1, vaya a Configuración de compilación y busque "Definir módulo", configure ambos valores en SÍ

  2. Cree una clase que extienda NSObject en el archivo .swift

  1. Construir el proyecto de nuevo

  2. Importe el archivo YourModule-Swift.h archivo .m ( YourModule-Swift.h en cuenta que se Mymodule mayúsculas y minúsculas, Mymodule ! == MyModule )

Tengo un proyecto iOS escrito con Objective-C. Creé una clase Swift en el proyecto, el archivo de encabezado puente para acceder al objetivo-c en Swift se genera con éxito y funciona bien.

Mi problema es al revés. Quiero importar la clase Swift en el código objetivo-c.

En xcode, target -> Build Settings -> Swift Compiler , veo el campo Objective-C Generated Interface Header Name con el valor myModule-Swift.h , pero cuando importo este encabezado en mi clase de objetivo-c :

#import "myModule-Swift.h"

Me sale un error de compilación:

myModule-Swift.h file not found

y en proyecto, tampoco puedo encontrar este archivo. ¿Como puedó resolver esté problema?

Mi versión de xcode es 6.4


En caso de que alguien se pregunte por qué, después de pasar horas en este tema, aún no se resuelve, es posible que se encuentre en una situación similar a la mía, donde en realidad estaba desarrollando un marco , en lugar de una aplicación.

En tal caso, el formato de la declaración de importación para el encabezado de interfaz generado por Objective-C es el siguiente:

#import <ModuleName/ModuleName-Swift.h>


Me apilé esto por un buen rato. En mi caso, el nombre de mi objetivo es algo así como "my-app" usando el guión como parte del nombre del objetivo. Intenté #import "my-app-Swift.h" , pero Xcode me seguía dando errores.

Busqué en la carpeta ''DerivedData'' y encontré "my_app-Swift.h". Así que si estás usando algunos caracteres interesantes para el nombre de destino. Puede intentar reemplazar aquellos con subrayado _ .


Me encontré con el mismo problema ayer y trabajé durante horas para solucionarlo sin éxito. Otros pueden haber estado en el mismo bote que yo. Hice todos los pasos descritos anteriormente, pero nada funcionó.

La causa de la ruptura de la mina se debió a artefactos de nombre de proyecto en todo mi proyecto (de haber cambiado previamente su nombre de manera incorrecta).

Si todos los pasos anteriores fallan, sugeriría hacer como lo hice y cambiar el nombre de su proyecto para que Xcode pueda restablecer algunas cosas ... Eso me solucionó el problema. ¡Así funcionó a la perfección!


Mi adición a la respuesta de Daniel Kroms:

  • Nunca agregue -Swift.h Header al encabezado. Incluso si parece funcionar. ¡Agregue la importación al archivo .m solamente!

  • En caso de que use en sus clases de encabezado swift, haga una declaración de reenvío con @class swiftclassname antes de su @interface

Entonces verás tus errores reales en tu código.


OMG ... la declaración de importación real no era "class-Swift.h" sino más bien "projectname-Swift.h"

Puede encontrar el nombre del archivo si busca en la configuración de compilación-> Swift Compiler Code Generation -> Nombre de encabezado de interfaz generado por Objective-C

El archivo no se generó cuando arrastré la fuente Swift a la GUI. Solo cuando hice clic derecho-> Agregar archivo a "proyecto". Luego pidió que se generen los archivos de cabecera.


Para mí, el problema era que tenía bitcode activado. Cuando hice clic en "Actualizar a la configuración del proyecto recomendada", cambió algunas configuraciones que probablemente son las culpables. Pasé "Enabled Bitcode" a "No" en la configuración de compilación y ahora está arreglado.