name - Xcode 6/Beta 4: no se admite el uso de encabezados de conexión con objetivos de infraestructura
meta name keywords (3)
Acabo de actualizar a Xcode 6 Beta 4 y tengo un framework que creé para Live Views en Beta 2. Debido a otro bug rápido, necesitaba usar algún código Obj-C. Sin embargo, cuando actualizo, aparece el siguiente error:
error: no se admite el uso de encabezados puente con objetivos de marco
No he visto nada en las notas de la versión ni he encontrado ninguna otra ruta de migración. ¿Alguien más ha visto esto y ha llegado a una solución?
Me doy cuenta de que Beta 3 eliminó la necesidad de marcos para vistas en vivo, pero tiene sentido en mi caso si puedo hacerlo funcionar. Puedo eliminarlo como una alternativa, pero preferiría usar un framework si no están completamente rotos en Beta 4.
Como indica el error, los encabezados puente no están permitidos en Frameworks. La sección Importar código desde dentro del mismo marco de trabajo de la documentación de la manzana Mix & Match alude a esto. Como dicen, necesitas "En tu archivo de encabezado de paraguas, importa cada encabezado de Objective-C que quieras exponer a Swift".
Sin embargo, descubrí que también podría necesitar hacer que esos encabezados específicos también sean públicos. Esta respuesta revisa por qué y cómo hacerlo: error del compilador Swift: "encabezado no modular dentro del módulo del marco" .
Entonces, haz esto:
- Retire su archivo de encabezado de puente.
- Elimine las referencias al archivo de encabezado puente en la configuración de compilación para el marco
- Agregue los encabezados necesarios a su archivo paraguas ([ProductName] .h)
- Haga públicos los archivos incluidos en la sección "Encabezados" del marco de sus "Fases de compilación".
- Limpiar y reconstruir
Nota : El "archivo de encabezado del paraguas" es un archivo (llamado [ProductName] .h) que generalmente representa todos los encabezados públicos de un marco. Por lo general, es solo una lista de sentencias #import a otros encabezados contenidos en el marco. En Xcode, si abre UIKit.h, verá un buen ejemplo de un archivo paraguas.
Consulte Importar Objective-C en Swift .
Para importar código Objective-C a Swift desde el mismo marco
- En Configuraciones de compilación, en Empaquetado, asegúrese de que la configuración de Definir módulo para ese objetivo de infraestructura esté establecida en "Sí".
En el archivo de encabezado de su paraguas, importe cada encabezado de Objective-C que desee exponer a Swift. Por ejemplo:
#import "XYZ/XYZCustomCell.h" #import "XYZ/XYZCustomView.h" #import "XYZ/XYZCustomViewController.h"
Haga públicos los archivos incluidos en la sección "Encabezados" del marco de sus "Fases de compilación".
Limpiar y reconstruir
Swift verá todos los encabezados que exponga públicamente en su encabezado de paraguas. El contenido de los archivos de Objective-C en ese marco estará disponible en cualquier archivo Swift dentro de ese objetivo de marco de trabajo automáticamente, sin ninguna instrucción de importación. Use su código Objective-C personalizado con la misma sintaxis Swift que usa con las clases del sistema.
let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"
Importante: el "archivo de cabecera del paraguas" significa el archivo {ModuleName} .h. Por cierto, el nombre del objetivo es {ModuleName} .framework.
Hay dos posibilidades Agregar los encabezados necesarios al archivo de encabezado del paraguas y hacerlos públicos es una forma. Sin embargo, esto es un problema si los encabezados deberían estar disponibles para Swift, pero no para el público.
La segunda posibilidad que hará que los encabezados internos estén disponibles para Swift se describe en detalle here . Esencialmente, se debe crear un mapa de módulo similar al siguiente:
module AwesomeKitPrivate {
header "../InternalClass.h"
export *
}
Esto se puede incluir en XCode usando la configuración:
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule