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
ios
objective-c
xcode
swift
user2408952
fuente
fuente
MyProjectName-Swift.h
yMyProjectName-Bridging-Header.h
trabajar en direcciones opuestas.MyProjectName-Swift.h
se 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 verloMyProjectName-Bridging-Header.h
en 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
.Respuestas:
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:
He introducido el nombre correctamente en la configuración de compilación,
pero el compilador no encuentra el archivo.
Por lo tanto, si agrego la ruta relativa desde la raíz del proyecto (es decir, agrego
./ProjectName/BridgerFileName.h
),ahora se compila y puedo llamar a un método en mi clase Objective C:
fuente
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 :
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:
fuente
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
será más común :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
hasta la carpeta de mi proyecto, obtengo la ruta correcta, pero la agrego/$(PROJECT_NAME)
no me lleva a la ruta deseada.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.
fuente
En Swift 4.1
su proyecto no tiene
bridging-Header.h
archivo, pero su proyecto tiene esa ruta. Para esto necesitas borrar esa ruta ...Vaya al
targets
archivo y seleccioneBuild Settings
, ---->Swift Compiler - General
, y elimine el archivobridging-Header.h
. Siga las siguientes capturas de pantalla ...Eliminar el
bridging-Header.h
archivo en Swift Compiler - GeneralAhora tienes así ...
fuente
Para agregar Bridge File en el proyecto Swift.
Paso 1. Vaya a Archivo> Agregar Cocoa con el archivo Objective-C (para fines temporales)
Paso 2. Luego aparecerá la siguiente ventana emergente
Ahora presione el botón Crear encabezado puente
HECHO,
RECIBIRÁ BRIGDE FILE EN PAQUETE
GRACIAS
fuente
Estos son los pasos para crear un encabezado de puente.
Archivo-> Nuevo-> iOS-> Archivo de encabezado , proporcione el nombre del archivo de puente como "yourProjectName-Bridging-Header.h"
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.
Cree el proyecto e importe los archivos necesarios en el encabezado de puente.
fuente
Para mí, ayudó usar $ (SRCROOT) / $ (PROJECT_NAME) / delante de la ruta del archivo de mi encabezado de puente
fuente
Para mí, ayudó a usarlo
$(SRCROOT)
frente a mi ruta de encabezado de puente Objective-C.fuente
Siga los pasos a continuación:
Quizás estas dos cosas ayuden a resolver su problema.
fuente
Lo siguiente funcionó para mí:
fuente
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.
fuente
Lo que me ayudó fue mover el archivo manualmente a la ruta mencionada en un mensaje de error. Entonces:
fuente