Wie kann man Cocoapods in ein Swift-Projekt integrieren?


84

Als Apple die neue Programmiersprache Swift einführte , frage ich mich, wie Sie sie in vorhandene Objective-C-Bibliotheken integrieren können, die über CocoaPods verfügbar sind .


Sie können auch meinen letzten Artikel darüber lesen, wie Sie CocoaPods mit Ihrem Swift-Projekt einrichten.
Hemang

Antworten:


78

Cocoapods 0.36 und höher führen die use_frameworks!Anweisung ein, die impliziert, dass der Bridging-Header für den Import von Objective-C-Pods in Swift nicht erforderlich ist.

Nachfolgend finden Sie ein vollständiges Beispiel für die Verwendung von MBProgressHUD und Alamofire :

1. Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod

2. Löschen

Entfernen Sie die #imports aus Ihrem Bridging-Header oder löschen Sie sogar die Bridging-Header-Datei, wenn Sie sie nicht benötigen. Wenn Sie sich für die letztere Möglichkeit entscheiden, vergessen Sie nicht, den Pfad (zu dieser gelöschten Bridging-Header-Datei) in Ihrer Xcode-Projektkonfiguration zu löschen.

3. Importe hinzufügen

Fügen Sie import MBProgressHUDund / oder import Alamofireoben in jeder Swift-Datei hinzu, die diese Klasse (n) benötigt.

4. Korrigieren Sie ggf. die Aufzählungen

Sie verwenden jetzt echte Frameworks, sodass sich Ihre Aufzählungen im Flug bewegt haben! Möglicherweise haben Sie eine Zeile von Swift, die mit dem Bridging-Header wie folgt in Ordnung war:

progressHUD.mode = MBProgressHUDModeIndeterminate

Das muss jetzt so werden:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Keine allzu große Sache, aber der Haufen von Fehlern könnte Sie in die Irre führen, dass Sie ein größeres Problem haben als Sie, wenn Sie viele Objective-C-Enums verwenden.

( Quelle dieser Antwort )

Zu Ihrer Information: Ich denke (Sie müssen selbst testen, um sicherzugehen), dass die use_frameworks! Anweisungen in Ihrem Podfile sind nur mit Xcode-Projekten kompatibel, die auf iOS> = 8 abzielen.


73

Es scheint, dass der Prozess dem im Abschnitt „ Mix and Match “ unter Verwenden von Swift mit Kakao und Objective-C beschriebenen ähnlich ist .

  1. Erstellen Sie Ihr Podfile und führen Sie es aus pod install.
  2. Erstellen Sie eine neue Objective-C-Headerdatei Example-Bridging-Header.hund fügen Sie sie dem Projekt hinzu.
  3. Fügen Sie dem Bridge-Header eine import-Anweisung hinzu .
  4. Stellen Sie Objective-C Bridging Headerfür Ihr Ziel ein:

Geben Sie hier die Bildbeschreibung ein

Jetzt können Sie Ihre Bibliothek, in diesem Fall MKUnits, in Ihrer Swift-Datei verwenden:

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

Mehr hier: Integration von Cocoapods in ein Swift-Projekt


3
Für mich musste die import-Anweisung das Projektverzeichnis enthalten, auch bekannt #import <Reachability/Reachability.h>als #import "Reachability.h".
Kyle Clegg

Nur ein Update. Swift PODs, dh: Swift Libs werden in Kürze auch von CocoaPods unterstützt. Die nächste Version 0.36 bietet die volle Swift-Unterstützung für CocoaPods. Der größte Teil der Funktion ist bereits abgeschlossen und Sie können die Swift Pods jetzt anhand der Anweisungen aus meinem Blog-Beitrag
Sachin Palewar

2
Cocoapods 0.36 und höher führen die use_frameworks ein! Anweisung, die impliziert, dass der Bridging-Header für den Import von Objective-C-Pods in Swift nicht mehr benötigt wird (siehe meine Antwort unten).
König-Zauberer

5
Darüber hinaus stellte ich fest, dass ich "Pods / **" zu meinen "User Header Search Paths" in den Build-Einstellungen hinzufügen musste. Ich musste auch "#import <Foundation / Foundation.h>" zur Bridge-Datei hinzufügen.
Swifty McSwifterton

1
Vielen Dank, Swifty. Ich habe use_frameworks ausprobiert! aber es hat bei mir nicht funktioniert. Das Hinzufügen von "Pods / **" zum Benutzersuchpfad hat funktioniert.
user3246173

16

UPDATE : Die stabile Version von CocoaPods 0.36 wurde veröffentlicht. Es unterstützt offiziell Swift.


CocoaPods unterstützt Swift jetzt in ihrer neuesten Version 0.36. Es ist noch in der Beta, aber es funktioniert.

Zuerst müssen Sie die CocoaPods Beta (derzeit Beta 2) installieren, indem Sie diese in Ihrem Terminal ausführen.

sudo gem install cocoapods --pre

Das wars so ziemlich. Sie können Swift-Bibliotheken wie gewohnt hinzufügen.

Es gibt jedoch einen Haken, wenn Sie einem Swift-Projekt über CocoaPods eine in Objective-C geschriebene Bibliothek hinzufügen möchten. Sie müssen die Zeile use_frameworks!zu Ihrem Podfile hinzufügen. Hier ist ein Beispiel.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Ich habe auch dazu einen Blog-Beitrag geschrieben .


3
use_frameworks!ist nur für iOS> = 8 richtig? Wenn ja, sollten Sie dies in Ihre Antwort schreiben.
Confile

2

Wenn in Ihrem Bridging-Header.h ein Fehler "Datei nicht gefunden" angezeigt wird, möchten Sie möglicherweise sicherstellen, dass Ihre Pods-Bibliothek in Ihrem Build-Schema verknüpft ist.

Im Abschnitt zur Fehlerbehebung für CocoaPods wird hier unter Punkt 4 beschrieben, wie dies durchgeführt wird


1

Jetzt können Sie die Version cocoapods 0.36.0 verwenden, indem Sie ausführen, sudo gem install cocoapodsdie die Integration schneller Frameworks unterstützt. Wenn Sie ein von swift geschriebenes Framework verwenden, sollten Sie es explizit in Podfile verwenden:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0

In meinem Fall stellte ich fest, dass ich dem Hauptziel keine Pods hinzufügte, sondern nur Test- und TestUI-Ziele in Podfile, wie hier erläutert .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.