ios - failed - swift precompile bridging header




Xcode MyProjectName-Bridging-Header.h n'existe pas (8)

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 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 () # 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

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. Sélectionnez 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 "pont" dans le champ de recherche pour le trouver.)
  2. Supprimer la date dérivée. Allez dans 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.


Ce qui m'a aidé, c'est de déplacer manuellement le fichier dans 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

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

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

  2. Build-Settings-> Objective-C Bridging Header , il suffit de donner 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.


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 targets , sélectionnez Build Settings , ----> Swift Compiler - General , puis supprimez le 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 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 Create Bridging Header

TERMINÉ
VOUS OBTENIREZ LE FICHIER BRIGDE DANS BUNDLE
MERCI


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

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 compile et je peux appeler une méthode dans ma classe Objective C:


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.





swift