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
user2408952
fuente
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í

James Toomey
fuente
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
Don Vaughn
fuente
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í

Suragch
fuente
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í

iOS
fuente
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

Maninderjit Singh
fuente
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.

Vishnuvardhan
fuente
12

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

Srinivas Padidala
fuente
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
Antoine
fuente
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.

iHart
fuente
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.
AG
fuente
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.

Mandeep Singh
fuente
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
jreft56
fuente