web-dev-qa-db-fra.com

Xcode MyProjectName-Bridging-Header.h n'existe pas

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
100
user2408952

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: enter image description here

J'ai le nom entré correctement dans les paramètres de construction, enter image description here

mais le compilateur ne trouve pas le fichier .enter image description here

Par conséquent, si j'ajoute le chemin relatif à partir de la racine du projet (c'est-à-dire que j'ajoute ./ProjectName/BridgerFileName.h), enter image description here

maintenant, il compile et je peux appeler une méthode dans ma classe Objective C: enter image description here

170
James Toomey

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
67
DonVaughn

Pour ceux qui suppriment l'en-tête de pontage

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.

  1. Allez à Cibles> [Cible de votre application]> Paramètres de construction> Compilateur Swift - Général> En-tête de pontage Objective-C et supprimez le chemin. (Merci à @Donamite pour l'idée.) Vous pouvez simplement commencer à taper "pontage" dans le champ de recherche pour le trouver.)
  2. Supprimer la date dérivée. Allez à Xcode> Préférences> Emplacements et cliquez sur la flèche grise à côté du dossier Données dérivées. Puis supprimez votre dossier de projet.

 enter image description here

42
Suragch

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).

 enter image description here

Étape 2. La fenêtre suivante apparaîtra  enter image description here

Maintenant, appuyez sur le bouton Créer un en-tête de pontage

TERMIN&EACUTE;
VOUS AUREZ LE FICHIER BRIGDE DANS LE BUNDLE
MERCI

13

Ce sont des étapes pour créer un en-tête de pontage.

  1. Fichier-> Nouveau-> iOS-> Fichier d'en-tête , Donnez le nom du fichier de pontage comme "yourProjectName-Bridging-Header.h"

  2. 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.

  3. Générez le projet et importez les fichiers nécessaires dans l’en-tête Bridging.

12
Vishnuvardhan

Pour moi, il a été utile d’utiliser $ (SRCROOT)/$ (PROJECT_NAME)/devant le chemin de mon fichier d’entête de pont

12
Srinivas Padidala

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 ....  enter image description here

Supprimez le fichier bridging-Header.h dans Swift Compiler - General

 enter image description here

Maintenant tu as comme ça ...

 enter image description here

11
iOS

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
6
Antoine

Ce qui suit a fonctionné pour moi:

  1. Le fichier d'en-tête de pontage doit être situé dans le dossier racine principal du projet où se trouve le fichier ".xcodeproj". Déplacez-vous dans le répertoire du projet et faites glisser l'en-tête de pontage vers la racine s'il se trouve dans un autre dossier.
  2. Corrigez les fautes d'orthographe dans le nom de l'en-tête.
  3. Effacer les données dérivées
  4. Cible -> Paramètres de construction -> Compilateur Swift: Général -> Ajouter le nom de l'en-tête Obj C.
  5. Nettoyer et courir à nouveau.
5
A.G

Suivez les étapes ci-dessous:

  1. Supprimer le fichier d'en-tête de pontage. . . (Peut-être que vous créez manuellement) et;
  2. Créez un nouveau fichier Swift dans le projet Objective-C. . . (Ne pas importer, commencez par le créer)

Peut-être que ces deux choses vont aider à résoudre votre problème.

5
iHart

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à.

Créez maintenant un nouveau fichier, sélectionnez le fichier Source puis sélectionnez le fichier en-tête et créez votre fichier d’en-tête de pontage. Le nom du fichier doit être votre nom du projet-Bridging-Header.h, puis créez-le

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.

2
Mandeep Singh

Ce qui m'a aidé, c'est de déplacer manuellement le fichier vers le chemin mentionné dans un message d'erreur. Alors:

  1. J'ai supprimé le fichier (déplacé à la corbeille) 
  2. Déplacé de la corbeille vers le chemin dans un message d'erreur 
  3. Plus tard, j'ai aussi dû nettoyer le projet
0
jreft56