ios swift xcode6 objective-c-swift-bridge

ios - Problema de importación de encabezado de puente Swift



xcode6 objective-c-swift-bridge (19)

Siguiendo las instrucciones, he creado un encabezado de puente y agregado a mi proyecto. Lamentablemente, se produjo el siguiente error:

: 0: error: no se pudo importar el encabezado Objective-C ''--- path - to --- header / .... h''

En la configuración de compilación agregué cadena de ruta de búsqueda de encabezado a la ubicación del encabezado de puente, pero nada ayudó.

¿Alguien ha experimentado este problema?


"Necesitamos decirle a Xcode dónde buscar los archivos de cabecera que incluimos en nuestro encabezado de puente . Busque la sección Rutas de búsqueda y cambie la configuración de nivel de proyecto para Rutas de búsqueda de encabezado de usuario , agregando una entrada recursiva para los ''Pods'' directorio: Pods / ** " http://swiftalicio.us/2014/11/using-cocoapods-from-swift/


¡Tenga cuidado de agregar el archivo a la carpeta de la que se queja su error! He cometido el mismo error, si crea el archivo desde Xcode, irá a la carpeta: Proyecto-> Proyecto-> Encabezado.h

Y Xcode está buscando Project-> Header.h

¡Eso significa que debe colocar el archivo dentro de la carpeta de su proyecto (ProjectName-> ProjectNameFolder)!

Espero que ayude ;)

ACTUALIZADO: No estoy seguro si entendí lo que quieres decir, pero intenta esto para resolver tu problema:
1. Borre todos sus archivos de puente que creó hasta ahora.
2. Seleccione la carpeta principal del proyecto y pulse el nuevo archivo-> iOS-> Archivo de encabezado.
3. Escribe tus importaciones en el archivo de cabecera creado.
4. Seleccione el proyecto dentro de Xcode-> Build Settings, escriba en el campo de búsqueda: bridging y coloque la clave SWIFT_OBJC_BRIDGING_HEADER con el nombre del archivo de encabezado o la ruta a él.

Si sigue estos pasos, su archivo de encabezado se creará en la ubicación correcta.

: D Espero que ayude!


Agregue un archivo temporal Objective-C a su proyecto. Puede darle el nombre que desee.

Seleccione Sí para configurar un encabezado puente de Objective-C.

Elimine el archivo temporal Objective-C que acaba de crear.

En el archivo projectName-Bridging-Header.h recién creado, agregue esta línea:

''#import <GoogleMaps / GoogleMaps.h>''

Edite el archivo AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { GMSServices.provideAPIKey("AIza....") //iOS API key return true }

Siga el enlace para ver la muestra completa


De hecho, creé un archivo vacío OSX Source Objective C en el proyecto (donde están todos mis archivos rápidos).

Agregué las importaciones y luego borré el archivo .m .


Después de algunos días iniciales de lucha, finalmente logré integrar con éxito el registro en Facebook a mi aplicación para iOS. Estos son los pasos (supongo que ya ha instalado Facebook SDK v4.1 o superior en sus máquinas):

  1. Agregue los marcos de Facebook: FBSDKCoreKit, FBSDKLoginKit en su proyecto.
  2. No realice cambios en la configuración de compilación ya que FB SDK v4.1 y versiones posteriores ya no necesitan archivos de encabezado de puente.
  3. Importe FBSDKCorekit, FBSDKLoginKit en ViewController.swift, archivos AppDelegate.swift
  4. Agregue información en la pList como se menciona here

  5. Crea tu aplicación. Y wohoo! sin errores de tiempo de compilación.


Encuentra la ruta en:

Configuraciones de compilación / Generación de código de compilador Swift / Encabezado de puente de Objective-C

y eliminar ese archivo. Entonces deberías estar bien.


Entre las otras correcciones, tuve el error cuando intenté hacer Product-> Archive. Resulta que tuve esto:

Objective-C Bridging Header Debug (had the value) Release (had the value) Any architecture | Any SDK (this was blank - problem here!)

Después de configurarlo en esa última línea, funcionó.


Establecer el encabezado de puente de precompilación a No solucionar el problema para mí.


Esto probablemente solo afecte a un pequeño porcentaje de personas, pero en mi caso mi proyecto estaba usando CocoaPods y uno de esos pods tenía una subespecificación con sus propios CocoaPods. La solución fue utilizar importaciones de ángulo completo para hacer referencia a cualquier archivo en los sub-pods.

#import <HexColors/HexColor.h>

Más bien que

#import "HexColor.h"


Experimenté ese tipo de error cuando estaba agregando una extensión de hoy a mi aplicación. El objetivo de compilación para la extensión se generó con el mismo nombre de encabezado de puente que el objetivo de compilación de mi aplicación. Esto estaba dando lugar al error, porque la extensión no ve los archivos enumerados en el encabezado de puente de mi aplicación.

Lo único que debe hacer es borrar o cambiar el nombre del encabezado de puente para la extensión y todo estará bien.

Espero que esto ayude


Importé en algunos archivos de bridgin header files de cocoapods no de forma adecuada.

En lugar de importar

#import <SomeCocoaPod/SomeCocoaPod.h>

escribí

#import "SomeCocoaPod.h"

Y este fue mi ENORME error


Para mí fue porque olvidé agregarlo a la configuración de compilación del objetivo.


Para mí, eliminar los datos derivados lo solucionó, noté que incluso si reviso desde una confirmación anterior, ocurre el mismo problema.

Puede acceder a esa opción desde Ventana-> Proyectos.


Para mí, no fue seleccionar ''Copiar elementos si es necesario'' en la ruta de destino al agregar el marco. Simplemente vuelva a agregar el marco con esta opción seleccionada.


También he experimentado este problema y, lamentablemente, es solo un error en SDK + Xcode. Hablé con un ingeniero de la WWDC sobre este y algunos otros problemas que estaba teniendo con CloudKit. Estos errores se abordarán en la próxima semilla de Xcode.

Es la parte divertida de usar el software beta.


Tenía un problema similar que no podía ser resuelto por ninguna de las soluciones anteriores. Mi proyecto usa CocoaPods. Noté que junto con los errores recibí una advertencia con el siguiente mensaje:

Uncategorized: Target ''Pods'' of project ''Pods'' was rejected as an implicit dependency for ''Pods.framework'' because its architectures ''arm64'' didn''t contain all required architectures ''armv7 arm64''

Entonces la solución fue bastante simple. Para el proyecto Pods, cambie la bandera Generar arquitectura activa solo a No y el error original desapareció.


Tengo el mismo problema por diferentes razones, aquí está mi caso. Creo proyecto que necesita el menú de diapositivas para ser incluido, estoy usando SWRevealViewController lib para acercarme a eso.

cuando importo los archivos de la biblioteca, agrego una subcarpeta (SWRevealViewController) en Archivos de soporte para archivos .h && .m, se desencadenan dos errores, no se puede importar puente y SWRevealViewController.h no se encuentra.

Cómo lo soluciono

cuando muevo archivos a Supporting Files directamente (elimino la subcarpeta), SWRevealViewController.m se agrega automáticamente a Build Fhases -> Compile Sources y el problema se ha ido


para otros que tienen problemas para agregar una clase rápida en el proyecto objetivo-c. esto es lo que funciona para mí:

  1. crear NUEVO archivo rápido. esto hará que se solicite xcode si desea que xcode cree todas las configuraciones para el proyecto mixto swift-objective-c incluyendo brigde-header.h para usted. presione sí
  2. ahora, agregue sus archivos rápidos existentes que quiera usar en su proyecto.
  3. en el archivo de implementación, vas a usar la clase swift add: #import "YOURPROJECTNAME-swift.h". este archivo xcode crea para ti. si su proyecto xcode es myProject, entonces "myProject-swift.h"

y eso es. ahora crea la clase rápida en tu código como si fuera objetivo-c.


En mi caso, esto fue en realidad un error como resultado de una referencia circular. Tuve una clase importada en el encabezado de puente y ese archivo de encabezado de clase estaba importando el encabezado rápido ( <MODULE_NAME>-Swift.h ). Estaba haciendo esto porque en el archivo de encabezado Obj-C necesitaba usar una clase que se declaró en Swift, la solución fue simplemente usar el declarativo @class .

Así que, básicamente, el error decía "No se pudo importar el encabezado puente", el error anterior decía que no se encontró el archivo <MODULE_NAME>-Swift.h , que era un error que apuntaba a un archivo de encabezado Obj-C específico (es decir, un controlador de vista).

Al inspeccionar este archivo, noté que tenía el archivo -Swift.h declarado dentro del encabezado. Mover esta importación a la implementación resolvió el problema. Así que necesitaba usar un objeto, vamos a llamarlo MyObject definido en Swift, así que simplemente cambié el encabezado para decir

@class MyObject;