Je suis nouveau dans la programmation Swift. Je dois créer un cadre Swift pur et l'importer dans mon projet Swift pur existant. Lorsque j'essaie d'importer un cadre Swift, le message d'erreur suivant s'affiche: message:
"Could not build Objective-C module '<myModule>'"
Test.h
import Foundation
public class Test {
class func printTest() {
println("111");
}
}
Asdf.h
import UIKit
public class Asdf: Test {
class func echo() {
println(888);
}
}
myModule-Swift.h
#ifndef <myModule>_<myModule>_Swift_h
#define <myModule>_<myModule>_Swift_h
#endif
Après la construction du framework, j’ai ajouté le framework à mon projet existant et récupère ce
Qu'est-ce que je fais mal? Merci pour l'aide!
@findall comment answer - J'ai essayé d'ajouter tous les fichiers de structure au dossier racine de mon projet et à l'intérieur du dossier du projet, mais j'ai à nouveau eu la même erreur
Je l'ai fait avec les étapes suivantes.
Cocoa Touch Framework
à sélectionner)public func foo()
.Single View Application
)Project Navigator
.Target Dependencies
dans le paramètre Build Phases
de l'application.Embedded Binaries
dans les paramètres General
de l'application.Maintenant, vous pouvez construire comme ce code dans l'application utilisateur.
import FooKit
func bar() {
foo()
}
Dans Xcode 7.2 avec Swift 2.1, j’ai réussi à dépasser l’erreur mentionnée en veillant à ce que les paramètres de construction de votre infrastructure Swift pure, appelée Foo, soient les suivants:
1) Paramètres de construction-> Conditionnement-> Module défini = Oui
2) Paramètres de construction-> Compilateur Swift - Génération de code-> Installer l'en-tête de compatibilité Objective-C = Oui (si vous n'avez pas besoin d'importer votre infrastructure Swift dans Objective C, définissez ce paramètre sur Non )
3) Effacez la valeur de chaîne de Build Settings-> Swift Compiler - Génération de code-> Objective-C Bridging Header
4) Build Settings-> Swift Compiler - Génération du code-> Nom d'en-tête d'interface généré par Objective-C = Foo-Swift.h (si vous n'avez pas besoin d'importer votre infrastructure Swift dans Objective C, effacez ce paramètre comme vous l'avez fait auparavant. à l'étape 3))
5) Assurez-vous que Build Settings-> Packaging-> Product Name = Foo
6) Ajoutez à l'en-tête public umbrella de votre framework (Foo.h), que vous pouvez utiliser pour importer votre code Swift dans Objective C, la ligne suivante:
#import "Foo-Swift.h"
(mais si vous n'avez pas besoin d'importer votre code Swift dans Objective C, ignorez cette étape)
6) Ajoutez la ligne suivante au fichier Swift où vous souhaitez utiliser le module Foo:
import Foo
Notes IMPORTANTES:
1) Assurez-vous que votre en-tête parapluie Foo.h est défini sur public dans l'inspecteur de fichier, sinon cela ne fonctionnera pas.
2) Si vous utilisez votre infrastructure Swift pure dans des fichiers Objective C, assurez-vous que:
l'en-tête Foo-Swift.h a généré l'interface correcte en accédant à Foo.h, en cliquant sur le menu en haut à gauche de l'éditeur de code Xcode, puis en choisissant Includes-> Foo-Swift.h (j'ai dû reconstruire le Foo plusieurs fois jusqu'à ce que Xcode prenne en compte le changement, puis génère l'interface correcte dans Objective C, vous devrez peut-être le faire également)
vos classes Swift héritent de NSObject ou ne seront pas disponibles pour le code Objective C
De plus, pour la réponse de @ jvarela, dans Xcode 9 et Swift 4,
Pour importer la structure Swift dans un projet Objective C, vous devez ajouter
@objc
marquez toutes vos classes, méthodes et variables que vous souhaitez exporter dans un projet Objective C.
Par exemple,
@objc public class Foo: NSObject {
@objc public var fooDescription: String
@objc public func foo(){
}
}
Sur Swift:
Créer un cadre: -
Démarrez Xcode -> Créer un nouveau projet Xcode -> iOS -> Framework & Library -> Cocoa Touch Framework -> Nommez le framework (par exemple sampleCocoaFramework) -> Create.
Définir Taget -> Général -> Informations de déploiement -> Cible de déploiement.
Ajoutez une classe publique: Fichier -> Nouveau fichier -> iOS -> Fichier Swift -> Nommez-le (ex. 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 -> Modifier 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 un cadre -> 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()
}
}