Hoe kan ik Cocoapods integreren met een Swift-project?

Toen Apple Swiftintroduceerde, hun nieuwe programmeertaal , vraag ik me af hoe je het kunt integreren met bestaande Objective-C-bibliotheken die beschikbaar zijn via CocoaPods?


Antwoord 1, autoriteit 100%

Cocoapods 0.36 en hogerintroduceert de instructie use_frameworks!, wat inhoudt dat de overbruggingsheader niet vereist is voor het importeren van Objective-C-pods in Swift.

Hieronder vindt u een volledig voorbeeld met behulp van MBProgressHUDen Alamofire:

1. Podbestand

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. Verwijdering

Verwijder de #imports uit je overbruggingsheader of verwijder zelfs het overbruggingskoptekstbestand als je het niet nodig hebt. Als u voor de laatste mogelijkheid kiest, vergeet dan niet om het pad (naar dit verwijderde overbruggingsheaderbestand) in uw Xcode-projectconfiguratie te verwijderen.

3. Importeren toevoegen

Voeg import MBProgressHUDen/of import Alamofiretoe bovenaan alle Swift-bestanden die deze klasse(n) nodig hebben.

4. Corrigeer de opsommingen indien nodig

Je gebruikt nu bonafide frameworks, dus je opsommingen zijn in de vlucht geslagen! Je hebt misschien een Swift-regel die in orde was met de overbruggingskop, zoals deze:

progressHUD.mode = MBProgressHUDModeIndeterminate

Dat moet nu dit worden:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Niet erg, maar de stapel fouten kan je op een dwaalspoor brengen dat je een groter probleem hebt dan wanneer je veel Objective-C-enums gebruikt.

(Bron van dit antwoord)

Ter informatie: ik vermoed (u zult het zelf moeten testen om zeker te zijn) dat de use_frameworks! instructie in uw Podfile is alleen compatibel met Xcode-projecten die gericht zijn op iOS >= 8.


Antwoord 2, autoriteit 94%

Het lijkt erop dat het proces vergelijkbaar is met het proces dat wordt beschreven in Mix and Matchsectie van Swift gebruiken met Cocoa en Objective-Cdocumentatie.

  1. Maak je podbestand en voer pod installuit.
  2. Maak een nieuw Objective-C header-bestand, Example-Bridging-Header.h, en voeg het toe aan het project.
  3. Voeg een importstatement toe aan de bridge-header.
  4. Stel Objective-C Bridging Headerin voor uw doel:

voer hier de afbeeldingsbeschrijving in

Nu kunt u uw bibliotheek, in dat geval MKUnits, gebruiken in uw Swift-bestand:

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

Meer hier: Cocoapods integreren met een Swift-project


Antwoord 3, autoriteit 21%

UPDATE: CocoaPods 0.36 stabiele versie is uitgebracht. Het ondersteunt officieel Swift.


CocoaPods ondersteunt nu Swift in hun nieuwste 0.36-release. Het is nog in bèta, maar het werkt.

Eerst moet je de CocoaPods bèta (momenteel bèta 2) installeren door deze in je Terminal uit te voeren.

sudo gem install cocoapods --pre

Dat is het zo’n beetje. U kunt Swift-bibliotheken toevoegen zoals u normaal zou doen.

Maar er is een addertje onder het gras als je een bibliotheek die is geschreven in Objective-C wilt toevoegen aan een Swift-project via CocoaPods. Je moet de regel use_frameworks!toevoegen aan je Podfile. Hier is een voorbeeld.

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

Ik heb hierover ook een blogberichtgeschreven.


Antwoord 4, autoriteit 3%

Als je een bestand niet gevonden-fout krijgt in je bridging-header.h, wil je er misschien voor zorgen dat je Pods-bibliotheek wordt gekoppeld in je bouwschema.

Het gedeelte over het oplossen van problemen met CocoaPods beschrijft hoe u dit kunt doen onder item #4 hier


Antwoord 5

Je kunt nu de cacaopods 0.36.0-versie gebruiken door sudo gem install cocoapodsuit te voeren, wat de integratie van snelle frameworks ondersteunt. Als je een framework gebruikt dat door swift is geschreven, moet je dit expliciet in Podfile gebruiken:

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

Antwoord 6

In mijn geval ontdekte ik dat ik geen pods aan het hoofddoel toevoegde, maar alleen aan Test- en TestUI-doelen in Podfile, zoals hier uitgelegd .

Other episodes