CocoaPods är en populär beroendehanterare för Swift-och Objective-C-Kakaoprojekt. Tusentals bibliotek och miljoner appar använder det, enligt CocoaPods webbplats. Men vad är en beroendehanterare och varför behöver du en?
en beroendehanterare gör det enkelt att lägga till, ta bort, uppdatera och hantera de beroenden från tredje part som din app använder.
till exempel, istället för att återuppfinna ditt eget nätverksbibliotek, kan du enkelt dra in Alamofire med en beroendehanterare. Du kan ange antingen den exakta versionen som ska användas eller en rad acceptabla versioner.
det betyder att även om Alamofire får en uppdatering med ändringar som inte är bakåtkompatibla, kan din app fortsätta använda den äldre versionen tills du är redo att uppdatera den.
i den här handledningen lär du dig hur du använder CocoaPods med Swift. Specifikt kommer du:
- installera CocoaPods.
- arbeta med en funktionell demo-app som får dig att tänka på glass.
- använd CocoaPods för att lägga till nätverk.
- lär dig mer om Semantisk versionshantering.
- Lägg till ett annat bibliotek med en flexibel version.
denna handledning innehåller också klasser som använder Kärngrafik. Även om kunskap om Kärngrafik är fördelaktig krävs det inte. Om du vill lära dig mer, Läs vår moderna Kärngrafik med Swift-serien.
- komma igång
- Ice Cream Shop, Inc.
- installera ditt första beroende
- ett ord om Bibliotek
- tillbaka till att installera ditt första beroende
- använda installerade Pods
- nu för en god toppning
- Semantisk versionshantering
- Utmaningstid
- visar framsteg
- vart ska man gå härifrån?
- raywenderlich.com veckovis
- Medelbetyg
- Lägg till ett betyg för detta innehåll
komma igång
ladda ner startprojektet genom att klicka på knappen Hämta Material längst upp eller längst ner i handledningen.
under hela denna handledning arbetar du med en app som heter Ice Cream Shop, Inc. Du använder CocoaPods för att lägga till beroenden i appen på det enkla sättet, istället för att skriva din egen.
innan du kan fortsätta med denna handledning måste du installera CocoaPods. Lyckligtvis använder CocoaPods Ruby, som levereras med alla versioner av macOS X sedan version 10.7.
Öppna Terminal och ange följande kommando:
sudo gem install cocoapods
Ange ditt lösenord när du begär det. Terminalutgången visar olika hämtnings -, installations-och dokumentationsrelaterade utgångar och avslutas med ”XX gems installed”.
sudo
för att installera CocoaPods, men när den är installerad behöver du inte använda den igen i den här handledningen.slutligen, ange detta kommando i Terminal för att slutföra installationen:
pod setup --verbose
denna process tar några minuter eftersom den klonar CocoaPods Master Specs repository till ~/.cocoapods / på din dator.
alternativetverbose
loggar framsteg när processen körs, så att du kan titta på processen istället för att se en till synes ”frusen” skärm.
fantastiskt, du är nu inställd på att använda CocoaPods!
Ice Cream Shop, Inc.
din bästa kund är Ice Cream Shop, Inc. Deras Glass är så populär att de inte kan hålla jämna steg med kundorder vid disken. De har rekryterat dig för att skapa en snygg iOS-app som gör det möjligt för kunder att beställa glass direkt från sina iPhones.
Du har börjat utveckla appen och det kommer bra. Ta en titt på dina framsteg genom att öppna IceCreamShop.xcodeproj, sedan bygga och köra. Du kommer att se en aptitretande vaniljglasskotte:
användaren ska kunna välja en glass smak från den här skärmen, men det är inte möjligt ännu. Ditt första steg är att slutföra implementeringen av denna funktionalitet.
Öppna Huvud.storyboard från Views / Storyboards & Nibs grupp för att se appens layout. Här är en snabb översikt över appens hjärta, Välj din Smakscen:
-
PickFlavorViewController
är vykontrollen för den här scenen. Den hanterar användarinteraktion och ger data för insamlingsvyn som visar de olika glassmakerna. -
IceCreamView
är en anpassad vy som visar en glasskotte baserad på bakningsläget,Flavor
. -
ScoopCell
är en anpassad samlingsvycell som innehåller enScoopView
, som får färger från enFlavor
modell.
medan varje glassbutik, Inc. platsen har signatursmaker gemensamt, var och en bär också sina egna lokala smaker. Av denna anledning måste en webbtjänst tillhandahålla data för Flavor
s.
detta förklarar dock fortfarande inte varför användare inte kan välja sina glassmaker.
Öppna PickFlavorViewController.snabb, finns under gruppen Controllers, och du kommer att se en stubbed metod:
private func loadFlavors() { // TO-DO: Implement this}
Aha, det finns inga smaker! Du måste implementera funktionen!
medan du kan använda URLSession
och skriva egna nätverksklasser, finns det ett enklare sätt: Använd Alamofire!
Du kan bli frestad att ladda ner det här biblioteket och dra källfilerna direkt till ditt projekt. Men det skulle göra det på det svåra sättet. CocoaPods ger en mycket mer elegant och smidig lösning.
installera ditt första beroende
ditt första steg är att stänga Xcode. Ja, du läste rätt.
det är dags att skapa Podfilen, där du definierar projektets beroenden.
Öppna Terminal och navigera till katalogen som innehåller ditt IceCreamShop-projekt med kommandot cd:
cd ~/Path/To/Folder/Containing/IceCreamShop
ange sedan följande kommando:
pod init
detta skapar en Podfil för ditt projekt.
slutligen skriver du följande kommando för att öppna Podfilen med Xcode för redigering:
open -a Xcode Podfile
standard Podfilen ser ut så här:
# 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
Ta bort #
och mellanslag före platform
, ta sedan bort de andra raderna som börjar med #
.
din Podfil ska nu se ut så här:
platform :ios, '9.0'target 'IceCreamShop' do use_frameworks!end
detta berättar CocoaPods dina projektmål iOS 9.0 och kommer att använda ramar istället för statiska bibliotek. Medan Swift och CocoaPods båda stöder statisk länkning, inte alla bibliotek du inkluderar gör. En av dem som du kommer att använda i det här projektet gör det inte.
om du bara har programmerat i Swift kan det se lite konstigt ut. Det beror på att Podfilen faktiskt är skriven i Ruby. Du behöver inte veta Ruby att använda CocoaPods, men du bör vara medveten om att även mindre textfel kommer att orsaka CocoaPods att kasta fel.
ett ord om Bibliotek
du ser termen bibliotek som ofta används som en allmän term som faktiskt betyder ett bibliotek eller ramverk. Denna handledning är skyldig till nonchalant blanda dessa ord, för.
Du kanske undrar om skillnaderna mellan ett bibliotek, ett ramverk och en CocoaPod. Det är OK om du tycker att terminologin är lite förvirrande!
en CocoaPod, eller pod för kort, är en allmän term för antingen ett bibliotek eller ramverk som läggs till i ditt projekt med CocoaPods.
iOS 8 introducerade dynamiska ramar, som låter dig kombinera kod, bilder och andra tillgångar tillsammans. Före iOS 8 skapade du CocoaPods som” feta ” statiska bibliotek. ”Fat” betyder att de innehöll flera kodinstruktionsuppsättningar, som i386 för simulatorn, armv7 för enheter etc. Swift tillåter dock inte att statiska bibliotek innehåller resurser som bilder eller resurser.
tillbaka till att installera ditt första beroende
det är äntligen dags att lägga till ditt första beroende med CocoaPods. Lägg till följande i din Podfile, direkt efter use_frameworks!
:
pod 'Alamofire', '4.9.1'
detta berättar CocoaPods du vill inkludera Alamofire version 4.9.1 som ett beroende för ditt projekt.
spara och stäng Podfilen.
Du måste nu berätta för CocoaPods att installera beroenden för ditt projekt.
Ange följande kommando i Terminal, efter att du har kontrollerat att du fortfarande är i katalogen som innehåller IceCreamShop-projektet och Podfile:
pod install
Du bör se utdata så här:
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.
Öppna projektmappen med Finder så ser du CocoaPods skapade en ny IceCreamShop.xcworkspace-fil och en Pods-mapp för att lagra alla projektets beroenden.
utmärkt! Du har just lagt till ditt första beroende med CocoaPods!
använda installerade Pods
Nu använder du ditt helt nya beroende, Alamofire.
om Xcode-projektet är öppet, stäng det nu och öppna IceCreamShop.xcworkspace.
Öppna PickFlavorViewController.swift och Lägg till följande strax under den befintliga importen:
import Alamofire
Bygg och kör. Du ser ingen förändring ännu men vara säker på att Alamofire är nu tillgänglig.
nästa, ersätt loadFlavors()
med följande:
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() } }
här är play-by-play av vad som händer i den här koden:
- du använder Alamofire för att skapa en GET-förfrågan och ladda ner en plist som innehåller glasssmaker.
- för att bryta en stark referenscykel använder du en svag referens till
self
I response completion-blocket. När blocket körs får du omedelbart en stark hänvisning tillself
så att du kan ställa in egenskaper på det senare. - därefter verifierar du att
response.result
visar framgång ochresponse.result.value
är en rad ordböcker. - nu ställer du in
self.flavors
till en array medFlavor
objekt somFlavorFactory
skapar. Detta är en klass A ”kollega” skrev för dig (du är välkommen!), som tar en rad ordböcker och använder dem för att skapa instanser avFlavor
. - slutligen laddar du om samlingsvyn och väljer den första smaken.
Bygg och kör. Du kan nu välja en glassmak!
nu för en god toppning
appen ser bra ut, men du kan fortfarande förbättra den.
märkte du att appen tar en sekund att ladda ner flavors-filen? Om du har en snabb Internetanslutning kanske du inte märker förseningen, men dina kunder kommer inte alltid att vara så lyckliga.
ditt nästa steg är att visa en laddningsindikator i din app, för att hjälpa kunder att förstå att det laddar data och inte bara twiddling dess bibliotek. MBProgressHUD är en riktigt trevlig indikator som fungerar bra här. Och det stöder CocoaPods; vilket sammanträffande! :]
för att använda denna pod måste du lägga till den i din Podfile. I stället för att öppna Podfilen från kommandoraden kan du nu hitta den i Pods-målet i arbetsytan:
Öppna Podfile och Lägg till följande, direkt efter Alamofire-raden:
pod 'MBProgressHUD', '~> 1.0'
spara filen och installera beroenden via pod install i Terminal, precis som du gjorde tidigare.
Lägg märke till något annat den här gången? Japp, du angav versionsnumret som ~> 1.0. Men varför?
CocoaPods rekommenderar att alla skida använder Semantisk versionshantering. Ta en stund att förstå vad det är.
Semantisk versionshantering
många gånger ser du en version skriven så här: 1.0.0. Dessa tre siffror är stora, mindre och patch versionsnummer.
till exempel för versionsnummer 1.0.0 är 1 huvudnumret, det första 0 är det mindre numret och det andra 0 är patchnumret.
om huvudnumret ökar indikerar det att versionen innehåller icke-bakåtkompatibla ändringar. När du uppgraderar en pod till nästa huvudversion kan du behöva fixa byggfel eller så kan pod-enheten fungera annorlunda än tidigare.
om det mindre antalet ökar indikerar det att versionen innehåller ny funktionalitet som är bakåtkompatibel. När du bestämmer dig för att uppgradera behöver du kanske eller inte den nya funktionaliteten, men det bör inte orsaka några byggfel eller ändra befintligt beteende.
om patchnumret ökar betyder det att den nya versionen innehåller buggfixar men ingen ny funktionalitet eller beteende förändras. I allmänhet vill du alltid uppgradera patchversioner så snart som möjligt för att få den senaste, stabila versionen av pod.
slutligen, när du ökar det högsta ordernumret-major, då mindre sedan patch — enligt ovanstående regler, måste du återställa eventuella lägre ordernummer till noll.
Här är ett exempel:
Tänk på en pod som har ett aktuellt versionsnummer på 1.2.3.
Om du gör ändringar som inte är bakåtkompatibla, har inte ny funktionalitet, men fixar befintliga buggar, skulle du ge den version 2.0.0.
Utmaningstid
om en pod har en aktuell version av 2.4.6 och du gör ändringar som fixar buggar och lägger till bakåtkompatibel funktionalitet, vad ska det nya versionsnumret vara?
svar: 2.5.0
förklaring: om du gör ändringar som innehåller ny funktionalitet som är bakåtkompatibel ökar du det mindre antalet och återställer korrigeringsfilen till noll.
om en pod har en aktuell version av 3.5.8 och du gör ändringar i befintliga funktioner som inte är bakåtkompatibla, vad ska det nya versionsnumret vara?
svar: 4.0.0
förklaring: Om ändringar ändrar befintligt beteende och inte är bakåtkompatibla måste du öka huvudnumret och återställa mindre och korrigeringsnummer till noll.
om en pod har en aktuell version av 10.20.30 och du bara fixar fel, Vad ska det nya versionsnumret vara?
svar: 10.20.31
förklaring: om du bara fixar fel, ökar du bara patchnumret.
Efter att ha sagt allt detta finns det ett undantag från dessa regler:
om en pods versionsnummer är mindre än 1.0.0 anses den vara en betaversion. Mindre antal ökningar kan inkludera ändringar som inte är bakåtkompatibla.
så tillbaka till MBProgressHUB: använda ~> 1.0
betyder att du ska installera den senaste versionen som är större än eller lika med 1.0
men mindre än 2.0
.
detta säkerställer att du får de senaste buggfixarna och funktionerna när du installerar denna pod, men du kommer inte av misstag att dra in bakåtkompatibla ändringar.
det finns flera andra operatörer Du kan använda också. För en fullständig lista, se Podfile Syntax referens.
Nu när du har lärt dig hur operatörer arbetar med dina CocoaPods är det dags att avsluta din app.
visar framsteg
om du kommer ihåg byggde du en framstegsindikator för att visa dina användare när smaker laddas i appen.
för att avsluta den här funktionen, gå tillbaka till PickFlavorViewController.swift och Lägg till följande direkt efter den andra importen:
import MBProgressHUD
lägg sedan till följande hjälpmetoder efter 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)}
nu, i loadFlavors()
, Lägg till följande två rader (som anges):
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 // ...
som metodnamnen antyder, showLoadingHUD()
visar en instans av MBProgressHUD
medan GET-begäran hämtas. hideLoadingHUD()
döljer HUD när begäran är klar. Eftersom showLoadingHUD()
ligger utanför Stängningen behöver den inte prefixet self
.
Bygg och kör. Du ser nu en laddningsindikator medan smakerna laddas. Om din Internet-anslutning är för snabb för detta, Du kan lägga till ensleep(_:)
uttalande strax förehideLoadingHUD()
så att du kan uppleva godhet som är MBProgressHUD. :]
bra arbete! Kunderna kan nu välja sin favoritglassmak och de ser en laddningsindikator medan smaker laddas ner.
vart ska man gå härifrån?
Du kan ladda ner det slutförda projektet med knappen Hämta Material längst upp eller längst ner på den här sidan.
Grattis! Du vet nu grunderna i att använda CocoaPods, inklusive att skapa och ändra beroenden och förstå Semantisk versionshantering. Du är nu redo att börja använda dem i dina egna projekt!
det finns mycket mer som du kan göra med CocoaPods. Du kan söka efter befintliga pods på den officiella CocoaPods-webbplatsen. Se också CocoaPods-guiderna för att lära dig de finare detaljerna i detta utmärkta verktyg. Men varnas, när du börjar använda det, kommer du att undra hur du någonsin lyckats utan det! :]
Jag hoppas att du gillade att läsa den här CocoaPods-handledningen så mycket jag skrev den. Vilka är några av dina favorit CocoaPods? Vilka litar du mest på för vardagliga projekt? Dela gärna, eller ställa några frågor, i kommentarerna nedan!
raywenderlich.com veckovis
raywenderlich.com nyhetsbrev är det enklaste sättet att hålla dig uppdaterad om allt du behöver veta som mobilutvecklare.
få en veckovis sammanfattning av våra handledning och kurser, och få en gratis fördjupad e-postkurs som en bonus!
Medelbetyg
4.8/5
Lägg till ett betyg för detta innehåll
logga in för att lägga till ett betyg