Je viens de passer à Xcode 6 Beta 4 et j'ai un framework que j'ai créé pour Live Views dans Beta 2. En raison d'un autre bug rapide , j'ai dû utiliser du code Obj-C. Lors de la mise à niveau, j'obtiens l'erreur suivante:
erreur: l'utilisation d'en-têtes de pontage avec des cibles de structure n'est pas prise en charge
Je n'ai rien vu dans les notes de publication, ni trouvé aucun autre chemin de migration. Quelqu'un d'autre a-t-il vu cela et est-il arrivé à une solution?
Je me rends compte que la bêta 3 a éliminé le besoin de cadres pour les vues en direct, mais cela a du sens dans mon cas si je peux le faire fonctionner. Je peux cependant le supprimer comme solution de secours, mais je préférerais utiliser un framework s'ils ne sont pas totalement cassés dans la bêta 4.
la source
Réponses:
Comme l'indique l'erreur, les en-têtes de pontage ne sont pas autorisés dans Frameworks. La section Importing Code from Within the Same Framework Target de la documentation Apple Mix & Match y fait allusion. Comme on dit, vous devez "Dans votre fichier d'en-tête parapluie, importez chaque en-tête Objective-C que vous souhaitez exposer à Swift".
Cependant, j'ai découvert que vous devrez peut-être également rendre ces en-têtes spécifiques publics. Cette réponse examine pourquoi et comment faire cela: Erreur du compilateur Swift: "en-tête non modulaire à l'intérieur du module de structure" .
Alors, faites ceci:
Remarque : Le «fichier d'en-tête parapluie» est un fichier (nommé [ProductName] .h) qui représente généralement tous les en-têtes publics d'un framework. Il s'agit généralement d'une liste d'instructions #import vers d'autres en-têtes contenus dans le framework. Dans Xcode, si vous ouvrez UIKit.h, vous verrez un bon exemple de fichier parapluie.
la source
Il y a deux possibilités. Ajouter les en-têtes nécessaires au fichier d'en-tête parapluie et les rendre publics est un moyen. Cependant, cela pose un problème si les en-têtes doivent être disponibles pour Swift, mais pas publics.
La deuxième possibilité qui rendra disponibles les en-têtes internes à Swift est décrite en détail ici . Essentiellement, une carte de module similaire à la suivante doit être créée:
Cela peut ensuite être inclus dans XCode en utilisant le paramètre:
la source
header
instruction accepte un chemin relatif. Que faites-vous lorsque vous souhaitez ajouter les en-têtes d'un autre framework?Voir Importation d'Objective-C dans Swift .
Pour importer du code Objective-C dans Swift à partir du même framework
Dans votre fichier d'en-tête parapluie, importez chaque en-tête Objective-C que vous souhaitez exposer dans Swift. Par exemple:
Rendez les fichiers inclus publics dans la section "En-têtes" du framework de ses "Phases de construction".
Nettoyez et reconstruisez.
Swift verra chaque en-tête que vous exposez publiquement dans votre en-tête parapluie. Le contenu des fichiers Objective-C dans ce cadre sera disponible dans n'importe quel fichier Swift au sein de cette cible de cadre automatiquement, sans aucune instruction d'importation. Utilisez votre code Objective-C personnalisé avec la même syntaxe Swift que vous utilisez avec les classes système.
Important: le "fichier d'en-tête parapluie" désigne le fichier {ModuleName} .h. BTW, le nom de la cible est {ModuleName} .framework.
la source
Dans mon cas, la suppression des
Objective-C Bridging Header
paramètres de mon cadre aBuild Settings
aidé.la source