web-dev-qa-db-fra.com

Swift Problème d'importation d'un en-tête de pontage

Après les instructions, j'ai créé un en-tête de pontage et ajouté à mon projet. Malheureusement, l'erreur suivante s'est produite:

: 0: erreur: impossible d'importer l'en-tête Objective-C '--- path - to --- header/.... h'

Screenshot 1

Dans les paramètres de construction, j'ai ajouté une chaîne de chemin de recherche d'en-tête à l'emplacement de l'en-tête de pontage, mais rien n'y faisait.

Quelqu'un a-t-il eu ce problème?

118
Nikita Pronchik

Soyez prudent d'ajouter le fichier dans le dossier que votre erreur se plaint! J'ai fait la même erreur, si vous créez le fichier à partir de Xcode, il ira dans le dossier: Projet-> Projet-> Header.h

Et Xcode recherche Project-> Header.h

Cela signifie que vous devez placer le fichier dans le dossier de votre projet (Nom du projet -> Nom du projet)!

J'espère que ça t'as aidé ;)

MISE À JOUR: Je ne suis pas sûr d'avoir compris ce que vous voulez dire, mais essayez ceci pour résoudre votre problème:
1. Supprimez tous vos fichiers de pontage que vous avez créés jusqu'à présent.
2. Sélectionnez le dossier principal du projet et cliquez sur nouveau fichier-> iOS-> Fichier d'en-tête.
3. Ecrivez vos importations dans le fichier d’en-tête créé.
4. Sélectionnez le projet dans Xcode-> Paramètres de construction, tapez dans le champ de recherche: pontage et insérez dans la clé Swift_OBJC_BRIDGING_HEADER le nom de votre fichier d’en-tête ou son chemin!

Si vous suivez ces étapes, votre fichier d’en-tête sera créé au bon endroit!

: D J'espère que ça aide!

147
Renan Kosicki

Dans mon cas, il s’agissait d’une erreur résultant d’une référence circulaire. J'avais une classe importée dans l'en-tête de pontage et le fichier d'en-tête de cette classe importait l'en-tête Swift (<MODULE_NAME>-Swift.h). Je faisais cela parce que dans le fichier d'en-tête Obj-C je devais utiliser une classe déclarée dans Swift, la solution consistait simplement à utiliser le déclaratif @class.

Donc, fondamentalement, l'erreur disait "Impossible d'importer l'en-tête de pontage", l'erreur ci-dessus indiquait que le fichier <MODULE_NAME>-Swift.h était introuvable. Cette erreur était une erreur pointant vers un fichier d'en-tête Obj-C spécifique (à savoir un contrôleur de vue).

En inspectant ce fichier, j'ai remarqué qu'il contenait le -Swift.h déclaré dans l'en-tête. Le déplacement de cette importation vers l'implémentation a résolu le problème. Donc j’avais besoin d’utiliser un objet, appelons-le MyObject défini dans Swift, aussi j’ai simplement changé l’en-tête pour dire

@class MyObject;
66
Daniel Galasko

Trouvez le chemin à:

Paramètres de construction Comp Compilateur Swift Génération de code En-tête de pontage Objective-C

et supprimez ce fichier. Alors ça devrait aller.

30
variadics

Cela ne concernera probablement qu'un faible pourcentage de personnes, mais dans mon cas, mon projet utilisait CocoaPods et l'une de ces nacelles avait une sous-spécification avec ses propres CocoaPods. La solution consistait à utiliser les importations sous tous les angles pour référencer tous les fichiers des sous-modules.

#import <HexColors/HexColor.h>

Plutôt que

#import "HexColor.h"
17
Kyle Clegg

Pour moi, la suppression de données dérivées corrigée, j'ai remarqué que même si je vérifiais à partir d'un ancien commit, le même problème se produisait.

Vous pouvez accéder à cette option sous Fenêtre-> Projets.

15
M.Othman

"nous devons dire Xcode où chercher les fichiers d'en-tête nous Inscrivez-vous dans notre en-tête de pontage . Recherchez la section Chemins de recherche et modifiez le paramètre au niveau du projet pour l'utilisateur . En-tête des chemins de recherche , ajout d’une entrée récursive pour le répertoire 'Pods': Pods/ ** " http://swiftalicio.us/2014/11/using-cocoapods-from-Swift/

9
G S

Pour moi, c'est parce que j'ai oublié de l'ajouter aux paramètres de construction de la cible.

enter image description here

9
Roland Keesom

J'ai également rencontré ce problème et, malheureusement, il ne s'agit que d'un bogue dans le SDK + Xcode. J'ai discuté avec un ingénieur de la WWDC de ce problème et de quelques autres problèmes que je rencontrais avec CloudKit. Ces bugs seront traités dans la prochaine graine de Xcode.

C'est la partie amusante de l'utilisation du logiciel bêta.

6
douglas bumby

pour ceux qui ont du mal à ajouter Swift class dans le projet objective-c. c'est ce qui fonctionne pour moi:

  1. créer un nouveau fichier Swift. cela fera xcode Prompt si vous voulez que xcode crée tous les paramètres du projet Swift-objective-c, y compris brigde-header.h, pour vous. appuyez sur oui.
  2. ajoutez maintenant les fichiers Swift que vous souhaitez utiliser dans votre projet.
  3. dans le fichier d'implémentation, vous allez utiliser la classe Swift, ajoutez: #import "YOURPROJECTNAME-Swift.h". ce fichier xcode crée pour vous. si votre projet xcode est myProject, alors "myProject-Swift.h"

et c'est tout. Créez maintenant la classe Swift dans votre code, comme s'il s'agissait de objective-c.

3
user1105951

J'ai importé dans certains fichiers à partir de fichiers d'en-tête bridgin à partir de cocoapods pas de manière appropriée.

Au lieu d'importer

#import <SomeCocoaPod/SomeCocoaPod.h>

J'ai écrit

#import "SomeCocoaPod.h"

Et ce fut mon énorme erreur

2
Nikolay Shubenkov

Pour moi, il ne s'agissait pas de sélectionner "Copier les éléments si nécessaire" dans le chemin de destination lors de l'ajout de la structure. Rajoutez simplement le framework avec cette option sélectionnée.

2
Daisy R.

Ajoutez un fichier temporaire Objective-C à votre projet. Vous pouvez lui donner le nom de votre choix.

Sélectionnez Oui pour configurer un en-tête de pontage Objective-C.

Supprimez le fichier Objective-C temporaire que vous venez de créer.

Dans le fichier projectName-Bridging-Header.h que vous venez de créer, ajoutez cette ligne:

'# import <GoogleMaps/GoogleMaps.h>'

Editez le fichier AppDelegate.Swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

Suivez le lien pour un échantillon complet

2
Atul Kaushik

J'ai rencontré ce type d'erreur en ajoutant une extension Aujourd'hui à mon application. La cible de génération pour l'extension a été générée avec le même nom d'en-tête de pontage que la cible de génération de mon application. Cela entraînait l'erreur, car l'extension ne voyait pas les fichiers répertoriés dans l'en-tête de pontage de mon application.

La seule chose que vous devez faire est de supprimer ou de changer le nom de l’en-tête de pontage pour l’extension et tout ira bien.

J'espère que cela vous aidera.

1

J'ai le même problème pour une raison différente, voici mon cas Je construis un projet qui doit inclure un menu de diapositives, j'utilise SWRevealViewController lib pour l'aborder.

lorsque j'importe les fichiers de bibliothèque, j'ajoute un sous-dossier (SWRevealViewController) sous Fichiers de prise en charge pour les fichiers .h && .m. Il génère deux erreurs. Impossible d'importer le pont. SWRevealViewController.h est introuvable.

Comment je le répare

lorsque je déplace des fichiers directement dans Supporting Files (sous-dossier de suppression), SWRevealViewController.m est ajouté automatiquement à Build Phases -> Compile Sources et le problème a disparu.

enter image description here

1
Mina Fawzy

Après quelques jours de lutte, j'ai finalement réussi à intégrer l'abonnement Facebook à mon application iOS. Voici les étapes (je suppose que vous avez déjà installé le SDK version 4.1 ou supérieure de Facebook dans vos machines):

  1. Ajoutez les cadres Facebook - FBSDKCoreKit, FBSDKLoginKit dans votre projet.
  2. N'effectuez aucune modification dans les paramètres de construction, car FB SDK version 4.1 et ultérieure ne nécessite plus de pontage des fichiers d'en-tête.
  3. Importez les fichiers FBSDKCorekit, FBSDKLoginKit dans les fichiers ViewController.Swift, AppDelegate.Swift
  4. Ajouter des informations dans la liste comme mentionné ici

  5. Construisez votre application. Et wohoo! pas d'erreur de compilation.

1
HITESH AGARWAL

Parmi les autres correctifs, l'erreur s'est produite lorsque j'ai essayé de faire Product-> Archive. Il s'avère que j'ai eu ceci:

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

Après l'avoir défini dans cette dernière ligne, cela a fonctionné.

0
nevster

Réglez en-tête de pontage de précompilation sur Non résolvez le problème pour moi.

0
abelhoang

J'ai en fait créé un fichier source OSX Source OSX sous le projet (où se trouvent tous mes fichiers Swift).

J'ai ajouté les importations, puis supprimé le fichier . M.

0
goggelj

Avait un problème similaire qui ne pourrait pas être résolu par une solution ci-dessus. Mon projet utilise CocoaPods. J'ai remarqué qu'avec les erreurs, j'ai reçu un avertissement avec le message suivant:

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

enter image description here

Donc la solution était assez simple. Pour le projet Pods, remplacez l'indicateur Générer l'architecture active uniquement par Non et l'erreur d'origine a disparu.

0
mike.tihonchik