Come integrare Cocoapods con un progetto Swift?


84

Quando Apple ha introdotto Swift , il loro nuovo linguaggio di programmazione, mi chiedo come puoi integrarlo con le librerie Objective-C esistenti disponibili tramite CocoaPods ?


Puoi anche leggere il mio recente articolo su come configurare CocoaPods con il tuo progetto Swift.
Hemang,

Risposte:


78

Cocoapods 0.36 e versioni successive introduce l' use_frameworks!istruzione che implica che l'intestazione di bridging non è richiesta per l'importazione di pod Objective-C in Swift.

Di seguito è riportato un esempio completo utilizzando MBProgressHUD e 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. Cancellazione

Rimuovi #imports dall'intestazione del bridging o elimina il file dell'intestazione del bridging se non ti serve. Se scegli l'ultima possibilità, non dimenticare di eliminare il percorso (a questo file di intestazione del bridging eliminato) nella configurazione del tuo progetto Xcode.

3. Aggiunta di importazioni

Aggiungi import MBProgressHUDe / o import Alamofireall'inizio di ogni file Swift che necessita di queste classi.

4. Correggere le enumerazioni se necessario

Ora stai usando framework in buona fede, quindi i tuoi enum si sono spostati in volo! Potresti avere una riga di Swift che andava bene con l'intestazione di bridging come questa:

progressHUD.mode = MBProgressHUDModeIndeterminate

Questo ora deve diventare questo:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Non è un grosso problema, ma il mucchio di errori potrebbe portarti fuori strada che hai un problema più grande di quello che hai se stai usando molte enumerazioni Objective-C.

( Fonte di questa risposta )

Per tua informazione: immagino (dovrai testare da solo per essere sicuro) che use_frameworks! l'istruzione nel tuo Podfile è compatibile solo con i progetti Xcode destinati a iOS> = 8.


73

Sembra che il processo sia simile a quello descritto nella sezione Mix and Match della documentazione Using Swift with Cocoa and Objective-C .

  1. Crea il tuo Podfile e corri pod install.
  2. Crea un nuovo file di intestazione Objective-C Example-Bridging-Header.he aggiungilo al progetto.
  3. Aggiungi l'istruzione import all'intestazione del bridge .
  4. Impostato Objective-C Bridging Headerper il tuo obiettivo:

inserisci qui la descrizione dell'immagine

Ora puoi usare la tua libreria, in tal caso, MKUnits, nel tuo file Swift:

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

Maggiori informazioni qui: Integrazione di Cocoapods con un progetto Swift


3
Per me l'istruzione import doveva includere la directory del progetto, aka #import <Reachability/Reachability.h>piuttosto che #import "Reachability.h".
Kyle Clegg

Solo un aggiornamento. Swift PODs, ovvero: Swift Libs sarà presto supportato anche da CocoaPods. La prossima versione 0.36 porterà il pieno supporto Swift in CocoaPods. La maggior parte della funzionalità è già completa e puoi provare subito gli Swift Pods usando le istruzioni dal mio post sul blog
Sachin Palewar

2
Cocoapods 0.36 e versioni successive introduce use_frameworks! istruzione che implica che l'intestazione bridging non è più necessaria per importare pod Objective-C in Swift (vedere la mia risposta di seguito).
King-Wizard

5
Oltre a quanto sopra, ho scoperto che dovevo aggiungere "Pod / **" ai miei "Percorsi di ricerca intestazione utente" nelle Impostazioni di compilazione. Ho anche dovuto aggiungere "#import <Foundation / Foundation.h>" al file bridge.
Swifty McSwifterton

1
Grazie Swifty. Ho provato use_frameworks! ma non ha funzionato per me. L'aggiunta di "Pod / **" al percorso di ricerca dell'utente ha funzionato.
user3246173

16

AGGIORNAMENTO : è stata rilasciata la versione stabile 0.36 di CocoaPods. Supporta ufficialmente Swift.


CocoaPods ora supporta Swift nella loro ultima versione 0.36. È ancora in versione beta ma funziona.

Per prima cosa devi installare la beta CocoaPods (attualmente beta 2) eseguendola nel tuo terminale.

sudo gem install cocoapods --pre

Questo è praticamente tutto. Puoi aggiungere librerie Swift come faresti normalmente.

Ma c'è un problema se vuoi aggiungere una libreria scritta in Objective-C a un progetto Swift tramite CocoaPods. Devi aggiungere la riga use_frameworks!al tuo Podfile. Ecco un esempio.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Ho scritto anche un post sul blog riguardo a questo.


3
use_frameworks!è solo per iOS> = 8 giusto? Se è così dovresti scrivere questo nella tua risposta.
confile

2

Se ricevi un errore di file non trovato nel tuo bridging-header.h, potresti voler assicurarti che la tua libreria Pods sia collegata al tuo schema di compilazione.

La sezione per la risoluzione dei problemi di CocoaPods descrive come eseguire questa operazione al punto 4 qui


1

Ora puoi usare la versione 0.36.0 di cocoapods eseguendo sudo gem install cocoapodsche supporta l'integrazione di framework swift. Quando usi un framework scritto da swift, dovresti usarlo esplicitamente in Podfile:

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

0

Nel mio caso, ho scoperto che non stavo aggiungendo pod al target principale ma solo ai target Test e TestUI in Podfile come spiegato qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.