Xcode MyProjectName-Bridging-Header.h no existe


118

Quiero comenzar a usar Swift en mi proyecto Objective-C. Entonces agregué una clase rápida:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

Y lo importó en un archivo .m:

#import "MyProjectName-Swift.h"

Al construir mi proyecto, aparece el siguiente error:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

NOTA: En "Configuración de compilación-> Compilador Swift - Generación de código-> Encabezado de unión de Objective-C" se establece en MyProjectName-Bridging-Header.h

¿Qué debo hacer para solucionar este problema?

Cualquier ayuda es muy apreciada.

EDITAR: Archivo de encabezado de puente: # si se define (__ has_include) && __has_include () # include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hy MyProjectName-Bridging-Header.htrabajar en direcciones opuestas. MyProjectName-Swift.hse proporciona automáticamente. MyProjectName-Bridging-Header.h, sin embargo, se proporciona semiautomáticamente, es decir, debe asegurarse de que esté allí. Entonces, ¿estás seguro de que puedes verlo MyProjectName-Bridging-Header.hen tu navegador de proyectos? Si no es así, cree y agregue un archivo con ese nombre a su proyecto. A continuación, comprobar una vez más que la ruta al mismo en la configuración construcción es correcta (debe incluir el directorio del proyecto: MyProjectName/MyProjectName-Bridging-Header.h.
Milos

¿Ha comprobado que el nombre del módulo de su producto no está vacío? (Configuración de compilación -> Empaquetado -> Nombre del módulo del producto)
Nina

Nina, sí, mi nombre de módulo es "MyProjectName" y no algo ells
user2408952

milos, pensé que se suponía que Xcode generaría automáticamente este archivo de unión. Entonces no, no tengo ese archivo en mi proyecto.
user2408952

1
¿Ha especificado manualmente Bridging-Header.h? Ya veo, hay un error de ortografía 'Briding'
Nina

Respuestas:


191

Si el archivo de puente se crea al mismo nivel que las otras clases, es posible que deba agregar la ruta relativa, como muestran estas imágenes. Tenga en cuenta aquí que el archivo de puente se crea al mismo nivel que las otras clases: ingrese la descripción de la imagen aquí

He introducido el nombre correctamente en la configuración de compilación, ingrese la descripción de la imagen aquí

pero el compilador no encuentra el archivo. ingrese la descripción de la imagen aquí

Por lo tanto, si agrego la ruta relativa desde la raíz del proyecto (es decir, agrego ./ProjectName/BridgerFileName.h), ingrese la descripción de la imagen aquí

ahora se compila y puedo llamar a un método en mi clase Objective C: ingrese la descripción de la imagen aquí


4
Para mí no se soluciona en absoluto. Parece que XCode no reacciona al campo Encabezado de puente de Objective-C actualizado.
Darius Miliauskas

Me tomó mucho tiempo encontrarlo, pero finalmente. Gracias, solucionó el error :)
Anders Sørensen

¡Bien demostrado! Y sí, no te olvides de hacer esto tanto en la configuración de la compilación del proyecto como en la configuración de la compilación de destino.
Akash Bhardwaj

72

Descubrí que después de crear el archivo de encabezado de puente manualmente y elegir el nombre y la ubicación predeterminados, el encabezado de puente se colocará en el directorio del proyecto, que se encuentra debajo del directorio raíz.

Esto requiere el siguiente valor para la configuración: Destinos> [Destino de su aplicación]> Configuración de compilación> Compilador Swift - Generación de código> Encabezado de puente Objective-C :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

Tenga en cuenta que si su proyecto es un módulo rápido (marco), como se señala en los comentarios, es posible que prefiera:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hserá más común :)
gaussblurinc

1
¡esta debería ser la única respuesta!
Luca Davanzo

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hhasta la carpeta de mi proyecto, obtengo la ruta correcta, pero la agrego /$(PROJECT_NAME)no me lleva a la ruta deseada.
iPeter

Nota para otros que podrían tener el mismo problema: cuando copié / pegué el comentario de @gaussblurinc, se copió un carácter extraño en la parte 'Encabezado' de la cadena. Después de copiar / pegar la misma cadena de la respuesta, funcionó bien.
Adam Johns

46

Para aquellos que están eliminando el encabezado puente

Iba en sentido contrario a la mayoría de las otras respuestas aquí. Había estado usando un encabezado puente anteriormente, pero ya no lo necesitaba. Después de eliminarlo de mi proyecto, comencé a recibir el error mencionado en la pregunta. Realicé los siguientes pasos para resolver mi problema.

  1. Vaya a Destinos> [Destino de su aplicación]> Configuración de compilación> Compilador Swift - General> Encabezado puente Objective-C y elimine la ruta. (Gracias a @Donamite por la idea). (Puede comenzar a escribir "puente" en el cuadro de búsqueda para encontrarlo).
  2. Elimina la fecha derivada. Vaya a Xcode> Preferencias> Ubicaciones y haga clic en la flecha gris junto a la carpeta Datos derivados. Luego elimine la carpeta de su proyecto.

ingrese la descripción de la imagen aquí


22

En Swift 4.1

su proyecto no tiene bridging-Header.harchivo, pero su proyecto tiene esa ruta. Para esto necesitas borrar esa ruta ...

Vaya al targetsarchivo y seleccione Build Settings, ----> Swift Compiler - General, y elimine el archivo bridging-Header.h. Siga las siguientes capturas de pantalla ...ingrese la descripción de la imagen aquí

Eliminar el bridging-Header.harchivo en Swift Compiler - General

ingrese la descripción de la imagen aquí

Ahora tienes así ...

ingrese la descripción de la imagen aquí


14

Para agregar Bridge File en el proyecto Swift.

Paso 1. Vaya a Archivo> Agregar Cocoa con el archivo Objective-C (para fines temporales)

ingrese la descripción de la imagen aquí

Paso 2. Luego aparecerá la siguiente ventana emergenteingrese la descripción de la imagen aquí

Ahora presione el botón Crear encabezado puente

HECHO,
RECIBIRÁ BRIGDE FILE EN PAQUETE
GRACIAS


13

Estos son los pasos para crear un encabezado de puente.

  1. Archivo-> Nuevo-> iOS-> Archivo de encabezado , proporcione el nombre del archivo de puente como "yourProjectName-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header , simplemente proporcione el nombre del archivo del encabezado de puente como "ProjectName-Bridging-Header.h"

    NOTA: El archivo de encabezado de puente debe estar ubicado en la carpeta raíz principal del proyecto donde se encuentra el archivo ".xcodeproj". De lo contrario, mueva el archivo de encabezado de Bridging a la carpeta raíz del proyecto. De esta manera Xcode puede acceder al archivo puente.

  3. Cree el proyecto e importe los archivos necesarios en el encabezado de puente.


12

Para mí, ayudó usar $ (SRCROOT) / $ (PROJECT_NAME) / delante de la ruta del archivo de mi encabezado de puente


1
Esta es una respuesta válida. No debería haber sido rebajado. Puede usar $ (SRCROOT) y $ (PROJECT_NAME) como guía para llegar a la respuesta correcta, pero probablemente no pueda copiar y pegar todas las soluciones.
Hobbes the Tige

La solución presentada en esta respuesta en realidad ha solucionado mi problema, gracias Srinivas Padidala
Wilson

Hazlo. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h funciona para mí ............ Pega $ (SRCROOT) / $ (PROJECT_NAME) / como está ..... no agregue el nombre de su proyecto en lugar de $ (PROJECT_NAME)
ioSana

6

Para mí, ayudó a usarlo $(SRCROOT)frente a mi ruta de encabezado de puente Objective-C.

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

Siga los pasos a continuación:

  1. Elimina el archivo de encabezado de puente. . . (Tal vez lo cree manualmente) y;
  2. Cree un nuevo archivo Swift en Objective-C Project. . . (No importar, primero créelo)

Quizás estas dos cosas ayuden a resolver su problema.


5

Lo siguiente funcionó para mí:

  1. El archivo de encabezado de puente debe ubicarse en la carpeta raíz principal del proyecto donde se encuentra el archivo ".xcodeproj". Vaya al directorio del proyecto y arrastre y suelte el encabezado puente a la raíz si está dentro de cualquier otra carpeta.
  2. Corrija errores ortográficos en el nombre del encabezado.
  3. Borrar datos derivados
  4. Target -> Build Settings -> Swift Compiler: General -> Add Obj C Header name.
  5. Limpiar y ejecutar de nuevo.

2

Creación manual de un archivo de encabezado de puente

En primer lugar, elimine el archivo de encabezado de puente que se crea Xcode. Y seleccione su proyecto, vaya a> Configuración de compilación> Buscar la palabra clave. Compilador rápido: generación de código. Haga clic en el encabezado de puente de Objective-C, elimine esa ruta. Ahora limpia tu proyecto.

Ahora seleccione su proyecto> Ventana en la barra de navegación. Seleccione Proyectos y elimine sus datos derivados desde allí.

Ahora cree un nuevo archivo, seleccione el origen y luego seleccione el archivo de encabezado y cree su archivo de encabezado de puente. El nombre del archivo debe ser su nombre de proyecto-Bridging-Header.hy luego créelo

Seleccione su proyecto, vaya a> Configuración de compilación> Buscar la palabra clave. Compilador rápido: generación de código. Haga clic en el encabezado de puente de Objective-C y ahora agregue la ruta en este encabezado de puente de Objective-C como projectname-Bridging-Header.h

Ahora importe sus clases en un archivo de encabezado puente y puede compilar su código fácilmente.

Su archivo de encabezado de puente se ve así cuando está creando su archivo manualmente.


0

Lo que me ayudó fue mover el archivo manualmente a la ruta mencionada en un mensaje de error. Entonces:

  1. Borré el archivo (lo moví a la papelera)
  2. Lo movió de la papelera a la ruta en un mensaje de error
  3. Luego también tuve que limpiar el proyecto
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.