web-dev-qa-db-fra.com

la cible de test unitaire ajoutée à xcode - échec de l'importation de l'en-tête de pontage ne disparaîtra pas

J'ai ajouté une nouvelle cible de test à mon projet XCode. Mon projet a un code Swift et un code Objective-C, ainsi qu'un en-tête de pontage. Lors de l'ajout de l'en-tête de pontage aux paramètres de construction de UnitTesting ou de l'exécution de import MyTarget, le message d'erreur suivant s'affiche:

failed to import bridging header

J'ai essayé:

  • Ajout de l'en-tête de pontage aux paramètres de construction du projet, des tests unitaires et de la cible principale.
  • Changer defines modules en Yes.
  • Déplacement du fichier d'en-tête de pontage vers le dossier racine.

J'ai également essayé de créer un exemple de projet, qui s'est construit et a bien fonctionné. Prendre tout ce que j'ai dans un nouveau projet propre n'est pas une option pour le moment.

21
Andrew

Si vous utilisez Pod en tant que gestionnaire de paquets, vous devez définir le chemin de recherche, etc.

essayez d'ajouter ceci dans Podfile

target 'YourProductTests' do
    inherit! :search_paths
    # Pods for testing
end

et pod install

Ça marche pour moi.

Si la solution ci-dessus ne vous convient pas. Essayez de définir manuellement

  1. Cliquez sur votre cible de test -> Paramètre de construction-> onglet: Toutes & Combinée -> Générateur de code Swift Compiler -> En-tête de pontage Objective C: ajoutez votre en-tête xxx-pontage

  2. Cochez "Chemin de recherche", définissez les valeurs de Framework Search Path, Header Search Paths, Library Search Path en fonction de votre cible principale. Peut-être que certains chemins de recherche perdent ici, ajoutez-les à nouveau manuellement.

32
Victor Choy

À ce stade, je n'ai jamais eu à import MyTarget pour que les tests unitaires fonctionnent dans Swift.

Solutions communes

  • Je suppose que vous avez essayé, mais il n'a pas été clair si vous avez ajouté votre en-tête de pontage à la cible de votre application et à la cible de test en même temps?
  • Une autre option, qui peut ne pas être idéale, consiste à ajouter un en-tête de pontage dans votre cible de test afin que vous disposiez réellement de 2 en-têtes de pontage. Ils devraient être identiques et constitueraient un bon test.
  • Si vous utilisez $(SRCROOT) pour référencer votre chemin d’en-tête de pontage, assurez-vous qu’il est évalué pour le chemin correct.
  • Si tout échoue, vous devriez classer le fichier diff de votre .xcodeproj avec celui de votre projet en cours et faire correspondre les valeurs pertinentes qui pourraient être différentes.

Le système d'en-tête de pontage n'est pas parfait, mais voici quelques problèmes que j'ai rencontrés.

3
tfrank377

J'ai rencontré le même problème. J'ai fait ce qui suit et le problème de «Impossible d'importer l'en-tête de pontage» est résolu.

Pas:

  1. Sélectionnez votre projet -> Paramètres de construction -> Rechercher ' module Définit ' -> donnez 'OUI'
  2. Copier le chemin de l'en-tête de pontage Objective-C
  3. Sélectionnez votre cible de test -> Paramètre de construction -> Compilateur Swift - Général -> En-tête de pontage Objective-C -> Donner le chemin d’en-tête de pontage.
  4. Assurez-vous que ' Chemins de recherche d'en-tête ' des cibles de test contient tous les en-têtes des cibles ios. Ajoutez-les si l'un des en-têtes est manquant.
  5. Construire.

Référence: Référer ce lien.

0
Ssrini

La solution @Victor Choy fonctionne pour moi, mais je devais déplacer la cible de test à l'intérieur de la cible du produit comme suit:

target 'YourProduct' do

   # Pods for product

   target 'YourProductTests' do
      inherit! :search_paths
      # Pods for product testing
   end
end

Cela n'a pas fonctionné pour moi:

target 'YourProduct' do
   # Pods for product
end

target 'YourProductTests' do
   inherit! :search_paths
   # Pods for product testing
end
0
mkkrolik