Xcode 8 con proyecto mixto Swift y Objective-c generado " moduleName-Swift.h " encabezado no encontrado


Tengo un proyecto con Swift mixto y Objective-C en Xcode 8 que utiliza el "moduleName-Swift" generado.h " archivo de cabecera para importar swift en las clases Objective-c, pero el preprocesador no es capaz de encontrar el archivo de cabecera generado y lanza un error en la importación.

"Problema léxico o Preprocesador : 'moduleName-Swift.h archivo no encontrado '"

introduzca la descripción de la imagen aquí

El proyecto compila bien, pero el preprocesador arroja errores para el encabezado que no se encuentra y para cualquier clase Swift llamada dentro de la clase no hay resaltado de sintaxis o finalización de código. Es una lucha trabajar con clases Swift en Objective-c que no son reconocidas por Xcode 8, pero aún así compilar bien.

¿Alguna idea sobre cómo apaciguar al preprocesador en Xcode 8?

Author: myuiviews, 2016-09-23

5 answers

Tuve exactamente el mismo problema. Encontró la solución después de agregar un nuevo archivo apuntando a un solo objetivo (por error) y notar que no tenía ningún problema para leer las clases Swift. Por lo tanto, si tiene múltiples destinos, y ya que la migración no tuvo la necesidad de compilarlos y ejecutarlos, sugiera que lo haga.

 24
Author: Ernesto Fernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-28 16:02:23

Tenemos este problema cuando tenemos varios objetivos. Si la variable Nombre de encabezado de interfaz Generado por Objective-c en el compilador Swift de destinos recién creados es diferente del valor del destino original. Cámbialo al mismo valor que el destino original. Véase lo siguiente:

Change, newtargetname-Swift.h to originaltargetname-Swift.h para el nuevo objetivo

introduzca la descripción de la imagen aquí

 5
Author: Mesut GÜNEŞ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-19 14:21:52

Para solucionar este problema Xcode 9.2, Después de una larga investigación llegué a saber que mi "Nombre de encabezado de interfaz generado por Objective-c" lleva el nombre del Nombre del producto " productname-Swift.h"introduzca la descripción de la imagen aquí

 2
Author: datha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 09:49:36

Necesitas agregar esto en tu configuración de compilación.

Puede haber un problema al migrar a Xcode 8, donde tendrá unspecified en el archivo de encabezado Swift de configuración de compilación.

Esto si de killerz

Ir a Configuración 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 .m archivo # import " YourModule-Swift.h "

 1
Author: Tal Zion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:01

Si

  • los objetivos normales de su producto funcionan bien, pero
  • obtiene el error al ejecutar sus objetivos de prueba {

Tenga en cuenta que cada destino usa (y debería usar) un nombre de archivo diferente para el nombre de cabecera de la interfaz Generada por Objective-C.

Esto significa que no puede importar el archivo de encabezado generado en sus archivos Objective-C .h, porque no se encontrarán en el objetivo de prueba:

captura de pantalla del error de importación al usar .archivo h

En su lugar, debe mover estos #import sentencias en su Objective-C .m (archivos de implementación), donde se construirán con éxito.


Si necesita hacer referencia a clases Swift en un archivo .h, use la directiva @class , por ejemplo:

//
//  ViewController.h
//  import-example
//

#import <UIKit/UIKit.h>

@class SomeSwiftClass;

@interface ViewController : UIViewController

- (NSString *) titleFromGenerator:(SomeSwiftClass *)generator;

@end
 1
Author: Aaron Brager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-03 18:56:12