it-swarm.com.de

Wie kann ich Cocoapods in ein Swift Projekt einbinden?

Als Apple eingeführt Swift , ihre neue Programmiersprache, frage ich mich, wie Sie sie in vorhandene Objective-C-Bibliotheken integrieren können, die über CocoaPods verfügbar sind =?

84
Michal K.

Es scheint, dass der Prozess dem in Mix and Match Abschnitt von sing Swift with Cocoa and Objective-C Dokumentation beschriebenen ähnlich ist.

  1. Erstelle dein Podfile und starte pod install.
  2. Erstellen Sie eine neue Objective-C-Headerdatei, Example-Bridging-Header.h, und fügen Sie es dem Projekt hinzu.
  3. Fügen Sie die import-Anweisung zum Brückenkopf hinzu .
  4. Einstellen Objective-C Bridging Header für dein Ziel:

enter image description here

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: Cocoapods in ein Swift project integrieren

72
Michal K.

Cocoapods 0.36 und höher führt das use_frameworks!-Anweisung, die impliziert, dass der Überbrückungsheader nicht zum Importieren von Objective-C-Pods in Swift erforderlich ist.

Nachfolgend finden Sie ein vollständiges Beispiel mit 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 die Bridging-Header-Datei, wenn Sie sie nicht benötigen. Wenn Sie die letztere Möglichkeit wählen, vergessen Sie nicht, den Pfad (zu dieser gelöschten Bridging-Header-Datei) in Ihrer Xcode-Projektkonfiguration zu löschen.

3. Importe hinzufügen

Hinzufügen import MBProgressHUD und/oder import Alamofire am Anfang jeder Swift Dateien, die diese Klasse (n) benötigen.

4. Korrigieren Sie gegebenenfalls die Aufzählungen

Sie verwenden jetzt vertrauenswürdige Frameworks, sodass sich Ihre Aufzählungen im Flug verschoben haben! Sie könnten eine Zeile von Swift haben, die mit dem Überbrückungsheader in Ordnung war:

progressHUD.mode = MBProgressHUDModeIndeterminate

Das muss jetzt so werden:

progressHUD.mode = MBProgressHUDMode.Indeterminate

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

( Quelle dieser Antwort )

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

78
King-Wizard

[~ # ~] Update [~ # ~] : Die stabile Version von CocoaPods 0.36 wurde veröffentlicht. Es unterstützt offiziell Swift.


CocoaPods unterstützt jetzt Swift in der 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 hinzufügen, wie Sie es normalerweise tun würden.

Aber es gibt einen Haken, wenn Sie eine in Objective-C geschriebene Bibliothek über CocoaPods zu einem Swift) - Projekt hinzufügen möchten. Sie müssen Ihrem Podfile die Zeile use_frameworks! Hinzufügen Beispiel.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Ich habe auch einen Blog-Beitrag geschrieben.

16
Isuru

Wenn in Ihrer Datei bridging-header.h ein Fehler auftritt, der nicht gefunden wurde, möchten Sie möglicherweise sicherstellen, dass Ihre Pods-Bibliothek in Ihrem Build-Schema verknüpft ist.

Der Abschnitt zur Fehlerbehebung in CocoaPods beschreibt dies unter Punkt 4 hier

2
Michelle

Jetzt können Sie die Version 0.36.0 von cocoapods verwenden, indem Sie Sudo gem install cocoapods, das die Integration von Swift 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'
1
Allen

In meinem Fall stellte ich fest, dass ich keine Pods zum Hauptziel hinzufügte, sondern nur zu Test- und TestUI-Zielen in Podfile, wie erklärt hier .

0
zeeawan