Maybaygiare.org

Blog Network

CocoaPods Tutorial til hurtig: Kom godt i gang

opdatering Bemærk: Rony Rosen opdateret denne tutorial til Kode 11 og hurtig 5. Joshua Greene skrev originalen.

CocoaPods er en populær afhængighed manager for hurtige og Objective-C kakao projekter. Tusindvis af biblioteker og millioner af apps bruger det, ifølge CocoaPods hjemmeside. Men hvad er en afhængighed manager og hvorfor har du brug for en?

en afhængighedsadministrator gør det nemt at tilføje, fjerne, opdatere og administrere de tredjepartsafhængigheder, som din app bruger.

for eksempel kan du i stedet for at genopfinde dit eget netværksbibliotek nemt trække Alamofire ind ved hjælp af en afhængighedsadministrator. Du kan angive enten den nøjagtige version, der skal bruges, eller en række acceptable versioner.

dette betyder, at selvom Alamofire får en opdatering med ændringer, der ikke er bagudkompatible, kan din app fortsætte med at bruge den ældre version, indtil du er klar til at opdatere den.

i denne vejledning lærer du, hvordan du bruger CocoaPods med hurtig. Specifikt vil du:

  • installer CocoaPods.
  • Arbejd med en funktionel demo-app, der får dig til at tænke på is.
  • brug CocoaPods til at tilføje netværk.
  • Lær om semantisk versionering.
  • Tilføj et andet bibliotek ved hjælp af en fleksibel version.
Bemærk: Denne CocoaPods tutorial kræver grundlæggende kendskab til iOS og hurtig udvikling. Hvis du er helt ny til iOS og/eller hurtig, så tjek nogle af de andre skriftlige og/eller video tutorials på dette site, før du gør denne tutorial. Eller, dykke ned i vores bog, iOS Apprentice.

denne tutorial indeholder også klasser, der bruger Kernegrafik. Mens viden om Kernegrafik er gavnlig, er det ikke nødvendigt. Hvis du gerne vil vide mere, kan du læse vores moderne Kernegrafik med hurtige serier.

Kom godt i gang

Hent startprojektet ved at klikke på knappen Hent materialer øverst eller nederst i vejledningen.

i hele denne tutorial arbejder du med en app kaldet Ice Cream Shop, Inc. Du bruger CocoaPods til at tilføje afhængigheder til appen på den nemme måde i stedet for at skrive din egen.

før du kan fortsætte med denne vejledning, skal du installere CocoaPods. Heldigvis bruger CocoaPods Ruby, som leveres med alle versioner af macOS siden version 10.7.

Åbn Terminal og indtast følgende kommando:

sudo gem install cocoapods

Indtast din adgangskode, når du bliver bedt om det. Terminaludgangen viser forskellige hentnings -, installations-og dokumentationsrelaterede udgange, der afsluttes med “gems installeret”.

Bemærk: du skal brugesudo for at installere CocoaPods, men når det er installeret, behøver du ikke bruge det igen i denne vejledning.

endelig skal du indtaste denne kommando i Terminal for at fuldføre opsætningen:

pod setup --verbose

denne proces tager et par minutter, fordi det kloner CocoaPods Master Specs repository i ~/.cocoapods / på din computer.

verbose valgmuligheden logger fremskridt, når processen kører, så du kan se processen i stedet for at se en tilsyneladende “frossen” skærm.

fantastisk, du er nu sat op til at bruge CocoaPods!

isbutik, Inc.

din bedste klient er Ice Cream Shop, Inc. Deres is er så populær, at de ikke kan holde trit med kundeordrer ved skranken. De har rekrutteret dig til at oprette en slank iOS-app, der giver kunderne mulighed for at bestille is lige fra deres iPhones.

Du er begyndt at udvikle appen, og den kommer godt sammen. Se på dine fremskridt ved at åbne IceCreamShop.vi bygger og kører. Du vil se en lækker vaniljeis kegle:

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

brugeren skal kunne vælge en issmag fra denne skærm, men det er ikke muligt endnu. Dit første skridt er at afslutte implementeringen af denne funktionalitet.

Åbn hoved.storyboard fra visningerne/Storyboards & Nibs group for at se appens layout. Her er et hurtigt overblik over hjertet af appen, vælg din Smagsscene:

komponenter i Vælg din Smagsscene

  • PickFlavorViewController er visningskontrolleren for denne scene. Det håndterer brugerinteraktion og giver dataene til indsamlingsvisningen, der viser de forskellige issmag.
  • IceCreamViewer en brugerdefineret visning, der viser en iskegle baseret på backing mode, Flavor.
  • ScoopCell er en brugerdefineret samlingsvisningscelle, der indeholder en ScoopView, som får farver fra en Flavor model.

mens hver isbutik, Inc. placering har signatur smag til fælles, hver bærer sine egne lokale smag, også. Af denne grund skal en internettjeneste levere dataene til Flavor s.

Dette forklarer dog stadig ikke, hvorfor brugerne ikke kan vælge deres issmag.

Åbn Pickflavorviecontroller.hurtig, fundet under Controllergruppen, og du vil se en stubbet metode:

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

Aha, der er ingen smag! Du skal implementere funktionen!

mens du kunne bruge URLSession og skriv dine egne netværksklasser, er der en nemmere måde: Brug Alamofire!

Du kan blive fristet til at hente dette bibliotek og trække kildefilerne lige ind i dit projekt. Det ville dog gøre det på den hårde måde. CocoaPods giver en meget mere elegant og smidig løsning.

installation af din første afhængighed

dit første skridt er at lukke koden. Ja, du læste rigtigt.

det er tid til at oprette Podfilen, hvor du definerer dit projekts afhængigheder.

Åbn Terminal og naviger til det bibliotek, der indeholder dit IceCreamShop-projekt ved hjælp af cd-kommandoen:

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

indtast derefter følgende kommando:

pod init

dette opretter en Podfil til dit projekt.

skriv endelig følgende kommando for at åbne Podfilen ved hjælp af kode til redigering:

open -a Xcode Podfile
Bemærk: Brug ikke Tekstedit til at redigere Podfilen, fordi den erstatter standard citater med mere grafisk tiltalende typesæt citater. Dette kan medføre, at CocoaPods bliver forvirrede og kaster fejl. Brug i stedet kode eller en anden programmeringsteksteditor til at redigere din Podfile.

standard Podfile ser sådan ud:

# 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

Slet#og mellemrum førplatform, og slet derefter de andre linjer, der starter med#.

din Podfile skal nu se sådan ud:

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

dette fortæller CocoaPods, at dit projekt er målrettet mod iOS 9.0 og vil bruge rammer i stedet for statiske biblioteker. Mens hurtige og CocoaPods begge understøtter statisk sammenkædning, gør ikke alle biblioteker, du inkluderer. En af dem, som du vil bruge i dette projekt, gør det ikke.

Hvis du kun har programmeret i hurtig, kan det se lidt underligt ud. Det skyldes, at Podfilen faktisk er skrevet i Rubin. Du behøver ikke at kende Ruby for at bruge CocoaPods, men du skal være opmærksom på, at selv mindre tekstfejl vil få CocoaPods til at kaste fejl.

et ord om biblioteker

du vil se udtrykket bibliotek ofte brugt som et generelt udtryk, der faktisk betyder et bibliotek eller en ramme. Denne tutorial er skyldig i tilfældigt at blande disse ord, også.

du undrer dig måske over forskellene mellem et bibliotek, en ramme og en CocoaPod. Det er OK, hvis du finder terminologien lidt forvirrende!

en CocoaPod, eller pod for kort, er en generel betegnelse for enten et bibliotek eller en ramme, der er føjet til dit projekt ved hjælp af CocoaPods.

iOS 8 introducerede dynamiske rammer, som giver dig mulighed for at samle kode, billeder og andre aktiver sammen. Før iOS 8 oprettede du CocoaPods som “fede” statiske biblioteker. “Fat” betyder, at de indeholdt flere kodeinstruktionssæt, som i386 til simulatoren, armv7 til enheder osv. Hurtig tillader dog ikke statiske biblioteker at indeholde ressourcer som billeder eller aktiver.

tilbage til installation af din første afhængighed

det er endelig tid til at tilføje din første afhængighed ved hjælp af CocoaPods. Tilføj følgende til din Podfile, lige efter use_frameworks!:

pod 'Alamofire', '4.9.1'

dette fortæller CocoaPods, at du vil inkludere Alamofire version 4.9.1 som en afhængighed af dit projekt.

Gem og luk Podfilen.

Du skal nu fortælle CocoaPods at installere afhængigheder for dit projekt.

Indtast følgende kommando i Terminal, efter at du har sikret dig, at du stadig er i mappen, der indeholder IceCreamShop-projektet og Podfilen:

pod install

Du skal se output som denne:

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.

Åbn projektmappen ved hjælp af Finder, og du vil se CocoaPods oprettet en ny IceCreamShop.fil og en bælg mappe til at gemme alle projektets afhængigheder.

Bemærk: fra nu af, som kommandolinjen advarsel nævnt, skal du altid åbne projektet med .fil og ikke den .- Ja. Ellers vil du støde bygge fejl.

fremragende! Du har lige tilføjet din første afhængighed ved hjælp af CocoaPods!

brug af installerede Pods

nu bruger du din helt nye afhængighed, Alamofire.

Hvis Kodeprojektet er åbent, skal du lukke det nu og åbne IceCreamShop.arbejdsområdet.

Åbn Pickflavorviecontroller.hurtig og tilføj følgende lige under den eksisterende import:

import Alamofire

Byg og kør. Du vil ikke se nogen ændring endnu, men vær sikker på at Alamofire nu er tilgængelig.

første kompilering efter integration af alamofire afhængighed

næste, erstat 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 af hvad der sker i denne kode:

  1. du bruger Alamofire til at oprette en GET-anmodning og hente en plist, der indeholder issmag.
  2. for at bryde en stærk referencecyklus bruger du en svag reference til self i svarafslutningsblokken. Når blokken udføres, får du straks en stærk henvisning til self så du kan indstille egenskaber på den senere.
  3. dernæst bekræfter du response.result viser succes, og response.result.value er en række ordbøger.
  4. nu indstiller du self.flavorstil en række Flavorobjekter, som FlavorFactory opretter. Dette er en klasse A “kollega” skrev til dig (du er velkommen!), som tager en række ordbøger og bruger dem til at oprette forekomster af Flavor.
  5. endelig genindlæser du samlingsvisningen og vælger den første smag.

Byg og kør. Du kan nu vælge en issmag!

Vælg smag

nu for en velsmagende Topping

appen ser godt ud, men du kan stadig forbedre den.

har du bemærket, at appen tager et sekund at hente smagsfilen? Hvis du har en hurtig internetforbindelse, bemærker du muligvis ikke forsinkelsen, men dine kunder vil ikke altid være så heldige.

dit næste trin er at vise en indlæsningsindikator i din app for at hjælpe kunderne med at forstå, at det indlæser data og ikke bare vrider bibliotekerne. MBProgressHUD er en rigtig flot indikator, der vil fungere godt her. Og det understøtter CocoaPods; hvilken tilfældighed! :]

for at bruge denne pod skal du tilføje den til din Podfile. I stedet for at åbne Podfilen fra kommandolinjen, kan du nu finde den i Pods-målet i arbejdsområdet:

Pods i arbejdsområdet

Åbn Podfile og tilføj følgende, lige efter Alamofire-linjen:

pod 'MBProgressHUD', '~> 1.0'

Gem filen og installer afhængighederne via pod install i Terminal, ligesom du gjorde før.

Bemærk noget andet denne gang? Yep, du angav versionsnummeret som ~ > 1.0. Men hvorfor?

CocoaPods anbefaler, at alle pods bruger semantisk versionering. Brug et øjeblik på at forstå, hvad det er.

semantisk versionering

mange gange vil du se en version skrevet som denne: 1.0.0. Disse tre numre er større, mindre og patch versionsnumre.

for eksempel for versionsnummeret 1.0.0 Er 1 det største tal, det første 0 er det mindre tal, og det andet 0 er patch-nummeret.

semantisk Versionseksempel

Hvis det store antal stiger, indikerer det, at versionen indeholder ikke-bagudkompatible ændringer. Når du opgraderer en pod til den næste overordnede version, skal du muligvis rette byggefejl, ellers kan pod ‘ en opføre sig anderledes end før.

Hvis det mindre antal stiger, indikerer det, at versionen indeholder ny funktionalitet, der er bagudkompatibel. Når du beslutter dig for at opgradere, har du muligvis ikke brug for den nye funktionalitet, men det bør ikke forårsage byggefejl eller ændre eksisterende adfærd.

Hvis patch-nummeret stiger, betyder det, at den nye version indeholder fejlrettelser, men ingen ny funktionalitet eller adfærdsændringer. Generelt vil du altid opgradere patch-versioner så hurtigt som muligt for at få den nyeste, stabile version af pod.

endelig, når du øger det højeste ordrenummer-større, derefter mindre og derefter patch — i henhold til ovenstående regler, skal du nulstille alle lavere ordrenumre til nul.

Her er et eksempel:

overvej en pod, der har et aktuelt versionsnummer på 1.2.3.

Hvis du foretager ændringer, der ikke er bagudkompatible, ikke har ny funktionalitet, men retter eksisterende fejl, giver du den version 2.0.0.

Udfordringstid

Hvis en pod har en aktuel version af 2.4.6 og du foretager ændringer, der løser fejl og tilføjer bagudkompatibel funktionalitet, Hvad skal det nye versionsnummer være?

svar: 2.5.0
forklaring: hvis du foretager ændringer, der inkluderer ny funktionalitet, der er bagudkompatibel, øger du det mindre antal og nulstiller programrettelsen til nul.

Hvis en pod har en aktuel version af 3.5.8, og du foretager ændringer i eksisterende funktionalitet, som ikke er bagudkompatibel, hvad skal det nye versionsnummer være?

svar: 4.0.0
forklaring: Hvis ændringer ændrer eksisterende adfærd og ikke er bagudkompatible, skal du øge hovednummeret og nulstille minor-og patchnumrene til nul.

Hvis en pod har en aktuel version af 10.20.30, og du kun retter fejl, Hvad skal det nye versionsnummer være?

svar: 10.20.31
forklaring: hvis du kun retter fejl, øger du kun patch-nummeret.

Når alt dette er sagt, er der en undtagelse fra disse regler:

Hvis en pods versionsnummer er mindre end 1.0.0, betragtes det som en betaversion. Mindre antal stigninger kan omfatte ændringer, der ikke er bagudkompatible.

så tilbage til MBProgressHUB: brug af~> 1.0betyder, at du skal installere den nyeste version, der er større end eller lig med1.0men mindre end2.0.

dette sikrer, at du får de nyeste fejlrettelser og funktioner, når du installerer denne pod, men du vil ikke ved et uheld trække i bagudkompatible ændringer.

der er flere andre operatører, du også kan bruge. For en komplet liste, se Podfile syntaks Reference.

nu hvor du har lært, hvordan operatører arbejder med dine CocoaPods, er det tid til at afslutte din app.

viser fremskridt

Hvis du husker det, byggede du en statusindikator for at vise dine brugere, når smag indlæses i appen.

for at afslutte denne funktion skal du gå tilbage til Pickflavorviecontroller.hurtig og tilføj følgende lige efter den anden import:

import MBProgressHUD

næste, tilføj følgende hjælpermetoder 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(), tilføj følgende to linjer (som angivet):

 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 af MBProgressHUD mens Hent anmodning henter. hideLoadingHUD() skjuler HUD, når anmodningen er færdig. DashowLoadingHUD() er uden for lukningen, behøver den ikkeself præfiks.

Byg og kør. Du vil nu se en indlæsningsindikator, mens smagene indlæses. Hvis din internetforbindelse er for hurtig til dette, kan du tilføje en sleep(_:) erklæring lige før hideLoadingHUD() så du kan opleve den Godhed, der er MBProgressHUD. :]

App med loading symbol

stort arbejde! Kunderne kan nu vælge deres foretrukne is smag og de ser en lastning indikator, mens varianter henter.

hvor skal man hen herfra?

Du kan hente det afsluttede projekt ved hjælp af knappen Hent materialer øverst eller nederst på denne side.

Tillykke! Du kender nu det grundlæggende ved at bruge CocoaPods, herunder oprettelse og ændring af afhængigheder og forståelse af semantisk versionering. Du er nu klar til at begynde at bruge dem i dine egne projekter!

der er meget mere, du kan gøre med CocoaPods. Du kan søge efter eksisterende bælg på den officielle CocoaPods hjemmeside. Se også CocoaPods Guides for at lære de finere detaljer i dette fremragende værktøj. Men vær advaret, når du begynder at bruge det, vil du undre dig over, hvordan du nogensinde har formået uden det! :]

Jeg håber du nød at læse denne CocoaPods tutorial så meget jeg skrev det. Hvad er nogle af dine foretrukne CocoaPods? Hvilke stoler du mest på til hverdagsprojekter? Du er velkommen til at dele, eller stille spørgsmål, i kommentarerne nedenfor!

raywenderlich.com ugentlig

den raywenderlich.com nyhedsbrev er den nemmeste måde at holde dig opdateret om alt hvad du behøver at vide som mobiludvikler.

få en ugentlig fordøjelse af vores tutorials og kurser, og modtag et gratis dybtgående e-mail-kursus som en bonus!

gennemsnitlig bedømmelse

4.8/5

Tilføj en bedømmelse for dette indhold

Log ind for at tilføje en bedømmelse

33 bedømmelser

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.