Dans un framework personnalisé contenant à la fois du code Objective-C et Swift , le compilateur Swift génère l'erreur suivante:
[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
umbrella header "bugtest.h"
^
<unknown>:0: error: could not build Objective-C module 'bugtest'
ios
swift
ios-frameworks
Tim Bodeit
la source
la source
Dans Xcode 7 Beta, avec Swift 2, cela se produira également si votre Framework Header n'est pas déclaré comme "Public"
Par exemple, j'avais un Cocoa Touch Framework avec une visibilité "Projet" pour le fichier d'en-tête, et l'erreur "Umbrella Header ... not found" pour tous les fichiers Swift de mon projet, une fois que j'avais l'en-tête "Public", le l'erreur est partie
la source
Cela peut se produire de 4 manières différentes, en ignorant les bogues des versions précédentes de Xcode
DEFINES_MODULE
n'est pas réglé surYES
CLANG_ENABLE_MODULES
n'est pas réglé surYES
la source
Cela se produit lorsque le
Always Search User Paths
paramètre est activé pour la cible Framework.Le paramétrer sur
No
résoudra cette erreur.IMHO c'est un bogue dans le compilateur Swift et j'ai déposé un radar avec Apple.
Voir rdar: // 21038443
la source
Pour moi, le niveau d'accès était public, mais il échoue également sur le parapluie introuvable. J'ai déplacé la section "En-têtes" des "Phases de construction" vers le haut et cela a commencé à fonctionner. Script vers podfile:
Je n'ai aucune idée de pourquoi cela se produit. J'ai essayé des projets factices - cela ne se produit pas. Uniquement sur les gros avec plusieurs dépendances. Quelque chose avec la compilation AVANT de copier les en-têtes parapluie.
la source
Podfile
Fichier non valide : erreur de syntaxe, fin de saisie inattendue, attente de keyword_end.Vous devez certainement définir votre framework sur public:
la source
Pour moi, le réglage "Utiliser les cartes d'en-tête" sur "NON" a résolu le problème
la source
Une autre solution: après avoir renommé un dossier, l'ancien emplacement peut toujours être répertorié dans le fichier de projet pour le fichier .h, même si vous avez mis à jour l'emplacement via la barre latérale de Xcode. Cet ancien emplacement provoque l'erreur d'en-tête parapluie.
Solution simple: supprimez la référence au fichier .h et ajoutez à nouveau. (et n'oubliez pas de le rendre à nouveau public!)
la source
J'ai trouvé qu'avec le nouveau système Swift Build et Parallelize Build activés le schéma, j'obtiendrais des erreurs comme dans cette question. La solution consistait à créer un lien vers des frameworks qui avaient été importés dans les fichiers source swift. (Je pense qu'avant, l'application se construirait parce qu'il venait juste de se produire que les cadres étaient liés à quelque chose de construit précédemment dans la file d'attente de construction en série).
J'ai écrit un script pour parcourir toutes les importations dans toutes les cibles d'un espace de travail et m'assurer que leurs cadres ont été liés à cette cible.
https://github.com/Jon889/SwiftImportChecker
la source
Il y a déjà d'excellentes réponses ici. @ Shadow_x99 a été très utile. Cependant, si je pouvais être autorisé à compléter avec ma propre expérience.
Un en-tête parapluie est identifié automatiquement dans le processus de construction. Ce n'est pas un spécifié dans les paramètres de construction de la cible ou hérité des paramètres du projet.
Donc, pour éviter cette erreur qui - à partir de XCode 7 - est comme suit;
warning: no umbrella header found for target 'MyTarget', module map will not be generated
deux mesures importantes doivent être prises.
Tout d'abord, l'en-tête parapluie doit avoir le même nom que la cible . Donc, si votre cible est un framework nommé
MyTarget
, il doit y avoir un en-tête nomméMyTarget.h
.Deuxièmement, dans les phases de construction pour
MyTarget
- comme mentionné dans cette réponse - ce fichier d'en-tête doit être répertorié dans la section publique comme détaillé ci-dessus.la source
J'ai eu le même problème et aucune des réponses suggérées n'a aidé dans mon cas, donc je laisse ceci ici au cas où quelqu'un aurait le même problème.
J'avais ajouté un "Run script" dans "Build phases" mais j'ai fini par le supprimer et c'est là que j'ai commencé à avoir l'erreur.
Ma solution a fini par devoir nettoyer le projet, reconstruire mon framework, puis mon projet d'application construit correctement.
la source
D'après mon expérience, vous devez choisir sur les cibles le cadre qui vous donne l'erreur, pas la cible du projet.
Ensuite, compilez et après la compilation, il sera disponible sur la cible du projet.
la source
Si vous utilisez Xcode 7.1 et CocoaPods 0.39, il semble y avoir un changement rapide du compilateur qui affecte certains CocoaPods (Nimble, Quick, etc.) Essayez certaines des solutions spécifiées dans ce fil: https://github.com/ CocoaPods / CocoaPods / issues / 4420 cependant, si aucun d'eux ne fonctionne, essayez d'utiliser Xcode 7.0.1 ou 7.2 beta. Vous pouvez obtenir les deux ici: https://developer.apple.com/downloads/ .
Edit: Dans mon cas, pour résoudre le problème, j'ai également dû rétrograder CocoaPods à 0.38.2.
Modification ultérieure: il ne semble pas être lié à Xcode 7.1. Le simple fait de rétrograder CocoaPods à 0.38.2 devrait aider:
la source
Votre fichier d'en-tête doit se trouver dans la section [Build Phases / Headers / Public].
Si votre fichier d'en-tête est déjà dans la section [Build Phases / Headers / Public], plusieurs fois la mise en jachère a résolu mon problème:
la source
J'ai résolu ce problème en renommant mon module.modulemap en moduleXYZ.modulemap et en modifiant le nom du fichier modulemap dans les paramètres du projet
la source
Dans mon cas, je viens de construire le cadre spécifique avec son schéma. Et puis reconstruisez l'ensemble du projet et cela a résolu le problème
la source
assurez-vous que les "chemins d'importation" dans les paramètres de construction incluent le fichier que vous essayez d'inclure
la source
Supprimez ces fichiers du répertoire du projet.
.xcworkspace
pods/
etpodfile.lock
mettez à jour le pod et générez le projet.
la source
Je l'ai corrigé en définissant le mode de compilation des paramètres de construction du framework problématique sur Incrémental.
la source
Dans mon cas, le problème a été causé par le script de suppression des en-têtes dans les phases de construction
La suppression de ce script a résolu le problème.
la source
Aucune des 9 réponses ne m'a aidé, j'ai donc essayé de créer un nouveau projet que je pourrais envoyer à Apple pour signaler un bogue. J'ai été surpris de ne pas pouvoir reproduire le problème. J'ai vérifié les paramètres de construction et ils étaient équivalents. Apparemment, c'est une sorte de bug.
Si rien d'autre ne vous aide , essayez de créer un nouveau projet et importez au moins quelques classes Objective C & Swift de votre projet actuel, comparez les paramètres de construction liés à votre framework aux valeurs par défaut du nouveau projet, et finalement déplacez tous les fichiers vers le nouveau projet.
la source
J'y travaille depuis une journée entière, mais ça vaut le coup. J'ai essayé toutes les méthodes ici, mais je ne l'ai pas résolu. J'ai créé un nouveau projet, une expérience, et j'ai découvert que le chemin de recherche de l'en-tête de l'utilisateur était réglé $ {SRCROOT} récursif , et je l'ai changé en $ {SRCROOT} non récursif , changé le chemin de l'en-tête de pontage (par exemple
#import "SVProgressHUD.h"
->#import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), le l'erreur est partie.la source