Obteniendo “archivo no encontrado” en Bridging Header al importar frameworks Objective-C al proyecto Swift

Tengo un proyecto Swift para el que estoy tratando de importar marcos basados ​​en ObjC. El marco está ubicado en un directorio bajo la ruta del proyecto y es referenciado por el proyecto en Xcode. También se agrega al “Enlace binario con bibliotecas” en la página “Crear fases” del proyecto.

Sin embargo, por alguna razón, parece que no puedo incluir el marco en el archivo Bridging-Header. Obtuve el siguiente error:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found #import  ^ :0: error: failed to import bridging header 'BridgingHeader.h' 

Cosas que he comprobado:

  1. El “Encabezado de compatibilidad de instalación de Objective-C” está establecido en “SÍ”.
  2. La ruta de búsqueda de encabezado incluye la ruta a los marcos.

Estoy seguro de que me estoy perdiendo algo, así que si alguien tiene alguna pista, sería genial.

Encontré una solución:

  • El ajuste “Encabezado de puente de Objective-C” (también SWIFT_OBJC_BRIDGING_HEADER como SWIFT_OBJC_BRIDGING_HEADER ) debe establecerse en el nivel de Destino, y NO en el nivel de Proyecto. Asegúrese de eliminar el valor de configuración en el nivel de Proyecto.

(Para mí, parece un error de Xcode, ya que no sé por qué lo soluciona).

Tengo el mismo problema. Cambié todas mis importaciones de #import "HMSegmentedControl.h" a #import por ejemplo.

Tuve que agregar mi directorio lib en las Rutas de búsqueda del encabezado del usuario:

configuración del objetivo de prueba: ruta de búsqueda del encabezado del usuario

En mi caso, el directorio lib contiene el archivo .a -library y algunos archivos de encabezado. Estos están incluidos en el archivo de encabezado de puente. Sin embargo, el veloz comstackdor no los encontraría. Solo cuando agregué ${PROJECT_DIR}/lib a la ruta de búsqueda del encabezado del usuario se creó el objective de la prueba.

(Estoy usando Xcode 6.2 en Mavericks 10.9.5)

Encontramos el mismo mensaje de error, con una causa completamente diferente.

Preparar:

  • Objetivo de la aplicación, todo el código Obj-C
  • Objetivo de prueba unitaria con un solo caso de prueba rápida y un encabezado de puente que hace referencia al código de la aplicación

Cuando agregamos el segundo caso de prueba rápida, después de una limpieza (o en la máquina de un compañero de equipo), vimos este error al construir el objective de prueba de la unidad.

Se corrigió agregando una clase ficticia Obj-C al objective de prueba de la unidad.

Esto de alguna manera hizo el truco para mí:

  • Proyecto limpio
  • Carpeta de construcción limpia
  • Reiniciar Xcode

Bueno, es un poco extraño, pero supongo que debe agregar un recurso a su fase “Copy Bundle Resources” de su objective de prueba para que cargue todos los encabezados de su objective principal de la aplicación. En mi caso, agregué main.storyboard y se ocupó del error.

enter image description here

Si ayuda a alguien

En mi caso, se agregaron mis archivos obj-c con una carpeta de referencia (las carpetas azules en xcode) y el encabezado no pudo encontrarlos. Acabo de agregar los archivos, no la carpeta, del buscador a xcode y resuelto.

Este error apareció al instalar con Cocoapods la biblioteca CocoaImageHashing. El problema era que las rutas de búsqueda estaban equivocadas. Por lo tanto, en el nivel de destino, en Configuración de comstackción -> Rutas de búsqueda -> Rutas de búsqueda de encabezado, las rutas correspondían a carpetas no existentes, por ejemplo “$ {RAÍZ_PODES} / Encabezados / Público / Incrustación de cocoa”, cuando la estructura de la carpeta Encabezados / Público / no existió. Agregué la ruta $ {PODS_ROOT} / CocoaImageHashing y el error desapareció.

Tuve un problema y lo solucioné después de pasar 2 horas para encontrarlo. Mi entorno de la siguiente manera:

cocoapod 0.39.0

veloz 2.x

XCode 7.3.1

Pasos:

  1. ruta del proyecto: project_name / project_name / your_bridging_header.h
  2. En la sección Swift en Configuración de comstackción, el encabezado de puente de Objective-C debe ser: nombre_proyecto / your_bridging_header.h
  3. En your_bridging_header.h , cambie todas las declaraciones de .ha # import
  4. En la clase que se usa your_3rd_party . Declarar importación your_3rd_party

Yo tuve el mismo problema. Para mí, la razón era que estaba usando el mismo encabezado de puente tanto para mi aplicación como para mi extensión de hoy. My Today Extension no incluye Parse, pero debido a que estaba definido en el encabezado de puente, intentaba buscarlo. Creé un nuevo encabezado de puente para mi extensión de hoy y el error desapareció.

Mi marco funcionaba antes y de repente dejó de funcionar, y ninguna de estas respuestas funcionó para mí. Eliminé el framework en Build Fases> Link Binary With Libraries y lo volví a agregar. Empecé a trabajar de nuevo.

Acababa de duplicar un esquema existente y agregué otra configuración al proyecto. Tuve que agregar una configuración con el mismo nombre al proyecto del marco para que también se construya en la misma DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME) . De lo contrario, el archivo .framework no se crea y, por lo tanto, no se puede importar.

Me encontré con el mismo problema hoy al tratar de usar un pod escrito en Objective-C en mi proyecto Swift, ninguna de las soluciones anteriores parecía funcionar.

¡En el archivo podfile tuve use_frameworks! escrito. Comentando esta línea y luego ejecutando la pod install nuevamente resolvió este problema para mí y el error desapareció.

(Actualizado a partir del 27 de mayo de 2017)

Xcode 8. Swift Project: importación de Objective C.

Cosas que saber:

  1. El archivo de encabezado de puente DEBE guardarse dentro de la carpeta del proyecto. (es decir, no se guarda en el mismo nivel que se guarda .xcodeproj, sino en un nivel más abajo en las carpetas donde se guardan todos los archivos c rápidos y objectives). Todavía puede encontrar el archivo en el nivel superior, pero no vinculará correctamente y podrá importar archivos de Objective C en el archivo de encabezado de puente
  2. El archivo de encabezado de puente se puede nombrar cualquier cosa, siempre que sea un archivo de encabezado .h
  3. Asegúrese de que la ruta en Configuración de comstackción> Comstackdor de Swift – General> Encabezado de puente de Objective C señale correctamente el archivo de encabezado de bridging que hizo
  4. IMPORTANTE: si sigues “no encontrado”, intenta primero vaciar el archivo de encabezado de puente y borrar las importaciones que hayas escrito allí. Asegúrese de que el archivo de encabezado puente se puede encontrar primero, luego comience a agregar las importaciones objective c a ese archivo. Por alguna razón, producirá el mismo error “no encontrado” incluso si se encuentra pero no le gusta importarlo por alguna razón
  5. No debe #importar “MyBridgingHeaderFile.h” en ninguno de sus archivos C objective. Esto también provocará un error de “archivo no encontrado”

Si usa cocoapods, intente reinstalar los pods ejecutando el siguiente comando.

 pod install 

Tuve un problema similar y solo una solución funcionó para mí. Probé todo lo sugerido, y sabía que configuré mi encabezado de puente fino, porque tenía otra lib que funcionaba.

Cuando copié la biblioteca (arrastrar y soltar) en el proyecto, sin Cocoapods, solo después de eso pude importar los encabezados sin errores.

Usé la biblioteca de Facebook / Shimmer.

Tuve un problema similar con los pods. Básicamente, tratando de ejecutar mis pruebas de UI, Xcode se quejó de los pods perdidos. La solución a esto fue mucho más simple que cualquiera de los descritos anteriormente:

  1. ir al archivo del proyecto (principal no es un objective)
  2. haga clic en la pestaña “Información” (más a la izquierda)
  3. establecer la configuración adecuada del pod para el objective de las pruebas UI (sección “Configuraciones” justo debajo de “Destino de despliegue”)

¡Trabajando!

Lo encontré en un hilo: https://github.com/CocoaPods/CocoaPods/issues/2695

Suena un poco como un error para las cápsulas de cocoa, pero puedo ver razones por las que podría ser un caso complicado.

En mi caso, tuve que abandonar el simulador …