J'ai lu beaucoup de questions et de réponses qui traitent d'un problème similaire, mais je n'ai pas encore trouvé de solution. Si quelqu'un pouvait faire la lumière, ce serait merveilleux.
J'ai créé un projet Swift et je souhaite maintenant le combiner avec un certain Objective-C. Mon "en-tête de pontage d'échec d'importation" n'a lieu que lorsque je tente # d'importer mon fichier Chartboost.h. Donc, tant que je n'ai rien dans mon fichier d'en-tête de pontage, Xcode le trouve et ne me pose aucun problème. Mais une fois que j'ajoute ceci:
#import <Chartboost/Chartboost.h>
Je reçois l’erreur avec 38 autres erreurs indiquant «Erreur du compilateur Swift - La définition de fonction n’est pas autorisée ici».
J'ai correctement importé mon framework. Et mon chemin de recherche de cadre est correct. Et ce n'est que lorsque j'importe le cadre Chartboost. UIKit et Foundation fonctionnent bien.
Voici ce que j'ai fait en amont du problème ... Tout d'abord, j'ai créé un nouveau fichier Obj-C, puis j'ai cliqué sur "Oui quand Xcode m'a ouvert une fenêtre contextuelle lui demandant s'il pouvait configurer un en-tête de pontage. Ceci a créé" FunFacts -Bridging-Header.h "
Je me suis ensuite assuré que le chemin de l'en-tête de pontage Objective-C était correct sous Swift Compiler - Génération de code.
J'ai même mis dans un chemin très spécifique /Users/me/Desktop/FunFacts/FunFacts-Bridging-Header.h et il dit toujours "Échec de l'importation".
J'ai également défini le module Defines sur "Oui" (car j'ai entendu dire que cela pourrait aider). Et mon nom de module de produit est FunFacts.
Pourquoi FunFacts-Bridging-Header.h ne parvient-il pas à importer lorsque j'essaie d'ajouter #import?
J'ai compris 2 solutions!
1) Ce n’est pas la meilleure façon de le faire, mais je copie et colle tout mon code de mon fichier Chartboost.h dans mon fichier Bridging-Header.h au lieu de l’importer. Cela a fonctionné. Mais je savais qu'il y avait un meilleur moyen, alors j'ai continué à chasser ...
2) Je pense que la solution correcte est ce que j'ai fait ensuite. Les chemins de recherche de structure de mon projet (non cible) étaient vides. J'ai donc ajouté le chemin d'accès au SDK Chartboost comme suit:/Utilisateurs/moi/Bureau/Applications/SDK/Chartboost
Maintenant, il fonctionne sans problème et je n’ai pas à tout copier/coller dans l’en-tête de pontage. Tout ce qui était nécessaire était
#import <Chartboost/Chartboost.h>
Si quelqu'un a un problème similaire, lisez ce que j'ai fait dans ma question, puis faites un suivi avec cette réponse.
J'ai répondu à cela dans un autre article: Problèmes d'intégration de Chartboost avec XCode 6.1
Il semble que certains pods et bibliothèques ne importent pas les frameworks de base car ils s'attendent à ce que votre code les ait déjà. Cela ne fonctionne pas avec Swift, car la manière d'importer les frameworks a changé . Tout ce que vous avez à faire est d'ajouter les frameworks nécessaires dans votre fichier d'en-tête de pontage.
Cela dépend des erreurs que le compilateur génère . S'il se plaint de NSObject
, NSString
, etc ..., vous devez ajouter #import <Foundation/Foundation.h>
en haut de votre fichier d'en-tête de pontage.
S'il se plaint de UIView
, UIButton
, etc ..., vous devez ajouter #import <UIKit/UIKit.h>
en haut de votre fichier d'en-tête de pontage.
Le problème comme le vôtre m'a laissé perplexe ... Mais j'ai trouvé une solution.
#import <Foundation/Foundation.h>
Vous devriez mettre ce code (↑) avant votre code ..__ C'est juste ma solution ().
#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>
Bonne chance!
C'est tout.
Apparemment, Xcode manque les dossiers tiers quand ils sont copiés dans votre projet
Je suis sur Xcode 6.3, Swift 1.2.
La réponse est vraiment très simple.
Assurez-vous d’ajouter votre chemin d’entête de pontage dans Swift_OBJC_BRIDGING_HEADER sous la section cible au lieu de la section projet.
Si vous utilisez CocoaPods, cela pourrait vous faire gagner du temps ... 1. La première chose que vous devez faire est de vérifier votre Podfile:
target 'YourProjTests' do
inherit! :search_paths
end
target 'YourProjUITests' do
inherit! :search_paths
end
2) Ouvrez la configuration baseproj et définissez les objectifs corrects dans Pods-Proj.debug, voir image ci-jointe:
Avait un problème presque identique et a trouvé une solution qui a fonctionné pour moi.
Mon problème était que l'en-tête de pontage n'était pas dans TOUTES mes cibles.
C'était dans mon projet mais pas dans ma cible UnitTest. Je l'ai donc ajouté à mon UITest et à UnitTest et cela a commencé à fonctionner sans problème.
Si vous avez ces lignes dans votre en-tête de pontage:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#endif /* Bridging_Header_h */
Supprimez-les simplement, cela résoudra les problèmes de Foundation et de UIKit.
Un cas est que si import <Chartboost+Extention/Chartboost+Extention.h>
,
La bonne façon est de import <Chartboost**_**Extention/Chartboost+Extention.h>
,
Juste parce que Pod build va changer le nom de framework de Chartboost+Extention
en Chartboost_Extention