ios - objective - xcode swift 4
Xcode MyProjectName-Bridging-Header.h no existe (12)
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ó a un archivo .m:
#import "MyProjectName-Swift.h"
Al construir mi proyecto me sale 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 enlace de Objective-C" se establece en MyProjectName-Bridging-Header.h
¿Qué debo hacer para resolver este problema?
Cualquier ayuda es muy apreciada.
EDITAR: Archivo de encabezado de puente: #if definido (__ 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
Para aquellos que están eliminando el encabezado de puente
Iba en la dirección opuesta a la mayoría de las otras respuestas aquí. Había estado usando un encabezado de 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.
- Vaya a Objetivos> [Destino de su aplicación]> Configuración de compilación> Compilador Swift - General> Encabezado de puente de 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).
- Eliminar la fecha derivada. Vaya a Xcode> Preferencias> Ubicaciones y haga clic en la flecha gris junto a la carpeta Datos derivados. Luego elimine su carpeta de proyecto.
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 está debajo del directorio raíz.
Esto requiere el siguiente valor para la configuración: Objetivos> [Destino de su aplicación]> Configuración de compilación> Compilador Swift - Generación de código> Encabezado de puente de Objective-C :
$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h
Tenga en cuenta que si su proyecto es un módulo rápido (marco), entonces, como se señala en los comentarios, puede preferir:
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
En Swift 4.1
su proyecto no tiene el archivo
bridging-Header.h
, pero su proyecto tiene esa ruta.
Para esto necesitas eliminar esa ruta ...
Vaya al archivo de
targets
y seleccione
Build Settings
, ---->
Swift Compiler - General
, y elimine
bridging-Header.h
.
Siga las capturas de pantalla a continuación ...
Elimine el archivo
bridging-Header.h
en Swift Compiler - General
Ahora tienes así ...
Estos son pasos para crear un encabezado de puente.
-
Archivo-> Nuevo-> iOS-> Archivo de encabezado , indique el nombre del archivo de enlace como "yourProjectName-Bridging-Header.h"
-
Build-Settings-> Objective-C Bridging Header , solo dale el nombre del archivo del encabezado bridging como "ProjectName-Bridging-Header.h"
NOTA: El archivo de encabezado de puente debe ubicarse en la carpeta raíz principal del proyecto donde se encuentra el archivo ".xcodeproj". Si no, mueva el archivo de encabezado Bridging a la carpeta raíz del proyecto. De esta manera, Xcode puede acceder al archivo puente.
-
Compile el proyecto e importe los archivos necesarios en el encabezado Bridging.
Lo que me ayudó fue mover el archivo manualmente a la ruta mencionada en un mensaje de error. Entonces:
- Eliminé el archivo (movido a la papelera)
- Se movió de la papelera a la ruta en un mensaje de error
- Más tarde también tuve que limpiar el proyecto.
Lo siguiente funcionó para mí:
- El archivo de encabezado de puente debe ubicarse en la carpeta raíz principal del proyecto donde se encuentra el archivo ".xcodeproj". Muévase al directorio del proyecto y arrastre y suelte el encabezado de puente a la raíz si está dentro de cualquier otra carpeta.
- Corrija los errores ortográficos en el nombre del encabezado.
- Borrar datos derivados
- Destino -> Configuración de compilación -> Compilador Swift: General -> Agregar nombre de encabezado Obj C.
- Limpiar y correr de nuevo.
Para mí, ayudó usar
$(SRCROOT)
delante de mi ruta de encabezado de puente Objective-C.
$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Para mí, ayudó usar $ (SRCROOT) / $ (PROJECT_NAME) / delante de la ruta del archivo de encabezado de puente
Si el archivo 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 puente se crea al mismo nivel que las otras clases:
Tengo el nombre ingresado 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 de Objective C:
Siga los pasos a continuación:
- Eliminar el archivo de encabezado de puente. . . (Tal vez crea manualmente) y;
- Cree un nuevo archivo Swift en Objective-C Project. . . (No importar, primero crearlo)
Quizás estas dos cosas ayudarán a resolver su problema.
Creación manual de un archivo de encabezado de puente
En primer lugar, elimine el archivo de encabezado Bridging que se crea Xcode. Y seleccione su proyecto goto> Configuración de compilación> Buscar la palabra clave. Compilador Swift - Generación de código. Haga clic en Objective-C Bridging Header, 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 la Fuente y luego seleccione el Archivo de encabezado y cree su archivo de encabezado Bridging. El nombre del archivo debe ser su nombre de proyecto-Bridging-Header.h y luego crearlo
Seleccione su proyecto goto> Configuración de compilación> Buscar la palabra clave. Compilador Swift - Generación de código. Haga clic en Objective-C Bridging Header y ahora agregue la ruta en este Objective-C Bridging Header como projectname-Bridging-Header.h
Ahora importe sus clases en un archivo de encabezado de puente y puede compilarlo fácilmente.
Su archivo de encabezado de puente se ve así cuando está creando su archivo manualmente.