webentwicklung-frage-antwort-db.com.de

Erstellen und importieren Sie das Swift Framework

Ich bin neu in der Swift-Programmierung. Ich muss ein reines Swift-Framework erstellen und in mein vorhandenes reines Swift-Projekt importieren. Wenn ich versuche, das Swift-Framework zu importieren, erhalte ich diesen Fehler Botschaft:

"Could not build Objective-C module '<myModule>'"

Framework File Structure

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

Nach dem Erstellen des Frameworks habe ich meinem bestehenden Projekt ein Framework hinzugefügt und dieses erhalten Project Structure and import problem screen

Was mache ich falsch? Danke für die Hilfe!

@ findall comment answer - Ich habe versucht, alle Framework-Dateien in den Stammordner des Projekts und in den Projektordner aufzunehmen. Die gleiche Fehlermeldung wurde jedoch erneut angezeigt. Add Framework files to project root

Add Framework files inside project folder

16
styopdev

Ich habe mit den folgenden Schritten fertig.

  1. Erstellen Sie ein Rahmenprojekt, zum Beispiel "FooKit". (Cocoa Touch Framework muss ausgewählt werden)
  2. Erstellen Sie eine ".Swift" -Datei und fügen Sie ein öffentliches Symbol hinzu, beispielsweise public func foo().
  3. Erstellen Sie ein Use-Side-Projekt (App). (Ich habe Single View Application gewählt)
  4. Öffnen Sie das Stammverzeichnis von "FooKit" über den Finder, ziehen Sie "FooKit.xcodeproj" dorthin und legen Sie es über Project Navigator in das App-Projekt ab.
  5. Fügen Sie "FooKit" zu Target Dependencies in der Einstellung Build Phases der App hinzu.
  6. Fügen Sie "FooKit.framework" zu Embedded Binaries in der Einstellung General der App hinzu.

Jetzt können Sie diesen Code in der Use-Side-App erstellen.

import FooKit

func bar() {
    foo()
}
19
findall

In Xcode 7.2 mit Swift 2.1 konnte ich den genannten Fehler überwinden, indem ich dafür sorgte, dass die Build-Einstellungen Ihres reinen Swift-Frameworks mit dem Namen Foo wie folgt sind:

1) Build Settings-> Packaging-> Defines Module = Ja

2) Build Settings-> Swift Compiler - Codegenerierung-> Installieren Sie Objective-C Compatibility Header = Yes (Wenn Sie Ihr Swift-Framework nicht in Objective C importieren müssen, setzen Sie diese Einstellung auf No ).

3) Löschen Sie den String-Wert von Build-Einstellungen-> Swift-Compiler - Codegenerierung-> Objective-C-Bridging-Header

4) Build-Einstellungen-> Swift-Compiler - Codegenerierung-> Generierte Schnittstellenkopfzeile für Objective-C = Foo-Swift.h (wenn Sie Ihr Swift-Framework nicht in Objective C importieren müssen, löschen Sie diese Einstellung genauso wie Sie es getan haben in Schritt 3))

5) Stellen Sie sicher, dass Build Settings-> Packaging-> Product Name = Foo

6) Fügen Sie der public Umbrella-Kopfzeile Ihres Frameworks (Foo.h), die Sie zum Importieren Ihres Swift-Codes in Objective C verwenden können, folgende Zeile hinzu:

#import "Foo-Swift.h"

(Wenn Sie jedoch Ihren Swift-Code nicht in Objective C importieren müssen, überspringen Sie diesen Schritt.)

6) Fügen Sie der Swift-Datei, in der Sie das Modul Foo verwenden möchten, folgende Zeile hinzu:

import Foo

Wichtige Notizen:

1) Stellen Sie sicher, dass die Kopfzeile "Foo.h" im Dateiinspektor auf "public" gesetzt ist. Andernfalls funktioniert dies nicht.

2) Wenn Sie Ihr reines Swift-Framework in Objective C-Dateien verwenden, stellen Sie Folgendes sicher:

  • der Header Foo-Swift.h hat die richtige Schnittstelle generiert, indem Sie zu Foo.h gehen und dann auf das obere linke Eckmenü des Xcode-Code-Editors klicken und dann Include-> Foo-Swift.h wählen (ich musste das Foo neu erstellen einige Male ein Framework, bis Xcode die Änderung einholte und dann die richtige Schnittstelle in Objective C generierte, so dass Sie dies möglicherweise auch tun müssen)

  • ihre Swift-Klassen erben von NSObject oder sind für Objective C-Code nicht verfügbar

3
jvarela

Zusätzlich zu @ jvarelas Antwort in Xcode 9 und Swift 4,

Um das Swift-Framework in ein Objective-C-Projekt zu importieren, müssen Sie Folgendes hinzufügen 

@objc

markieren Sie alle Klassen, Methoden und Variablen, die Sie in das Objective C-Projekt exportieren möchten.

Zum Beispiel,

@objc public class Foo: NSObject {

    @objc public var fooDescription: String

    @objc public func foo(){

    }

}
2
yvzzztrk

Auf Swift:

Framework erstellen: -

  1. Starten Sie Xcode -> Erstellen Sie ein neues Xcode-Projekt -> iOS -> Framework & Library -> Cocoa Touch Framework -> Benennen Sie das Framework (zB sampleCocoaFramework) -> Create.

  2. Legen Sie Taget -> Allgemein -> Bereitstellungsinformationen -> Bereitstellungsziel fest.

  3. Fügen Sie eine öffentliche Klasse hinzu: Datei -> Neue Datei -> iOS -> Schnelle Datei -> Benennen Sie sie (z. B. openCocoaClass) -> Erstellen.

  4. Fügen Sie nun etwas Code in die openCocoaClass.Swift ein.

    import Foundation
    
    public class openCocoaClass {
    
        public init() {
    
        }
    
        public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
    
        public func samplePublicFunction()
        {
            print("samplePublicFunction @ openCocoaClass")
        }          
    

    }

  5. Reinigen Sie das Projekt: Produkt -> Reinigen

  6. Konfigurieren Sie die Schemaeinstellungen: Produkt -> Schema -> Schema bearbeiten -> Ausführen -> Build-Konfiguration -> Release.

  7. Bauen Sie den Rahmen auf: Product -> Build.

  8. Exportieren Sie das Framework: Produkte -> Wählen Sie das Framework aus -> Identität und Typ -> Vollständiger Pfad -> Freigegebenes Framework.

Framework zu Project hinzufügen: -

  1. Starten Sie ein Xcode-Projekt und benennen Sie es (z. B. CocoaFrameworkTest).

  2. Ziehen Sie das sampleCocoaFramework.framework per Drag & Drop in den Projektordner des CocoaFrameworkTest.

  3. Ziel -> Allgemein -> Binärdateien einbetten -> Andere hinzufügen -> Framework auswählen -> Elemente ggf. kopieren -> Fertig.

Zugriff auf Framework auf 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()
    }
}
1
A.G