Je souhaite commencer à utiliser Swift dans mon projet Objective-C. J'ai donc ajouté une classe Swift:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Et importé dans un fichier .m:
#import "MyProjectName-Swift.h"
Lors de la construction de mon projet, l'erreur suivante apparaît:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
REMARQUE: Sous "Paramètres de compilation-> Compilateur Swift - Génération de code-> En-tête de liaison Objective-C" 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 pontage: #si défini (__ has_include) && __has_include () # comprendre #fin si
#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
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 à partir de la racine du projet (c'est-à-dire que j'ajoute ./ProjectName/BridgerFileName.h
),
maintenant, il compile et je peux appeler une méthode dans ma classe Objective C:
J'ai constaté 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, situé sous le répertoire racine.
Cela nécessite la valeur suivante pour le paramètre: Cibles> [Cible de votre application]> Paramètres de construction> Swift Compiler - Génération de code> En-tête de pontage Objective-C :
$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h
Notez que si votre projet est un module Swift (framework), alors, comme indiqué dans les commentaires, vous préférerez peut-être:
$(SRCROOT)/$(PROJECT_NAME)/$(Swift_MODULE_NAME)-Bridging-Header.h
J'allais dans le sens opposé comme la plupart des autres réponses ici. J'utilisais auparavant un en-tête de pontage, mais je n'en avais plus besoin. Après l'avoir supprimé de mon projet, j'ai commencé à avoir l'erreur mentionnée dans la question. J'ai effectué les étapes suivantes pour résoudre mon problème.
Pour ajouter un fichier de pont dans le projet Swift.
Étape 1. Sélectionnez Fichier> Ajouter du cacao avec un fichier Objective-C (à des fins temporaires).
Étape 2. La fenêtre suivante apparaîtra
Maintenant, appuyez sur le bouton Créer un en-tête de pontage
TERMIN&EACUTE;
VOUS AUREZ LE FICHIER BRIGDE DANS LE BUNDLE
MERCI
Ce sont des étapes pour créer un en-tête de pontage.
Fichier-> Nouveau-> iOS-> Fichier d'en-tête , Donnez le nom du fichier de pontage comme "yourProjectName-Bridging-Header.h"
Build-Settings-> Objective-C Bridging Header , Indiquez simplement le nom du fichier d'en-tête de pontage comme "ProjectName-Bridging-Header.h"
REMARQUE: Le fichier d'en-tête de pontage doit être situé dans le dossier racine principal du projet où se trouve le fichier ".xcodeproj". Si ce n'est pas le cas, déplacez le fichier d'en-tête de pontage dans le dossier racine du projet. De cette façon, Xcode est capable d’accéder au fichier bridge.
Générez le projet et importez les fichiers nécessaires dans l’en-tête Bridging.
Pour moi, il a été utile d’utiliser $ (SRCROOT)/$ (PROJECT_NAME)/devant le chemin de mon fichier d’entête de pont
Dans Swift 4.1
votre projet, vous n'avez pas le fichier bridging-Header.h, mais votre projet a ce chemin. Pour cela, vous devez supprimer ce chemin ...
Accédez au fichier de cibles, sélectionnez Paramètres de construction, ----> Compilateur Swift - Général, puis supprimez le fichier bridging-Header.h. Suivez les captures d'écran ci-dessous ....
Supprimez le fichier bridging-Header.h dans Swift Compiler - General
Maintenant tu as comme ça ...
Pour moi, il a été utile d’utiliser $(SRCROOT)
devant mon chemin d’en-tête de pontage Objective-C.
$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Ce qui suit a fonctionné pour moi:
Suivez les étapes ci-dessous:
Peut-être que ces deux choses vont aider à résoudre votre problème.
Création manuelle d'un fichier d'en-tête de pontage
Tout d’abord, supprimez le fichier d’en-tête Bridging pour lequel Xcode est créé. Et sélectionnez votre projet dans l'onglet Paramètres de construction> Rechercher le mot clé. Swift Compiler - Génération de code. Cliquez sur Objective-C Bridging Header, supprimez ce chemin. Maintenant, nettoyez 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à.
Sélectionnez votre projet. Allez à> Paramètres de construction> Rechercher le mot clé. Swift Compiler - Génération de code. Cliquez sur Objective-C Bridging Header et ajoutez maintenant le chemin dans cet en-tête Objective-C Bridging Header, comme projectname-Bridging-Header.h.
Importez maintenant vos classes dans un fichier d’en-tête de pontage et vous pourrez le compiler facilement.
Votre fichier d'en-tête de pontage ressemble à ceci lorsque vous créez votre fichier manuellement.
Ce qui m'a aidé, c'est de déplacer manuellement le fichier vers le chemin mentionné dans un message d'erreur. Alors: