Maybaygiare.org

Blog Network

CocoaPods Tutorial For Swift: Komme i Gang

Update merk: Rony Rozen oppdatert denne opplæringen For Xcode 11 Og Swift 5. Joshua Greene skrev originalen.CocoaPods Er en populær avhengighet manager For Swift Og Objective-C Kakao prosjekter. Tusenvis av biblioteker og millioner av apper bruker Det, ifølge CocoaPods nettsted. Men hva er en avhengighet manager og hvorfor trenger du en?

en avhengighetsbehandling gjør det enkelt å legge til, fjerne, oppdatere og administrere tredjepartsavhengighetene appen din bruker. for eksempel, i stedet for å gjenoppfinne ditt eget nettverksbibliotek, kan Du enkelt trekke Inn Alamofire ved hjelp av en dependency manager. Du kan angi den eksakte versjonen som skal brukes, eller en rekke akseptable versjoner.Dette betyr at selv Om Alamofire får en oppdatering med endringer som ikke er bakoverkompatible, kan appen fortsette å bruke den eldre versjonen til du er klar til å oppdatere den.

i denne opplæringen lærer du Hvordan Du bruker CocoaPods Med Swift. Spesielt vil du:

  • Installer CocoaPods.
  • Arbeid med en funksjonell demo app som får deg til å tenke på iskrem.
  • Bruk CocoaPods til å legge til nettverk.
  • Lær om semantisk versjonskontroll.
  • Legg til et annet bibliotek ved hjelp av en fleksibel versjon.
Merk: Denne CocoaPods opplæringen krever grunnleggende kjennskap til iOS Og Rask utvikling. Hvis du er helt ny til iOS Og / Eller Swift, så kan du sjekke ut noen av de andre skriftlige og / eller video tutorials på dette nettstedet før du gjør denne opplæringen. Eller dykk inn i vår bok, iOS Apprentice.

denne opplæringen inneholder også klasser som bruker Kjernegrafikk. Mens kunnskap Om Kjernegrafikk er gunstig, er det ikke nødvendig. Hvis du vil lære mer, kan du lese Vår Moderne Kjernegrafikk Med Swift-serien.

Komme I Gang

Last ned startprosjektet ved å klikke Last Ned Materialer-knappen øverst eller nederst i opplæringen.

Gjennom denne opplæringen vil du jobbe med en app som heter Ice Cream Shop, Inc. Du bruker CocoaPods til å legge til avhengigheter i appen på den enkle måten, i stedet for å skrive din egen.

Før du kan fortsette med denne opplæringen, må du installere CocoaPods. Heldigvis Bruker CocoaPods Ruby, som leveres med alle versjoner av macOS X siden versjon 10.7.

Åpne Terminal og skriv inn følgende kommando:

sudo gem install cocoapods

Skriv inn passordet ditt når du blir bedt om det. Terminalutgangen vil vise ulike hentings -, installasjons-og dokumentasjonsrelaterte utganger, og avsluttes med «XX gems installert».

Merk: du må bruke sudo for å installere CocoaPods, men når Den er installert, trenger du ikke å bruke den igjen i denne opplæringen.

til slutt, skriv inn denne kommandoen I Terminal for å fullføre oppsettet:

pod setup --verbose

denne prosessen tar noen minutter fordi Den kloner CocoaPods Master Specs-depotet i~/.cocoapods / på datamaskinen.

verbose alternativlogger fremgang når prosessen kjører, slik at du kan se prosessen i stedet for å se en tilsynelatende «frossen» skjerm.

Awesome, du er nå satt opp til å bruke CocoaPods!

Iskrem Butikk, Inc.

din beste klient er Ice Cream Shop, Inc. Deres iskrem er så populær at de ikke kan holde tritt med kundeordrer ved disken. De har rekruttert deg til å lage en slank iOS-app som lar kundene bestille iskrem rett fra iPhones.

du har begynt å utvikle appen, og den kommer godt sammen. Ta en titt på fremgangen din ved å åpne IceCreamShop.xcodeproj, deretter bygge og kjøre. Du vil se en appetittvekkende vaniljeis kjegle:

Ice Cream Shop, Inc.s startside's start page

brukeren skal kunne velge en iskrem fra denne skjermen, men det er ikke mulig ennå. Ditt første skritt er å fullføre implementeringen av denne funksjonaliteten.

Åpne Hoved.storyboard fra Visninger/Storyboards & Nibs gruppe for å se app layout. Her er en rask oversikt over hjertet av app, Velg Din Smak scene:

Komponenter Av Velg Din Smak scene

  • PickFlavorViewController er visningen kontrolleren for denne scenen. Den håndterer brukerinteraksjon og gir data for innsamling visning som viser de forskjellige iskrem smaker.
  • IceCreamView er en tilpasset visning som viser en iskrem basert på bakmodus, Flavor.
  • ScoopCell er en egendefinert samlingsvisningscelle som inneholder en ScoopView, som får farger fra enFlavor modell.

Mens hver Iskrem Butikk, Inc. sted har signatur smaker til felles, hver bærer sine egne lokale smaker, også. Av denne grunn må en webtjeneste gi dataene for Flavor s.

dette forklarer imidlertid fortsatt ikke hvorfor brukere ikke kan velge sine iskremsmaker.

Åpne PickFlavorViewController.swift, funnet under Kontrollgruppen, og du vil se en stubbed metode:

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

Aha, Det er ingen smaker! Du må implementere funksjonen!

mens du kan bruke URLSession og skriv dine egne nettverksklasser, er det en enklere måte: Bruk Alamofire!

du kan bli fristet til å laste ned dette biblioteket og dra kildefilene rett inn i prosjektet. Men det ville gjøre det på den harde måten. CocoaPods gir en mye mer elegant og kvikk løsning.

Installere Din Første Avhengighet

Ditt første skritt er å lukke Xcode. Ja, du leste riktig.

Det er på tide å lage Podfile, der du vil definere prosjektets avhengigheter.

Åpne Terminal og naviger til katalogen som inneholder IceCreamShop-prosjektet ved å bruke cd-kommandoen:

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

neste, skriv inn følgende kommando:

pod init

dette skaper En Podfile for prosjektet.

til Slutt skriver du inn følgende kommando for å åpne Podfilen Ved Hjelp Av Xcode for redigering:

open -a Xcode Podfile
Merk: Ikke bruk TextEdit til å redigere Podfilen fordi den erstatter standard anførselstegn med mer grafisk tiltalende typeset anførselstegn. Dette kan føre Til At CocoaPods blir forvirret og kaster feil. Bruk I stedet Xcode eller et annet tekstredigeringsprogram til å redigere Podfilen din.

standard Podfile ser slik ut:

# 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

Slett# og mellomrom før platform, og slett deretter de andre linjene som begynner med #.

Din Podfile skal nå se slik ut:

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

Dette forteller CocoaPods prosjektet ditt mål iOS 9.0 og vil bruke rammer i stedet for statiske biblioteker. Mens Swift og CocoaPods begge støtter statisk kobling, gjør ikke alle biblioteker du inkluderer. En av dem som du vil bruke i dette prosjektet, gjør det ikke.

hvis Du bare har programmert I Swift, kan dette se litt rart ut. Det er fordi Podfile er faktisk skrevet I Ruby. Du trenger ikke Å vite Ruby for å bruke CocoaPods, men du bør være oppmerksom på at selv mindre tekstfeil vil føre Til At CocoaPods kaster feil.

Et Ord om Biblioteker

du vil se begrepet bibliotek ofte brukt som en generell term som faktisk betyr et bibliotek eller rammeverk. Denne opplæringen er skyldig i tilfeldig blande disse ordene, også.

du lurer kanskje på forskjellene mellom et bibliotek, et rammeverk og En CocoaPod. Det ER OK hvis du finner terminologien litt forvirrende!En CocoaPod, eller pod for kort, er en generell term for enten et bibliotek eller rammeverk som er lagt til prosjektet Ditt Ved Hjelp Av CocoaPods.

iOS 8 introduserte dynamiske rammer, som lar deg pakke kode, bilder og andre eiendeler sammen. Før iOS 8 opprettet Du CocoaPods som» fete » statiske biblioteker. «Fett» betyr at de inneholdt flere kodeinstruksjonssett,som i386 for simulatoren, armv7 for enheter, etc. Swift tillater imidlertid ikke at statiske biblioteker inneholder ressurser som bilder eller ressurser.

Tilbake Til Å Installere Din Første Avhengighet

Det er endelig på tide å legge til din første avhengighet ved Hjelp Av CocoaPods. Legg til Følgende I Podfilen din, rett etter use_frameworks!:

pod 'Alamofire', '4.9.1'

Dette forteller CocoaPods at Du vil inkludere alamofire versjon 4.9.1 som en avhengighet for prosjektet ditt.

Lagre Og lukk Podfilen.

Du må nå fortelle CocoaPods å installere avhengighetene for prosjektet ditt.

Skriv inn følgende kommando I Terminal, etter at du fortsatt er i katalogen som inneholder IceCreamShop-prosjektet Og Podfile:

pod install

du bør se utdata som dette:

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.

Åpne prosjektmappen ved Hjelp Av Finder, og Du vil se CocoaPods opprettet en Ny IceCreamShop.xcworkspace fil og En Pods mappe for å lagre alle prosjektets avhengigheter.

Merk: Fra nå av, som kommandolinjen advarsel nevnt, må du alltid åpne prosjektet med .xcworkspace-filen og ikke den .xcodeproj. Ellers vil du støte på byggefeil.

Utmerket! Du har nettopp lagt til din første avhengighet Ved Hjelp Av CocoaPods!

Ved Hjelp Av Installerte Pods

Nå bruker du din splitter nye avhengighet, Alamofire.

hvis Xcode-prosjektet er åpent, lukk det nå og åpne IceCreamShop.xcworkspace.

Åpne PickFlavorViewController.rask og legg til følgende like under den eksisterende importen:

import Alamofire

Bygg Og kjør. Du vil ikke se noen endring ennå, men være trygg På At Alamofire er nå tilgjengelig.

Første samling etter integrering Av alamofire avhengighet

neste, erstatt loadFlavors() med følgende:

 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() } }

her er play-by-play av hva som skjer i denne koden:

  1. Du bruker Alamofire å lage EN GET forespørsel og laste ned en plist som inneholder iskrem smaker.
  2. hvis du vil bryte en sterk referansesyklus, bruker du en svak referanse til self i fullføringsblokken for svar. Når blokken utføres, får du umiddelbart en sterk referanse til self slik at du kan angi egenskaper på den senere.
  3. deretter bekrefter du at response.result viser suksess og response.result.value er en rekke ordbøker.
  4. nå setter du self.flavors til en matrise av Flavorobjekter somFlavorFactory oppretter. Dette er en klasse en «kollega» skrev for deg (du er velkommen!), som tar en rekke ordbøker og bruker dem til å lage forekomster av Flavor.
  5. Til Slutt laster du inn samlingsvisningen og velger den første smaken.

Bygg og kjør. Du kan nå velge en iskrem smak!

Velg Smak

nå For En Velsmakende Topping

appen ser bra ut, men du kan fortsatt forbedre den.

La du merke til at appen tar et sekund å laste ned flavors-filen? Hvis du er på en rask Internettforbindelse, kan du ikke merke forsinkelsen, men kundene dine vil ikke alltid være så heldige.

Ditt neste skritt er å vise en lasteindikator i appen din, for å hjelpe kundene å forstå at det laster inn data og ikke bare twiddling sine biblioteker. MBProgressHUD er en veldig fin indikator som vil fungere bra her. Og den støtter CocoaPods; for et sammentreff! :]

for å bruke denne pod, må du legge Den Til Din Podfile. I Stedet for å åpne Podfile fra kommandolinjen, kan du nå finne Den i Pods-målet i arbeidsområdet:

Pods i Arbeidsområdet

Åpne Podfile og legg til følgende, rett etter Alamofire-linjen:

pod 'MBProgressHUD', '~> 1.0'

Lagre filen og installer avhengighetene via pod installer I Terminal, bare som du gjorde før.

Legg merke til noe annet denne gangen? Ja, du angav versjonsnummeret som ~ > 1.0. Men hvorfor?

CocoaPods anbefaler At alle pods bruker Semantisk Versjonskontroll. Ta deg tid til å forstå hva det er.

Semantisk Versjonskontroll

Mange ganger ser du en versjon skrevet slik: 1.0.0. Disse tre tallene er major, minor og patch versjonsnumre.

for eksempel, for versjonsnummeret 1.0.0, er 1 hovednummeret, det første 0 er det mindre tallet, og det andre 0 er patchnummeret.

Eksempel På Semantisk Versjonskontroll

hvis hovednummeret øker, indikerer det at versjonen inneholder ikke-bakoverkompatible endringer. Når du oppgraderer en pod til neste hovedversjon, må du kanskje fikse byggfeil, eller pod kan oppføre seg annerledes enn før.

hvis det mindre antallet øker, indikerer det at versjonen inneholder ny funksjonalitet som er bakoverkompatibel. Når du bestemmer deg for å oppgradere, trenger du kanskje ikke den nye funksjonaliteten, men det bør ikke føre til byggefeil eller endre eksisterende virkemåte.

hvis patchnummeret øker, betyr det at den nye versjonen inneholder feilrettinger, men ingen ny funksjonalitet eller atferdsendringer. Generelt vil du alltid oppgradere patchversjoner så snart som mulig for å få den nyeste, stabile versjonen av pod.

Til Slutt, når du øker det høyeste ordrenummeret-major, deretter minor deretter patch-per de ovennevnte reglene, må du tilbakestille noen lavere ordrenumre til null.

Her er et eksempel:

Vurder en pod som har et gjeldende versjonsnummer på 1.2.3.

hvis du gjør endringer som ikke er bakoverkompatible, ikke har ny funksjonalitet, men løser eksisterende feil, vil du gi den versjon 2.0.0.

Utfordringstid

hvis en pod har en gjeldende versjon av 2.4.6 og du gjør endringer som løser feil og legger til bakoverkompatibel funksjonalitet, hva skal det nye versjonsnummeret være?Svar: 2.5.0
Forklaring: hvis du gjør endringer som inkluderer ny funksjonalitet som er bakoverkompatibel, øker du det mindre nummeret og tilbakestiller oppdateringen til null.

hvis en pod har en gjeldende versjon av 3.5.8 og du gjør endringer i eksisterende funksjonalitet som ikke er bakoverkompatibel, hva skal det nye versjonsnummeret være?

Svar: 4.0.0
Forklaring: Hvis endringer endrer eksisterende virkemåte og ikke er bakoverkompatible, må du øke hovednummeret og tilbakestille mindre – og oppdateringsnumrene til null.

hvis en pod har en gjeldende versjon av 10.20.30 og du bare fikse bugs, hva skal det nye versjonsnummeret være?

Svar: 10.20.31
Forklaring: Hvis du bare fikse bugs, du bare øke patch nummer.

etter å ha sagt alt dette, er det ett unntak fra disse reglene:

hvis en pod versjonsnummer er mindre enn 1.0.0, er det ansett som en betaversjon. Mindre antall økninger kan inkludere endringer som ikke er bakoverkompatible.

så tilbake Til MBProgressHUB: Bruk av ~> 1.0 betyr at du bør installere den nyeste versjonen som er større enn eller lik 1.0 men mindre enn 2.0.

dette sikrer at du får de nyeste feilrettingene og funksjonene når du installerer denne pod, men du vil ikke ved et uhell trekke inn bakoverkompatible endringer.

det er flere andre operatører du kan bruke også. For en fullstendig liste, se Podfile Syntaks Referanse.

Nå som du har lært hvordan operatører jobber Med CocoaPods, er det på tide å fullføre appen din.

Viser Fremgang

hvis du husker det, bygde du en fremdriftsindikator for å vise brukerne når smaker lastes inn i appen.

for å fullføre denne funksjonen, gå tilbake Til PickFlavorViewController.rask og legg til følgende rett etter den andre importen:

import MBProgressHUD

legg til følgende hjelpemetoder etter 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)}

nå, i loadFlavors(), legg til følgende to linjer (som angitt):

 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 metodenavnene antyder,showLoadingHUD() viser en forekomst av MBProgressHUD mens HENT-forespørselen lastes ned. hideLoadingHUD() skjuler HUD når forespørselen er ferdig. Siden showLoadingHUD() er utenfor lukkingen, trenger den ikkeself prefiks.

Bygg og kjør. Du vil nå se en lasteindikator mens smaker lastes inn. Hvis internett-tilkoblingen din er for rask til dette, kan du legge til ensleep(_:) – setning like før hideLoadingHUD() slik at Du kan oppleve godheten Som Er MBProgressHUD. :]

App med lastesymbol

Flott arbeid! Kunder kan nå velge sin favoritt iskrem smak og de ser en lasteindikator mens smaker laster ned.

Hvor Skal Du Gå Herfra?

du kan laste ned det ferdige prosjektet ved Hjelp Av Knappen Last Ned Materialer øverst eller nederst på denne siden.

Gratulerer! Du vet nå det grunnleggende om Å bruke CocoaPods, inkludert å skape og endre avhengigheter og forstå semantisk versjonskontroll. Du er nå klar til å begynne å bruke dem i dine egne prosjekter!

Det er mye mer du kan gjøre med CocoaPods. Du kan søke etter eksisterende pods på den offisielle CocoaPods nettsiden. Se Også CocoaPods Guider for å lære de finere detaljene i dette utmerkede verktøyet. Men vær advart, når du begynner å bruke det, vil du lure på hvordan du klarte deg uten det! :]

jeg håper du likte å lese Denne CocoaPods opplæringen så mye jeg skrev det. Hva er noen av dine favoritt CocoaPods? Hvilke er du mest avhengig av i hverdagslige prosjekter? Føl deg fri til å dele, eller å stille spørsmål, i kommentarfeltet nedenfor!

raywenderlich.com Ukentlig

Den raywenderlich.com nyhetsbrev er den enkleste måten å holde deg oppdatert på alt du trenger å vite som mobilutvikler.

Få en ukentlig oversikt over våre opplæringsprogrammer og kurs, og motta et gratis, grundig e-postkurs som en bonus!

Gjennomsnittlig Rangering

4.8/5

Legg til en vurdering for dette innholdet

Logg Inn For å legge til en vurdering

33 vurderinger

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.