Je souhaite commencer à utiliser Swift dans mon projet Objective-C. J'ai donc ajouté une classe rapide:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Et l'a importé dans un fichier .m:
#import "MyProjectName-Swift.h"
Lors de la construction de mon projet, j'obtiens l'erreur suivante:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
REMARQUE: sous "Build Settings-> Swift Compiler - Code Generation-> Objective-C Briding Header" est défini sur MyProjectName-Bridging-Header.h
Que dois-je faire pour résoudre ce problème?
Toute aide est très appréciée.
EDIT: Fichier d'en-tête de pont: #if défini (__ 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
la source
la source
MyProjectName-Swift.h
etMyProjectName-Bridging-Header.h
travaillez dans des directions opposées.MyProjectName-Swift.h
est fourni automatiquement.MyProjectName-Bridging-Header.h
, cependant, est fourni semi-automatiquement, c'est-à-dire que vous devez vous assurer qu'il est là. Alors, êtes-vous sûr de pouvoir voirMyProjectName-Bridging-Header.h
dans votre navigateur de projet? Sinon, créez et ajoutez un fichier portant ce nom à votre projet. Ensuite , vérifier à nouveau que le chemin d'accès dans les paramètres de compilation est correcte (il devrait inclure votre répertoire de projet:MyProjectName/MyProjectName-Bridging-Header.h
.Réponses:
Si le fichier de pontage est créé au même niveau que les autres classes, vous devrez peut-être ajouter le chemin relatif, comme le montrent ces images. Notez ici que le fichier de pontage est créé au même niveau que les autres classes:
J'ai le nom entré correctement dans les paramètres de construction,
mais le compilateur ne trouve pas le fichier.
Par conséquent, si j'ajoute le chemin relatif depuis la racine du projet (c'est-à-dire que j'ajoute
./ProjectName/BridgerFileName.h
),maintenant, il se compile et je peux appeler une méthode dans ma classe Objective C:
la source
J'ai trouvé qu'après avoir créé manuellement le fichier d'en-tête de pontage et choisi le nom et l'emplacement par défaut, l'en-tête de pontage sera placé dans le répertoire du projet, qui se trouve sous le répertoire racine.
Cela nécessite la valeur suivante pour le paramètre: Cibles> [Votre cible d'application]> Paramètres de construction> Compilateur Swift - Génération de code> En-tête de pont Objective-C :
Notez que si votre projet est un module (framework) Swift, comme indiqué dans les commentaires, vous préférerez peut-être:
la source
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
sera plus commun :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
jusqu'à mon dossier de projet, j'obtiens le chemin correct, mais j'ajoute/$(PROJECT_NAME)
ne me conduisant pas au chemin souhaité.Pour ceux qui suppriment l'en-tête de pont
J'allais dans la direction opposée que la plupart des autres réponses ici. J'avais déjà utilisé un en-tête de pont, mais je n'en avais plus besoin. Après l'avoir supprimé de mon projet, j'ai commencé à recevoir l'erreur mentionnée dans la question. J'ai effectué les étapes suivantes pour résoudre mon problème.
la source
Dans Swift 4.1
votre projet vous n'avez pas
bridging-Header.h
fichier, mais votre projet a ce chemin. Pour cela, vous devez supprimer ce chemin ...Accédez au
targets
fichier et sélectionnezBuild Settings
, ---->Swift Compiler - General
et supprimez le fichierbridging-Header.h
. Suivez les captures d'écran ci-dessous ...Supprimer le
bridging-Header.h
fichier dans Swift Compiler - GénéralMaintenant tu as comme ça ...
la source
Pour ajouter un fichier Bridge dans un projet Swift.
Étape 1. Allez dans Fichier> Ajouter Cocoa avec un fichier Objective-C (à des fins temporaires)
Étape 2. Ensuite, la fenêtre contextuelle suivante apparaîtra
Maintenant, appuyez sur le bouton Créer un en-tête de pont
FAIT
VOUS OBTIENDREZ LE FICHIER BRIGDE EN BUNDLE
MERCI
la source
Ce sont des étapes pour créer un en-tête de pontage.
File-> New-> iOS-> Header File , donnez le nom du fichier de pontage comme "yourProjectName-Bridging-Header.h"
Build-Settings-> En-tête de pont Objective-C , donnez simplement le nom du fichier d'en-tête de pont à "ProjectName-Bridging-Header.h"
REMARQUE: le fichier d'en-tête de pont doit se trouver dans le dossier racine principal du projet où se trouve le fichier «.xcodeproj». Sinon, déplacez le fichier d'en-tête Bridging vers le dossier racine du projet. De cette façon, Xcode peut accéder au fichier de pont.
Générez le projet et importez les fichiers nécessaires dans l'en-tête Bridging.
la source
Pour moi, cela m'a aidé à utiliser $ (SRCROOT) / $ (PROJECT_NAME) / devant le chemin du fichier d'en-tête de pontage
la source
Pour moi, cela m'a aidé à utiliser
$(SRCROOT)
devant mon chemin d'en-tête de pontage Objective-C.la source
Suivez les étapes ci-dessous:
Peut-être que ces deux choses vous aideront à résoudre votre problème.
la source
Ce qui suit a fonctionné pour moi:
la source
Création manuelle d'un fichier d'en-tête de pontage
Tout d'abord, supprimez le fichier d'en-tête de pont dont Xcode est créé. Et sélectionnez votre projet goto> Paramètres de construction> Rechercher le mot-clé. Compilateur Swift - Génération de code. Cliquez sur Objective-C Bridging Header, supprimez ce chemin. Nettoyez maintenant votre projet.
Sélectionnez maintenant votre projet> Fenêtre dans la barre de navigation. Sélectionnez Projets et supprimez vos données dérivées à partir de là.
Créez maintenant un nouveau fichier, sélectionnez la source , puis sélectionnez le fichier d'en-tête et créez votre fichier d'en-tête de pontage. Le nom de fichier doit être votre projectname-Bridging-Header.h , puis créez-le
Sélectionnez votre projet dans> Paramètres de construction> Rechercher le mot-clé. Compilateur Swift - Génération de code. Cliquez sur Objective-C Bridging Header et ajoutez maintenant le chemin dans cet Objective-C Bridging Header comme projectname-Bridging-Header.h
Maintenant, importez vos classes dans le fichier d'en-tête de pontage et vous pouvez le compiler facilement votre code.
Votre fichier d'en-tête de pontage ressemble à ceci lorsque vous créez votre fichier manuellement.
la source
Ce qui m'a aidé, c'est de déplacer le fichier manuellement vers le chemin mentionné dans un message d'erreur. Alors:
la source