objective c - sirven - Objetivo C al archivo de encabezado Swift con mĂșltiples objetivos
para que sirven las librerias de lenguaje c (6)
Llamo con éxito a mis clases Swift desde el objetivo C (para el destino ''MyApp'') a través de la declaración de importación:
#import "MyApp-Swift.h"
Ahora he creado un nuevo objetivo llamado "MyAppLite"
Cuando compilo el nuevo objetivo, obtengo errores porque el código requiere "MyApp-Swift.h", pero el compilador está creando "MyAppLite-Swift.h"
Entonces, necesito crear un encabezado condicional Swift / ObjC
#import
para el objetivo contra el que estoy compilando.
¿Cómo se puede hacer esto, o hay una mejor manera?
Bueno, la única forma en que puedo arreglarlo es ...
#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif
Tenga en cuenta que si hay caracteres ''ilegales'' en el nombre del módulo de mi producto, deben reemplazarse con guiones bajos.
¡Espero que ayude!
La única forma de trabajar es la siguiente:
1- desde el primer objetivo (que tiene un puente de trabajo)
Configuración de construcción
seleccione
Objetivo C Encabezado de puente
2- Copia el
encabezado de puente del objetivo C
3- abre la otra
configuración de compilación de
destino
4- Péguelo 5- cambie el archivo de encabezado a su nuevo archivo de encabezado (es decir, objetivo Bh)
(ahora tienes esta opción para dos objetivos)
La mejor manera que he encontrado para abordar este problema es en la configuración de proyecto compartido de Xcode. Puede buscar la siguiente configuración:
Nombre de encabezado de interfaz generado por Objective-C *
Si establece ese valor en un nombre de encabezado común, como "MyProject-Swift.h", se aplicará a cada uno de sus objetivos y podrá usar de forma segura la declaración de importación en cualquiera de sus archivos Objective-C. Esto le permite continuar utilizando nombres de módulos de productos únicos para cada objetivo, si es necesario.
He probado esto en Xcode Versión 6.4 (6E35b).
* Nota: Esto aparecerá bajo la configuración del compilador Swift, que solo es visible si tiene archivos fuente Swift agregados a su proyecto. Además, si un objetivo no tiene ninguna fuente Swift asociada, las opciones del compilador Swift no estarán visibles para la configuración de compilación de ese objetivo.
¡Buena suerte!
Las respuestas anteriores tienen algunos problemas si decide cambiar el nombre de sus objetivos o proyecto, o si usa
SWIFT_MODULE_NAME
según lo previsto.
La solución más universal es cambiar
SWIFT_OBJC_INTERFACE_HEADER_NAME
("Nombre del encabezado de la interfaz generada por Objective-C") en Proyecto, no Objetivos, Configuración de compilación, a:
-
$(PROJECT_NAME)-Swift.h
: uno por proyecto; -
$(SWIFT_MODULE_NAME)-Swift.h
: uno por módulo (valor predeterminado).
Puse la instrucción #import <project> -Swift.h apropiada en un archivo de encabezado de prefijo (<project> -Prefix.pch) definido / agregado para cada compilación (objetivo / esquema).
También es posible establecer la configuración del
Product Module Name
del
Product Module Name
en
Build Settings
para que sea la misma en todos los módulos (lo configuré en
$(PROJECT_NAME)
), de modo que el archivo
<project>-Swift.h
que se genera tenga el mismo nombre en todos los módulos.
Esto elimina la necesidad de agregar / verificar macros de preprocesador.