J'essaie d'importer myFramework
dans un projet. J'ai ajouté myFramework
dans Build Phases-> Link Binary With Libraries.
Objective-c fonctionne:
#import <UIKit/UIKit.h>
#import <myFramework/myFramework.h>
Mais avec Swift, je reçois un No such module myFramework
Erreur:
import UIKit
import myFramework
Selon le documentation Swift :
Importation de cadres externes
Vous pouvez importer des frameworks externes ayant une base de code Objective-C pure, une base de code pure Swift, ou une base de code multilingue. Le processus d'importation d'un framework externe est identique, que le framework soit écrit ou non. Dans une seule langue ou contient des fichiers des deux langues Lorsque vous importez un cadre externe, assurez-vous que le paramètre de construction du module Defines pour le cadre que vous importez est défini sur Oui.
Vous pouvez importer une structure dans n'importe quel fichier Swift d'une cible différente, à l'aide de la syntaxe suivante:
Rapide
import FrameworkName
Vous pouvez importer une structure dans n'importe quel fichier .m Objective-C appartenant à une cible différente en utilisant la syntaxe suivante:
OBJECTIF-C
@import FrameworkName;
J'ai créé myFramework
à l'aide de Xcode 5. Xcode 5 ne dispose pas d'un paramètre de construction "Defines Module".
Où est le problème?
Si je vous comprends bien, vous n’avez pas de cible de construction distincte pour votre framework (vous l’avez déjà construite avec XCode 5) et vous l’avez inclus dans la cible de construction de votre projet.
La partie de la documentation à laquelle vous faites référence concerne les cadres à l'intérieur de différents cibles. Puisque votre cadre est dans la cible du projet, cette partie de la documentation ne s'applique pas ici.
Dans votre cas, vous ne pouvez pas importer le framework dans votre fichier Swift. C'est pourquoi vous obtenez le message d'erreur "Aucun module tel myFramework" . myFramework n'est pas un module - il fait partie du module de votre projet (déterminé par défaut par le nom de votre produit). En tant que telles, les classes de votre framework doivent être accessibles.
Cependant, votre cadre est écrit en Objective-C. Vous devez donc importer les classes Swift faisant face à votre en-tête de pontage comme décrit ici .
Notez que cela n’a rien à voir avec l’importation Swift d’un module. La directive import du fichier d'en-tête bridging invite simplement le compilateur à "traduire" les fichiers d'en-tête Objective-C en syntaxe Swift et rend l'en-tête public visible à Swift.
Alors, que devriez-vous faire maintenant?
Commencez par importer les fichiers d’en-tête qui vous intéressent dans le bridging-header. Vous devez uniquement importer les en-têtes avec lesquels vous allez interagir dans Swift.
Essayez de compiler votre projet à cette étape. Si XCode ne peut pas trouver les fichiers d’en-tête du cadre, votre problème n’est probablement pas lié à Swift ni à XCode 6, mais à l’inclusion des cadres en général.
J'espère que cela t'aides.
Sur Swift:
Créer un cadre: -
Démarrer Xcode -> Créer un nouveau projet Xcode -> iOS -> Framework & Library -> Cocoa Touch Framework -> Nommer le framework (par exemple sampleCocoaFramework) -> Créer.
Définir la cible -> Général -> Informations de déploiement -> Cible de déploiement.
Ajoutez une classe publique: Fichier -> Nouveau fichier -> iOS -> Swift Fichier -> Nommez-le (par exemple openCocoaClass) -> Créer.
Ajoutez maintenant du code à l'openCocoaClass.Swift.
import Foundation
public class openCocoaClass {
public init() {
}
public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
public func samplePublicFunction()
{
print("samplePublicFunction @ openCocoaClass")
}
}
Nettoyer le projet: Produit -> Nettoyer
Configurez les paramètres du schéma: Produit -> Schéma -> Éditer le schéma -> Exécuter -> Configurer la construction -> Valider.
Construisez le framework: Produit -> Build.
Ajout d'un cadre au projet: -
Démarrez un projet Xcode et nommez-le (ex. CocoaFrameworkTest).
Glissez-déposez sampleCocoaFramework.framework dans le dossier de projet de CocoaFrameworkTest.
Cible -> Général -> Binaires incorporés -> Ajouter autre -> Sélectionnez Framework -> Copier les éléments si nécessaire -> Terminé.
Accès à Framework sur ViewController: -
import UIKit
import sampleCocoaFramework
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let frameworkObject = openCocoaClass.init()
frameworkObject.samplePublicFunction()
print(frameworkObject.samplePublicVariable)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Selon le documentation Swift
Pour importer du code Objective-C dans Swift à partir de la même cible
Dans votre fichier d'en-tête de pontage Objective-C, importez chaque en-tête Objective-C que vous souhaitez exposer à Swift. Par exemple:
#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"
Sous Paramètres de construction, assurez-vous que le paramètre de construction Objective-C Bridging Header sous Swift Compiler - Génération de code a un chemin vers l'en-tête. Ce chemin doit être directement au fichier lui-même, pas au répertoire Le chemin doit être relatif à votre projet, de la même manière que votre chemin Info.plist est spécifié dans les paramètres de construction, ce qui vous évite généralement de devoir modifier ce paramètre.
Tous les en-têtes publics Objective-C répertoriés dans ce fichier d'en-tête de pontage seront visibles pour Swift. La fonctionnalité Objective-C sera disponible automatiquement dans tout fichier Swift= de cette cible, sans instruction d'importation. Utilisez votre code personnalisé Objective-C avec le même Swift = syntaxe que vous utilisez avec les classes système.
let myCell = XYZCustomCell() myCell.subtitle = "A custom cell"
Assurez-vous également que le paramètre de génération "Defines Module" sous "Packaging" est défini sur "Yes".
vous avez besoin dans votre projet Objective C d'un en-tête public portant le même nom que votre application, dans le cas où vous avez FrameworkName.h et ajoutez toutes les classes que vous souhaitez exposer (ces classes doivent être ajoutées en tant qu'en-tête public dans les propriétés du projet). Pour ce faire, vous ajoutez la structure et la référence à votre en-tête public import FrameworkName.
Le dernier XCode offre la possibilité d’intégrer la structure à d’autres projets. Ce lien ( https://stackoverflow.com/a/37328591/1084174 ) a bien fonctionné pour moi.
Vous pouvez importer un cadre objC externe dans le projet Swift en utilisant la syntaxe ci-dessous:
#import "objCExternalFramework-name/headerfilename.h"
Ok, c'est Xcode 7.2 maintenant. Et ce que j’ai observé est, Swift) l’importation est sensible à la casse. Exemple - import uikit
ne fonctionnera pas. Vous devrez le taper comme import UIKit
.
juste mes deux cents.