J'ai un projet avec Swift et Objective-C mixtes dans Xcode 8 qui utilise le fichier d'en-tête "ModuleName-Swift.h" généré pour importer Swift dans Objective -c, mais le préprocesseur n'est pas en mesure de trouver le fichier d'en-tête généré et génère une erreur lors de l'importation.
"Problème lexical ou de préprocesseur: 'Fichier ModuleName-Swift.h introuvable'"
Le projet se compile très bien, mais le préprocesseur génère des erreurs pour l'en-tête non trouvé et pour toutes les classes Swift appelées à l'intérieur de la classe, il n'y a pas de coloration syntaxique ou de complétion de code. C'est une tâche difficile de travailler avec = Swift classes dans Objective-c qui ne sont pas reconnues par Xcode 8, mais qui se compilent très bien.
Des idées sur la façon d'apaiser le préprocesseur dans Xcode 8?
J'avais exactement le même problème. Trouvé la solution après avoir ajouté un nouveau fichier visant une seule cible (par erreur) et remarqué qu'il n'a eu aucun problème à lire les classes Swift. Donc, si vous avez plusieurs cibles, et depuis la migration vous n'avez pas eu besoin de les construire et de les exécuter, vous suggérons de le faire.
Vous rencontrez ce problème lorsque nous avons plusieurs cibles. Si la variable Nom d'en-tête d'interface généré par Objective-c dans Swift des cibles nouvellement créées est différent de celui de la cible d'origine) Modifiez-la à la même valeur que la cible d'origine. Voir ce qui suit:
changer, newtargetname-Swift.h en originaltargetname-Swift.h pour nouvelle cible
Vous devez l'ajouter dans vos paramètres de construction.
Il peut y avoir un problème lors de la migration vers Xcode 8, où vous aurez unspecified
dans le paramètre de construction Swift.
Cela si de killerz
Accédez à Build Settings-> Objective-C Generated Interface Header Name et définissez la valeur sur YourModule-Swift.h (il est généralement déjà défini, il s'agit du nom de fichier que vous devez importer dans le fichier .m #import "YourModule-Swift.h "
Si
notez que chaque cible utilise (et devrait utiliser) un nom de fichier différent pour le nom d'en-tête d'interface généré par Objective-C .
Cela signifie que vous ne pouvez pas importer le fichier d'en-tête généré dans votre Objective-C .h
fichiers, car ils ne seront pas trouvés dans la cible de test:
Au lieu de cela, vous devez déplacer ces #import
instructions dans votre Objective-C .m
(fichiers d'implémentation), où ils seront créés avec succès.
Si vous devez vous référer à Swift classes dans un .h
fichier, tilisez le @class
directive , par exemple:
//
// ViewController.h
// import-example
//
#import <UIKit/UIKit.h>
@class SomeSwiftClass;
@interface ViewController : UIViewController
- (NSString *) titleFromGenerator:(SomeSwiftClass *)generator;
@end