web-dev-qa-db-fra.com

l'en-tête de parapluie du module 'myFramework' n'inclut pas l'en-tête 'otherFramework.h'

Mon Swift/iOS9 'viewer_protocol' utilise un autre et externe cadre Objective-C ( CocoaAsyncSocket ). J'utilise Carthage pour créer CocoaAsyncSocket. Jusqu'à présent, tout fonctionne correctement. : J'ai un exemple d'application dans mon framework Xcode Project utilisant mon framework sans aucun problème.

Maintenant, je veux utiliser mon Framework dans un projet Xcode différent - bien que j'utilise Carthage. Je n'inclus que mon Framework en tant que dépendance et Carthage résout automatiquement les dépendances à CocoaAsyncSocket. J'ai intégré les deux frameworks dans ce nouveau projet Xcode et construit mon application: tout fonctionne bien ici - sauf un avertissement que je ne parviens pas à éliminer:

/Users/hibento/Repositories/viewer_protocol/<module-includes>:1:1: 
Umbrella header for module 'viewer_protocol' does not include header 'GCDAsyncSocket.h'

Ceci est mon en-tête de cadre:

#import <UIKit/UIKit.h>

//! Project version number for viewer_protocol.
FOUNDATION_EXPORT double viewer_protocolVersionNumber;

//! Project version string for viewer_protocol.
FOUNDATION_EXPORT const unsigned char viewer_protocolVersionString[];

// In this header, you should import all the public headers of your framework     
using statements like #import <viewer_protocol/PublicHeader.h>
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>

Comme vous pouvez le voir, CocoaAsyncSocket.h est importé. En outre, dans mon cadre, le fichier CocoaAsyncSocket.h est inclus:

my framework's folder

Qu'est-ce qui me manque ici? J'utilise plusieurs autres cadres externes dans mon cadre, il n'y a pas d'avertissements pour eux - tous ces cadres externes sont écrits en Swift - CocoaAsyncSocket est purement Objective-C.

Voici mes frameworks module.modulemap:

 framework module viewer_protocol {
   umbrella header "viewer_protocol.h"

   export *
   module * { export * }
 }

 module viewer_protocol.Swift {
     header "viewer_protocol-Swift.h"
 }

Mettre à jour

J'ai trouvé une solution: modifier l'instruction d'importation dans l'en-tête de mon cadre de

#import <CocoaAsyncSocket/CocoaAsyncSocket.h>

à

#import "CocoaAsyncSocket/CocoaAsyncSocket.h"

Maintenant, Xcode trouve le fichier d'en-tête et l'avertissement disparaît.

45
hibento

J'ai récemment rencontré le même problème. Apparemment, j'avais le fichier d'en-tête défini comme public dans l'appartenance à une cible, mais il n'était pas exposé dans l'en-tête d'un parapluie. Résolution du problème en créant un fichier d'en-tête avec projectaccès au lieu de public.

25
AyJay

J'ai eu le même problème aujourd'hui

le problème était

En-tête de parapluie pour le module ' HockeySDK ' n'inclut pas l'en-tête ' BITHockeyBaseViewController.h '

et la solution était

1.Construisez et exécutez le projet et rendez-vous Report Navigator

2. regardez l'avertissement, cliquez pour développer les détails

vous aurez ainsi le nom du fichier où vous devez apporter des modifications, comme vous pouvez le voir dans la capture d'écran ci-dessous

enter image description here

Donc, je viens de mettre à jour ma déclaration d'importation dans le fichier AppDelegate.m

Nouveau

#import "HockeySDK/HockeySDK.h"

Vieux

#import <HockeySDK/HockeySDK.h>

et problème disparu ..

j'espère que cela aidera quelqu'un. qui viennent ici pour la solution.

24
swiftBoy

J'ai eu le même problème. Semblait être lié à d'anciens fichiers de construction.

Le fixateur de problèmes Xcode standard a fonctionné pour moi:

  1. Projet propre
  2. Données dérivées supprimées
  3. Redémarrer Xcode
16
Senseful

Pour moi, la solution était la suivante:

1) Chaque framework Objective C possède 1 fichier d’en-tête contenant tous les éléments suivants:

#import ...
#import ...
#import ...

2) Assurez-vous que ce fichier importe l'en-tête manquant.

3) Construisez le projet à nouveau, il devrait supprimer l'avertissement.

14
Oded Regev

Juste pour compléter si votre en-tête est défini sur public dans:

Phases de construction> En-têtes

Vous devriez soit

Incluez l'importation dans votre en-tête principal, comme d'autres l'ont mentionné

OR

Déplacez cet en-tête sur "privé" s'il n'a pas besoin d'être exposé

7
pflous

Vous pouvez également avoir des fichiers exposés dans la zone Public des phases de construction de votre infrastructure, qui doivent en réalité être déplacés vers la zone Project.

Si vous ne voulez pas que ces fichiers se trouvent dans l'en-tête de votre framework afin qu'ils soient accessibles au public, vous pouvez annuler cette opération.

Goto Framework -> Target -> Build Phases et faites glisser pour déplacer les fichiers d’en-tête inutiles de Public à Project.

Screenshot

7
iwasrobbed

Nous avons eu cela récemment et cela était dû à la corruption dans DerivedData. La suppression de ce dossier a résolu le problème.

4
AnneTheAgile

Pour les autres: Dans mon cas, je déplace déjà les en-têtes que je souhaite exposer de mon cadre, de "projet" à "public" (phases de construction de la cible du cadre).

Puis Xcode a donné cet avertissement à mon.

Xcode nous dit que nous devons également ajouter #import "nom de l'en-tête dans l'avertissement> dans le fichier d'en-tête public créé avec framework, afin que les clients (du framework) connaissent cet en-tête.

Donc, le correctif:
1. Accédez au fichier d’en-tête public de la structure (celui créé par xcode lors de la création de la structure).
2. ajoutez #import "le-nom-de-l'en-tête-dans-l'avertissement.h"

0
user1105951

Jetez un oeil à ce post:

@ import vs #import - iOS 7

Il passe en revue les concepts de l'importation du nouveau module. J'avais mon propre cadre personnalisé et après avoir adopté la nouvelle méthode pour importer le cadre Objective-C

vieux: #import <MyFramework/MyFramework.h>

nouveau: @import MyFramework;

il s'est occupé de l'avertissement /

0
mjl007

Dans mon cas (cadre Obj-c):

Umbrella header for module 'opus' does not include header 'opus_multistream.h'

J'avais besoin de changer:

@import opus.opus_defines;

dans

@import opus;

(Je n'ai pas dans #import "....h" ou #import <....h> pour les cadres)

0
szubiszon