web-dev-qa-db-fra.com

Importation de Project-Swift.h dans une classe Objective-C ... fichier non trouvé

J'ai un projet qui a été démarré dans Objective-C et j'essaie d'importer du code Swift dans les mêmes fichiers de classe que ceux dans lesquels j'ai précédemment écrit Objective-C.

J'ai consulté Apple docs sur l'utilisation de Swift et d'Objective-C dans le même projet, ainsi que sur SO question comme cela, mais toujours en vain: je continue à obtenir le fichier non erreur trouvée après la mise en #import "NewTestApp-Swift.h" (NewTestApp est le nom du produit et du module).

Voici ce que j'ai fait jusqu'à présent:

  1. Dans Define Modules, sélectionnez YES pour l'application.
  2. Assurez-vous que le nom du module de produit ne contient aucun espace (voir la capture d'écran ci-dessous question)

J'ai essayé d'utiliser #import "NewTestApp-Swift.h" dans ViewController.m, ViewController.h et AppDelegate.m mais aucun d'entre eux n'a fonctionné. 

Que fais-je de manière incorrecte? Merci de votre aide.


Capture d'écran des paramètres:

enter image description here


Erreurs que je rencontre actuellement:

enter image description here

98
daspianist

Je rencontrais le même problème et je ne parvenais pas à importer mon projet Swift dans les classes obj-c. En utilisant Xcode 6, (devrait fonctionner pour Xcode 6+) et a été capable de le faire de cette façon ....

  1. Toute classe dont vous avez besoin pour accéder à dans le fichier .h doit être une déclaration forward, comme ceci

@class MySwiftClass;

  1. UNIQUEMENT dans le fichier .m, si le code est dans le même projet (module), vous devez l’importer avec

#import "ProductModuleName-Swift.h

Lien vers la documentation Apple à ce sujet

https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//Apple_ref/doc/uid/TP40014216-CH10-XID_87

116
bolnad

Si le code Swift est à l'intérieur d'un module (comme dans votre cas):

#import <ProductName/ProductModuleName-Swift.h>

Si le code Swift est dans le projet (mélange Swift et ObjC):

#import <ProductModuleName-Swift.h>

Dans votre cas, vous devez ajouter cette ligne dans le fichier * .m:

#import <NewTestApp/NewTestApp-Swift.h>

IMPORTANT: regardez le "<" dans la déclaration d'importation

https://developer.Apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

74
ikocel1

Comment j'ai réussi à importer Swift dans objective-c:

  • Defines Module défini sur YES (sur projet - pas sur cible)
  • Nom du module de produit défini (sur la cible - pas sur le projet)
  • Dans votre ViewController.m, importez le code Swift avec:

    #import "MyProductModuleName-Swift.h"
    
  • Ajouter un fichier Swift à votre projet objective-c (Fichier -> Nouveau -> Swift) et Xcode créera l’entête de pontage d’objectif-c à Swift mais c’est crucial pour le faire fonctionner l’autre faire le tour aussi - apparemment.

Pour la dernière pièce de ce puzzle, merci à Swiftoverload de m'avoir informé de l'ajout d'un fichier Swift via l'interface graphique Xcode et de ne pas simplement glisser-déposer des fichiers Swift existants dans mon projet pour le faire fonctionner: http: // nikolakirev.com/blog/using-Swift-in-objective-c-project

47
holm50

Utilisation de Xcode 8.2.1 et si vous regardez Projet> Paramètres de construction> Nom d'en-tête d'interface généré par Objective-C , il indique un seul fichier d'en-tête portant le nom Product - Swift.h

Cela signifie qu'au lieu d'importer chaque module séparément du fichier .m d'Objective-C, en utilisant un fichier -Swift.h individuel, vous importez simplement un Product -Swift.h qui a agrégé tous les modules Swift.

J'ai rencontré le même problème en recherchant une méthode traditionnelle d'importation de modules séparément, mais la version actuelle de Xcode et Swift 3 l'a modifiée pour utiliser un seul en-tête pour toutes les importations de modules.

10
petershine

J'avais des problèmes pour importer Swift dans un projet Objective-C. Finalement, j'ai examiné le dossier Derivied Data pour vérifier ce que Xcode 7 générait. Le nom de fichier était complètement différent de celui auquel je m'attendais.

Une fois que j'ai eu le nom de fichier, j'ai importé cela et le projet a pu être construit.

5
Josh B

DEFINE MODULES: YES Et importez "ProjectName-Swift.h" dans le fichier .m de la classe Obj-C

Cela a fonctionné pour moi pour accéder aux classes Swift à Obj-c.

2
YSR fan

Au cours du développement, il se peut que vous ayez une classe Swift non complètement implémentée, ce qui pourrait entraîner des erreurs de syntaxe. Le fichier d’en-tête Swift ne sera disponible que si tous les fichiers Swift sont exempts d’erreur. 

Assurez-vous qu'il n'y a pas d'erreur de syntaxe dans les fichiers Swift, puis essayez d'importer l'en-tête Swift dans le fichier objective -c. 

1
Gurunath Sripad

Si vous avez passé une heure sur cette question, suivez ces étapes pour vous aider à comprendre ce qui manque:

  1. Ouvrez les préférences Xcode et accédez au dossier DerivedData
  2. Recherchez "Swift.h" dans le Finder
  3. Si vous ne trouvez aucun fichier project-Swift.h, ce fichier n'a pas été généré. Vous devez généralement ajouter @objc à l'une de vos classes Swift et créer l'application avec succès. Xcode ne générera alors ce fichier.
  4. Si vous avez trouvé le fichier "xxx-Swift.h", assurez-vous que votre déclaration d'importation contient le nom correct.

 how-to-locate-Swift-file

1
Jakehao

Importation du fichier d’en-tête, c.-à-d.

#import "<ProjectName>-Swift.h" 

dans le fichier .h a généré une erreur, indiquant:

-Swift.h 'fichier non trouvé

et la construction a échoué.

Utilisez plutôt:

#import "<ProjectName>-Swift.h"

dans le fichier .m, et même si la même erreur apparaît, l’exécution du projet supprime malgré tout l’erreur.

Les classes Swift sont alors disponibles dans le fichier .m.

1
Claytog

Avais rencontré le même problème avec mon équipe quand travaillait sur un projet utilisant git. Un développeur n'a pas mis à jour Xcode avec la dernière version (7.3) requise pour la dernière version de Swift 2.2. Le compilateur n'a donc pas reconnu la nouvelle syntaxe Swift et n'a pas pu générer d'interface pour la bibliothèque Swift (nom du projet-Swift.h). Vérifiez si la version de Xcode est la plus récente!

1
Artem Loginov

J'ai fait face au problème avec le nom du projet (cible). Il comprenait le symbole "-". La décision a donc été la suivante: si le nom du projet est "Test-App", le nom de la classe importée est "Test_App-Swift.h"

0
opochtovy

-Swift.h devrait être créé automatiquement par Xcode si Swift code expose une API via @objc ou @objcMembers

Habituellement, un emplacement ressemble à

~/Library/Developer/Xcode/DerivedData/
  ProductModuleName-foo/
    Build/
      Intermediates.noindex/
        ProductModuleName.build/
          Debug-iphoneos/
            ProductModuleName.build/
              DerivedSources/
                ProductModuleName-Swift.h

Il peut être changé par

Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path

Par défaut, la valeur est $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

0
yoAlex5