Verwendung von Objective-C CocoaPods in einem Swift-Projekt

83

Gibt es eine Möglichkeit, einen in Objective-C geschriebenen CocoaPod in meinem Swift-Projekt mit swift zu verwenden?

Mache ich nur einen Bridging-Header? Und wenn ja, kann ich auf die Objekte, Klassen und Felder zugreifen, die von den Bibliotheken im CocoaPod in Swift definiert wurden?

Shaydawg
quelle

Antworten:

169

Die grundlegende Antwort auf Ihre Frage lautet Ja. Sie können Objective-C-Code verwenden, der mit CocoaPods erstellt wurde.

Eine wichtigere Frage ist "Wie benutzt man solche Bibliotheken?"
Die Antwort auf diese Frage hängt von der use_frameworks!Flagge in Ihrem ab Podfile:
Stellen Sie sich vor, Sie möchten den Objective-C-Pod mit Namen verwenden CoolObjectiveCLib.

Wenn Ihre Pod-Datei das use_frameworks!Flag verwendet:

// Podfile
use_frameworks!
pod 'CoolObjectiveCLib'

Dann müssen Sie keine Bridge-Header-Dateien hinzufügen.
Alles, was Sie brauchen, ist ein Import-Framework in die Swift-Quelldatei:

// MyClass.swift
import CoolObjectiveCLib

Jetzt können Sie alle Klassen verwenden, die in lib dargestellt werden.

Wenn Ihre Pod-Datei kein use_frameworks!Flag verwendet:

// Podfile
pod 'CoolObjectiveCLib'

Dann müssen Sie eine Bridging-Header-Datei erstellen und dort alle erforderlichen Objective-C-Header importieren:

// MyApp-Bridging-Header
#import "CoolObjectiveCLib.h"

Jetzt können Sie alle Klassen verwenden, die in importierten Headern definiert sind.

Vlad Papko
quelle
Wie greife ich über Pod-M-Dateien auf schnelle Klassen zu (falls ich diese Pods anpassen möchte)?
JAHelia
1
Ich hatte use_frameworks in der Poddatei meines schnellen Projekts nicht kommentiert und wollte den Toast-Pod verwenden, der eigentlich eine Ziel-C-Kategorie ist. Durch einfaches Schreiben von import UIView + Toast gab es einen Kompilierungsfehler: Aufeinanderfolgende Anweisungen in einer Zeile müssen durch ';' getrennt werden.
Chanchal Raj
@ChanchalRaj ist der UIView+ToastName für Ihren Pod? Wenn nicht, versuchen Sie, ein Import-Framework zu verwenden, dessen Name mit Ihrem Pod-Namen übereinstimmt.
Vlad Papko
1
Ich habe den gleichen Code verwendet, um den objc-Code für die schnelle Datei zu verwenden, aber es gibt mir den Fehler, dass kein solches Modul "POD NAME" vorhanden ist. Muss ich ein anderes Flag setzen
Prashant Tukadiya
4
Wenn Sie Probleme mit use_frameworks haben! Dies kann daran liegen, dass die Importanweisungen nicht im richtigen Format geschrieben sind. Wenn die podFile zB enthält pod 'iOS-Echarts', werden die Importe wie folgt ausgeführt: Swift-Datei : import iOS_Echarts Objective-C-Datei :#import <iOS_Echarts/iOS-Echarts.h>
Kushal Ashok
2

Verwenden Sie in podFile die Flagge use_frameworks! Innerhalb von Xcode in der PodOrdnerstruktur in der Abhängigkeit fügen Sie xxxxxxx-umbrella.hSupport-Dateien hinzu.

Bei Ihrer {PROJECT_NAME}-Bridging-Header.hVerwendung:

#import "xxxxxxx/xxxxxxx-umbrella.h"

Für mich geht das.

RodolfoNeto
quelle
0

Sie brauchen nur einen Bridging-Header und importieren dort, was Sie brauchen.

Lucian Boboc
quelle
0

UND vergessen Sie nicht, den Dateinamen Bridging Header zu Target -> Build Settings -> Objective-C Bridging Header hinzuzufügen

o0sea0o
quelle