Maybaygiare.org

Blog Network

CocoaPods Tutorial per Swift: Guida introduttiva

Aggiornamento nota: Rony Rozen aggiornato questo tutorial per Xcode 11 e Swift 5. Joshua Greene ha scritto l’originale.

CocoaPods è un popolare gestore di dipendenze per i progetti Swift e Objective-C Cocoa. Migliaia di librerie e milioni di applicazioni lo utilizzano, secondo il sito CocoaPods. Ma cos’è un gestore di dipendenze e perché ne hai bisogno?

Un gestore di dipendenze semplifica l’aggiunta, la rimozione, l’aggiornamento e la gestione delle dipendenze di terze parti utilizzate dall’app.

Ad esempio, invece di reinventare la propria libreria di rete, si può facilmente tirare in Alamofire utilizzando un gestore di dipendenze. È possibile specificare la versione esatta da utilizzare o un intervallo di versioni accettabili.

Ciò significa che anche se Alamofire riceve un aggiornamento con modifiche non retrocompatibili, la tua app può continuare a utilizzare la versione precedente fino a quando non sei pronto per aggiornarla.

In questo tutorial, imparerai come usare CocoaPods con Swift. In particolare, potrai:

  • Installare CocoaPods.
  • Lavora con un’app demo funzionale che ti fa pensare al gelato.
  • Utilizzare CocoaPods per aggiungere rete.
  • Scopri il controllo delle versioni semantiche.
  • Aggiungi un’altra libreria usando una versione flessibile.
Nota: Questo tutorial CocoaPods richiede familiarità di base con iOS e lo sviluppo Swift. Se sei completamente nuovo per iOS e / o Swift, quindi si prega di controllare alcuni degli altri scritti e / o video tutorial su questo sito prima di fare questo tutorial. Oppure, tuffati nel nostro libro, iOS Apprentice.

Questo tutorial include anche classi che utilizzano Core Graphics. Mentre la conoscenza della grafica di base è utile, non è richiesto. Se vuoi saperne di più, leggi la nostra moderna grafica di base con la serie Swift.

Guida introduttiva

Scarica il progetto starter facendo clic sul pulsante Scarica materiali nella parte superiore o inferiore del tutorial.

Durante questo tutorial, lavorerai con un’app chiamata Ice Cream Shop, Inc. Userai CocoaPods per aggiungere dipendenze all’app nel modo più semplice, invece di scrivere il tuo.

Prima di poter procedere con questo tutorial, è necessario installare CocoaPods. Fortunatamente, CocoaPods utilizza Ruby, che viene fornito con tutte le versioni di macOS X dalla versione 10.7.

Apri Terminale e inserisci il seguente comando:

sudo gem install cocoapods

Inserisci la tua password quando richiesto. L’uscita del terminale mostrerà varie uscite di recupero, installazione e documentazione, concludendo con “XX gems installed”.

Nota: È necessario utilizzaresudo per installare CocoaPods, ma una volta installato, non sarà necessario utilizzarlo di nuovo in questo tutorial.

Infine, immettere questo comando nel Terminale per completare la configurazione:

pod setup --verbose

Questo processo richiede alcuni minuti perché clona il repository delle specifiche master CocoaPods in~/.cocoapods / sul tuo computer.

L’opzione verbose registra i progressi durante l’esecuzione del processo, consentendo di guardare il processo invece di vedere una schermata apparentemente “congelata”.

Impressionante, si sta ora impostato per utilizzare CocoaPods!

Gelateria, Inc.

Il tuo miglior cliente è Ice Cream Shop, Inc. Il loro gelato è così popolare che non possono tenere il passo con gli ordini dei clienti al bancone. Ti hanno reclutato per creare un’elegante app iOS che consente ai clienti di ordinare il gelato direttamente dai loro iPhone.

Hai iniziato a sviluppare l’app e sta arrivando bene. Dai un’occhiata ai tuoi progressi aprendo IceCreamShop.xcodeproj, quindi costruire e correre. Vedrai un delizioso cono gelato alla vaniglia:

Ice Cream Shop, Inc.pagina iniziale's start page

L’utente dovrebbe essere in grado di scegliere un sapore di gelato da questa schermata, ma non è ancora possibile. Il primo passo è completare l’implementazione di questa funzionalità.

Apri Principale.storyboard dal gruppo Views / Storyboard & Pennini per vedere il layout dell’app. Ecco una rapida panoramica del cuore dell’app, la scena Scegli il tuo sapore:

Componenti della scena Scegli il tuo sapore

  • PickFlavorViewController è il controller di visualizzazione per questa scena. Gestisce l’interazione dell’utente e fornisce i dati per la vista di raccolta che visualizza i diversi gusti di gelato.
  • IceCreamViewè una vista personalizzata che visualizza un cono gelato in base alla modalità di supporto,Flavor.
  • ScoopCell è una cella di visualizzazione raccolta personalizzata che contiene un ScoopView, che ottiene i colori da un Flavor modello.

Mentre ogni gelateria, Inc. location ha sapori firma in comune, ognuno porta i propri sapori locali, anche. Per questo motivo, un servizio web deve fornire i dati per Flavor s.

Tuttavia, questo non spiega ancora perché gli utenti non possono selezionare i loro gusti di gelato.

Apri PickFlavorViewController.swift, trovato sotto il gruppo Controllers, e vedrai un metodo stubbed:

private func loadFlavors() { // TO-DO: Implement this}

Aha, non ci sono sapori! È necessario implementare la funzione!

Mentre potresti usare URLSession e scrivere le tue classi di rete, c’è un modo più semplice: usa Alamofire!

Potresti essere tentato di scaricare questa libreria e trascinare i file sorgente direttamente nel tuo progetto. Tuttavia, sarebbe farlo nel modo più duro. CocoaPods fornisce una soluzione molto più elegante e agile.

Installare la prima dipendenza

Il primo passo è chiudere Xcode. Si’, hai letto bene.

È ora di creare il Podfile, dove definirai le dipendenze del tuo progetto.

Apri Terminale e vai alla directory che contiene il tuo progetto IceCreamShop usando il comando cd:

cd ~/Path/To/Folder/Containing/IceCreamShop

Quindi, inserisci il seguente comando:

pod init

Questo crea un Podfile per il tuo progetto.

Infine, digita il seguente comando per aprire il Podfile usando Xcode per la modifica:

open -a Xcode Podfile
Nota: non usare TextEdit per modificare il Podfile perché sostituisce le virgolette standard con virgolette tipografiche più accattivanti. Ciò può causare CocoaPods confondersi e generare errori. Invece, usa Xcode o un altro editor di testo di programmazione per modificare il tuo Podfile.

Il podfile predefinito è simile a questo:

# Uncomment the next line to define a global platform for your project# platform :ios, '9.0'target 'IceCreamShop' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for IceCreamShopend

Eliminare il #e lo spazio prima platform, quindi eliminare le altre righe che iniziano con #.

Il tuo Podfile dovrebbe ora assomigliare a questo:

platform :ios, '9.0'target 'IceCreamShop' do use_frameworks!end

Questo dice a CocoaPods che il tuo progetto si rivolge a iOS 9.0 e userà framework invece di librerie statiche. Mentre Swift e CocoaPods supportano entrambi il collegamento statico, non tutte le librerie che includi lo fanno. Uno di loro che userete in questo progetto non lo fa.

Se hai programmato solo in Swift, questo potrebbe sembrare un po ‘ strano. Questo perché il Podfile è effettivamente scritto in Ruby. Non è necessario conoscere Ruby per utilizzare CocoaPods, ma è necessario essere consapevoli del fatto che anche errori di testo minori causeranno errori CocoaPods.

Una parola sulle librerie

Vedrai il termine libreria spesso usato come termine generale che in realtà significa una libreria o un framework. Questo tutorial è colpevole di casualmente mischiare queste parole, anche.

Potresti chiederti le differenze tra una libreria, un framework e un CocoaPod. Va bene se trovi la terminologia un po ‘ confusa!

Un CocoaPod, o pod in breve, è un termine generale per una libreria o un framework che viene aggiunto al progetto utilizzando CocoaPods.

iOS 8 ha introdotto framework dinamici, che consentono di raggruppare codice, immagini e altre risorse insieme. Prima di iOS 8, hai creato CocoaPods come librerie statiche “fat”. “Fat” significa che contenevano diversi set di istruzioni di codice, come i386 per il simulatore, armv7 per i dispositivi, ecc. Tuttavia, Swift non consente alle librerie statiche di contenere risorse come immagini o risorse.

Torna a installare la tua prima dipendenza

È finalmente il momento di aggiungere la tua prima dipendenza usando CocoaPods. Aggiungi quanto segue al tuo Podfile, subito dopo use_frameworks!:

pod 'Alamofire', '4.9.1'

Questo dice a CocoaPods che vuoi includere Alamofire versione 4.9.1 come dipendenza per il tuo progetto.

Salva e chiudi il file podfile.

Ora devi dire a CocoaPods di installare le dipendenze per il tuo progetto.

Immettere il seguente comando nel Terminale, dopo aver verificato di essere ancora nella directory contenente il progetto IceCreamShop e il Podfile:

pod install

Dovresti vedere l’output in questo modo:

Analyzing dependenciesAdding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`Downloading dependenciesInstalling Alamofire (4.9.1)Generating Pods projectIntegrating client project Please close any current Xcode sessions and use `IceCreamShop.xcworkspace` for this project from now on.Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

Apri la cartella del progetto usando Finder e vedrai CocoaPods creare un nuovo IceCreamShop.file xcworkspace e una cartella Pods per memorizzare tutte le dipendenze del progetto.

Nota: D’ora in poi, come menzionato nell’avviso della riga di comando, devi sempre aprire il progetto con .file xcworkspace e non il .xcodeproj. In caso contrario, si incontrano errori di compilazione.

Eccellente! Hai appena aggiunto la tua prima dipendenza usando CocoaPods!

Usando i pod installati

Ora, userai la tua nuova dipendenza, Alamofire.

Se il progetto Xcode è aperto, chiudilo ora e apri IceCreamShop.xcworkspace.

Apri PickFlavorViewController.swift e aggiungi quanto segue appena sotto l’importazione esistente:

import Alamofire

Crea ed esegui. Non vedrai ancora alcun cambiamento, ma ti assicuro che Alamofire è ora disponibile.

Prima compilazione dopo l'integrazione di Alamofire dependency

Successivamente, sostituire loadFlavors() con quanto segue:

 private func loadFlavors() { // 1 Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in // 2 guard let self = self else { return } // 3 guard response.result.isSuccess, let dictionaryArray = response.result.value as? ] else { return } // 4 self.flavors = self.flavorFactory.flavors(from: dictionaryArray) // 5 self.collectionView.reloadData() self.selectFirstFlavor() } }

Ecco il play-by-play di ciò che sta accadendo in questo codice:

  1. Si utilizza Alamofire per creare una richiesta GET e scaricare un plist contenente sapori di gelato.
  2. Per interrompere un ciclo di riferimento forte, si utilizza un riferimento debole a self nel blocco di completamento della risposta. Una volta eseguito il blocco, si ottiene immediatamente un forte riferimento a self in modo da poter impostare le proprietà su di esso in un secondo momento.
  3. Successivamente, si verifica ilresponse.result mostra successo e ilresponse.result.value è un array di dizionari.
  4. Ora, si impostaself.flavors su un array diFlavor oggetti creati daFlavorFactory. Questa è una classe a “collega” ha scritto per voi (siete i benvenuti!), che prende una serie di dizionari e li usa per creare istanze di Flavor.
  5. Infine, si ricarica la vista raccolta e si seleziona il primo sapore.

Crea ed esegui. È ora possibile scegliere un sapore di gelato!

Scegli Flavor

Ora per un gustoso Topping

L’app sembra buona, ma puoi ancora migliorarla.

Hai notato che l’app impiega un secondo per scaricare il file flavors? Se sei su una connessione Internet veloce, potresti non notare il ritardo, ma i tuoi clienti non saranno sempre così fortunati.

Il tuo prossimo passo è mostrare un indicatore di caricamento nella tua app, per aiutare i clienti a capire che sta caricando i dati e non solo girando le sue librerie. MBProgressHUD è un indicatore davvero bello che funzionerà bene qui. E supporta CocoaPods; che coincidenza! :]

Per usare questo pod, devi aggiungerlo al tuo Podfile. Piuttosto che l’apertura del Podfile dalla riga di comando, la si può trovare in Contenitori di destinazione dell’area di lavoro:

Contenitori in area di Lavoro

Aprire Podfile e aggiungere il seguente, subito dopo il Alamofire riga:

pod 'MBProgressHUD', '~> 1.0'

Salvare il file e installare le dipendenze via pod installazione in Terminal, così come avete fatto prima.

Nota qualcosa di diverso questa volta? Sì, hai specificato il numero di versione come ~> 1.0. Ma perché?

CocoaPods raccomanda che tutti i pod utilizzino il controllo delle versioni semantico. Prendetevi un momento per capire di cosa si tratta.

Semantic Versioning

Molte volte, vedrai una versione scritta come questa: 1.0.0. Questi tre numeri sono numeri di versione maggiore, minore e patch.

Ad esempio, per il numero di versione 1.0.0, 1 è il numero principale, il primo 0 è il numero minore e il secondo 0 è il numero di patch.

Esempio di versione semantica

Se il numero maggiore aumenta, indica che la versione contiene modifiche non compatibili con le versioni precedenti. Quando si aggiorna un pod alla versione principale successiva, potrebbe essere necessario correggere gli errori di compilazione o il pod potrebbe comportarsi in modo diverso rispetto a prima.

Se il numero minore aumenta, indica che la versione contiene nuove funzionalità compatibili con le versioni precedenti. Quando si decide di aggiornare, è possibile o meno necessaria la nuova funzionalità, ma non dovrebbe causare errori di compilazione o modificare il comportamento esistente.

Se il numero di patch aumenta, significa che la nuova versione contiene correzioni di bug ma nessuna nuova funzionalità o modifiche al comportamento. In generale, si desidera sempre aggiornare le versioni delle patch il prima possibile per avere l’ultima versione stabile del pod.

Infine, quando si aumenta il numero di ordine più alto-maggiore, poi minore quindi patch-per le regole di cui sopra, è necessario reimpostare tutti i numeri di ordine inferiore a zero.

Ecco un esempio:

Considera un pod che ha un numero di versione corrente di 1.2.3.

Se apporti modifiche non compatibili con le versioni precedenti, non hai nuove funzionalità, ma risolvi i bug esistenti, gli daresti la versione 2.0.0.

Tempo di sfida

Se un pod ha una versione corrente di 2.4.6 e apporti modifiche che correggono bug e aggiungono funzionalità compatibili con le versioni precedenti, quale dovrebbe essere il nuovo numero di versione?

Risposta: 2.5.0
Spiegazione: se si apportano modifiche che includono nuove funzionalità compatibili con le versioni precedenti, si aumenta il numero minore e si azzera la patch.

Se un pod ha una versione corrente di 3.5.8 e si apportano modifiche alle funzionalità esistenti che non sono retrocompatibili, quale dovrebbe essere il nuovo numero di versione?

Risposta: 4.0.0
Spiegazione: Se le modifiche modificano il comportamento esistente e non sono retrocompatibili, è necessario aumentare il numero maggiore e azzerare i numeri minori e patch.

Se un pod ha una versione corrente di 10.20.30 e risolvi solo bug, quale dovrebbe essere il nuovo numero di versione?

Risposta: 10.20.31
Spiegazione: Se risolvi solo bug, aumenti solo il numero di patch.

Detto questo, c’è un’eccezione a queste regole:

Se il numero di versione di un pod è inferiore a 1.0.0, è considerato una versione beta. Gli aumenti di numero minori possono includere modifiche non compatibili con le versioni precedenti.

Quindi torniamo a MBProgressHUB: Usare~> 1.0 significa che dovresti installare l’ultima versione maggiore o uguale a1.0 ma inferiore a2.0.

Questo ti assicura di ottenere le ultime correzioni di bug e funzionalità quando installi questo pod, ma non accidentalmente inserirai modifiche incompatibili all’indietro.

Ci sono molti altri operatori che puoi usare. Per un elenco completo, vedere il Riferimento alla sintassi Podfile.

Ora che hai imparato come gli operatori lavorano con i tuoi CocoaPods, è il momento di finire la tua app.

Visualizzazione dei progressi

Se ricordi, stavi creando un indicatore di avanzamento per mostrare agli utenti quando i sapori si stanno caricando nell’app.

Per terminare questa funzione, tornare a PickFlavorViewController.swift e aggiungere il seguente dopo l’altro importazioni:

import MBProgressHUD

quindi, aggiungere i seguenti metodi di supporto dopo loadFlavors():

private func showLoadingHUD() { let hud = MBProgressHUD.showAdded(to: contentView, animated: true) hud.label.text = "Loading..."}private func hideLoadingHUD() { MBProgressHUD.hide(for: contentView, animated: true)}

Ora, nel loadFlavors(), aggiungere le seguenti due righe (come indicato):

 private func loadFlavors() { showLoadingHUD() // <-- Add this line Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in guard let self = self else { return } self.hideLoadingHUD() // <-- Add this line // ...

Come implicano i nomi dei metodi,showLoadingHUD()mostra un’istanza diMBProgressHUD mentre la richiesta GET viene scaricata. hideLoadingHUD() nasconde l’HUD al termine della richiesta. Poiché showLoadingHUD()è al di fuori della chiusura, non ha bisogno del prefissoself.

Crea ed esegui. Ora vedrai un indicatore di caricamento mentre i sapori stanno caricando. Se la tua connessione Internet è troppo veloce per questo, puoi aggiungere un’istruzionesleep(_:) poco prima dihideLoadingHUD() in modo da poter sperimentare la bontà di MBProgressHUD. :]

App con il simbolo di caricamento

Ottimo lavoro! I clienti possono ora selezionare il loro sapore di gelato preferito e vedono un indicatore di caricamento mentre i sapori stanno scaricando.

Dove andare da qui?

È possibile scaricare il progetto completato utilizzando il pulsante Scarica materiali nella parte superiore o inferiore di questa pagina.

Congratulazioni! Ora conosci le basi dell’utilizzo di CocoaPods, inclusa la creazione e la modifica delle dipendenze e la comprensione del controllo delle versioni semantiche. Ora sei pronto per iniziare a usarli nei tuoi progetti!

C’è molto di più che puoi fare con CocoaPods. È possibile cercare pod esistenti sul sito ufficiale CocoaPods. Inoltre, fare riferimento alle Guide CocoaPods per imparare i dettagli più fini di questo eccellente strumento. Ma attenzione, una volta che si inizia ad usarlo, vi chiederete come mai riuscito senza di essa! :]

Spero che ti sia piaciuto leggere questo tutorial CocoaPods tanto quanto l’ho scritto. Quali sono alcuni dei tuoi cocoapod preferiti? Quali ti affidi di più per i progetti di tutti i giorni? Sentitevi liberi di condividere, o per fare domande, nei commenti qui sotto!

raywenderlich.com Settimanale

Il raywenderlich.com newsletter è il modo più semplice per rimanere up-to-date su tutto quello che c’è da sapere come uno sviluppatore mobile.

Ottieni un digest settimanale dei nostri tutorial e corsi e ricevi un corso e-mail approfondito gratuito come bonus!

Valutazione media

4.8/5

Aggiungi una valutazione per questo contenuto

Accedi per aggiungere una valutazione

33 valutazioni

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.