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

118

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
user2408952
la source
2
MyProjectName-Swift.het MyProjectName-Bridging-Header.htravaillez dans des directions opposées. MyProjectName-Swift.hest 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 voir MyProjectName-Bridging-Header.hdans 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.
MILOS
Avez-vous vérifié que le nom de votre module de produit n'est pas vide? (Paramètres de construction -> Emballage -> Nom du module de produit)
Nina
Nina, oui mon nom de module est "MyProjectName" et pas quelque chose
ells
milos, je pensais que Xcode était censé générer automatiquement ce fichier de pontage. Donc non je n'ai pas ce fichier dans mon projet.
user2408952
1
Avez-vous spécifié manuellement le Bridging-Header.h? Je vois, il y a une faute d'orthographe 'Briding'
Nina

Réponses:

191

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: entrez la description de l'image ici

J'ai le nom entré correctement dans les paramètres de construction, entrez la description de l'image ici

mais le compilateur ne trouve pas le fichier. entrez la description de l'image ici

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

maintenant, il se compile et je peux appeler une méthode dans ma classe Objective C: entrez la description de l'image ici

James Toomey
la source
4
Pour moi, cela ne résout pas du tout. Il semble que XCode ne réagit pas au champ d'en-tête de pontage Objective-C mis à jour.
Darius Miliauskas
Il a fallu longtemps pour que je trouve, mais finalement. Merci, corrige l'erreur :)
Anders Sørensen
Bien démontré! Et oui, n'oubliez pas de le faire à la fois dans les paramètres de construction de votre projet et dans les paramètres de construction cible.
Akash Bhardwaj le
72

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 :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

Notez que si votre projet est un module (framework) Swift, comme indiqué dans les commentaires, vous préférerez peut-être:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Don Vaughn
la source
2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hsera plus commun :)
gaussblurinc
1
cela devrait être la seule réponse!
Luca Davanzo
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hjusqu'à mon dossier de projet, j'obtiens le chemin correct, mais j'ajoute /$(PROJECT_NAME)ne me conduisant pas au chemin souhaité.
iPeter
Remarque pour les autres qui pourraient avoir le même problème - Lorsque j'ai copié / collé le commentaire @gaussblurinc, un caractère étrange était copié dans la partie «En-tête» de la chaîne. Après avoir copié / collé la même chaîne de la réponse, cela a bien fonctionné.
Adam Johns
46

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.

  1. Accédez à Cibles> [Votre application cible]> Paramètres de construction> Compilateur Swift - Général> En-tête de pont 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. Supprimez la date dérivée. Accédez à Xcode> Préférences> Emplacements et cliquez sur la flèche grise à côté du dossier Données dérivées. Supprimez ensuite votre dossier de projet.

entrez la description de l'image ici

Suragch
la source
22

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 targetsfichier et sélectionnez Build Settings, ----> Swift Compiler - Generalet supprimez le fichier bridging-Header.h. Suivez les captures d'écran ci-dessous ...entrez la description de l'image ici

Supprimer le bridging-Header.hfichier dans Swift Compiler - Général

entrez la description de l'image ici

Maintenant tu as comme ça ...

entrez la description de l'image ici

iOS
la source
14

Pour ajouter un fichier Bridge dans un projet Swift.

Étape 1. Allez dans Fichier> Ajouter Cocoa avec un fichier Objective-C (à des fins temporaires)

entrez la description de l'image ici

Étape 2. Ensuite, la fenêtre contextuelle suivante apparaîtraentrez la description de l'image ici

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

FAIT
VOUS OBTIENDREZ LE FICHIER BRIGDE EN BUNDLE
MERCI

Maninderjit Singh
la source
13

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

  1. File-> New-> iOS-> Header File , donnez le nom du fichier de pontage comme "yourProjectName-Bridging-Header.h"

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

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

Vishnuvardhan
la source
12

Pour moi, cela m'a aidé à utiliser $ (SRCROOT) / $ (PROJECT_NAME) / devant le chemin du fichier d'en-tête de pontage

Srinivas Padidala
la source
1
C'est une réponse valable. Il n'aurait pas dû être marqué. Vous pouvez utiliser $ (SRCROOT) et $ (PROJECT_NAME) comme guide pour arriver à la bonne réponse, mais vous ne pouvez probablement pas copier et coller chaque solution.
Hobbes the Tige
La solution présentée dans cette réponse a en fait résolu mon problème, merci Srinivas Padidala
Wilson
Allez-y. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h fonctionne pour moi ............ Coller $ (SRCROOT) / $ (PROJECT_NAME) / tel quel ..... n'ajoutez pas le nom de votre projet à la place de $ (PROJECT_NAME)
ioSana
6

Pour moi, cela m'a aidé à utiliser $(SRCROOT)devant mon chemin d'en-tête de pontage Objective-C.

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Antoine
la source
5

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, créez-le d'abord)

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

iHart
la source
5

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 vers le répertoire du projet et faites glisser et déposez 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. Target -> Build Settings -> Swift Compiler: General -> Add Obj C Header name.
  5. Nettoyez et exécutez à nouveau.
AG
la source
2

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.

Mandeep Singh
la source
0

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

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