Maybaygiare.org

Blog Network

CocoaPods výukový program pro Swift: Začínáme

aktualizace poznámka: Rony Rozen aktualizoval tento výukový program pro Xcode 11 a Swift 5. Joshua Greene napsal originál.

CocoaPods je populární dependency manager pro projekty Swift a Objective-C Cocoa. Podle webu CocoaPods ji používají tisíce knihoven a miliony aplikací. Ale co je správce závislostí a proč ho potřebujete?

Správce závislostí usnadňuje přidávání, odebírání, aktualizaci a správu závislostí třetích stran, které vaše aplikace používá.

například namísto znovuobjevení vlastní síťové knihovny můžete snadno stáhnout Alamofire pomocí Správce závislostí. Můžete určit buď přesnou verzi, kterou chcete použít, nebo rozsah přijatelných verzí.

To znamená, že i když Alamofire dostane aktualizaci s změny, které nejsou zpětně kompatibilní, aplikace může nadále používat starší verzi, dokud nejste připraveni jej aktualizovat.

v tomto tutoriálu se dozvíte, jak používat CocoaPods s Swift. Konkrétně budete:

  • nainstalovat CocoaPods.
  • Pracujte s funkční demo aplikací, která vás přiměje přemýšlet o zmrzlině.
  • použijte CocoaPods pro přidání sítí.
  • další informace o sémantické verzi.
  • přidat další knihovnu pomocí flexibilní verze.
Poznámka: Tento tutoriál CocoaPods vyžaduje základní znalost vývoje iOS a Swift. Pokud jste v systému iOS a/nebo Swift zcela noví, podívejte se prosím na některé další písemné a/nebo video tutoriály na tomto webu před provedením tohoto tutoriálu. Nebo, ponořte se do naší knihy, iOS Apprentice.

tento tutoriál obsahuje také třídy, které používají základní grafiku. Zatímco znalost základní grafiky je prospěšná, není to nutné. Pokud se chcete dozvědět více, přečtěte si naši moderní základní grafiku se sérií Swift.

Začínáme

Stáhněte si Projekt starter kliknutím na tlačítko Stáhnout materiály v horní nebo dolní části tutoriálu.

v celém tomto tutoriálu budete pracovat s aplikací s názvem Ice Cream Shop, Inc. Budete používat CocoaPods přidat závislosti na aplikaci snadný způsob, Místo psaní Vlastní.

než budete moci pokračovat v tomto tutoriálu, musíte nainstalovat CocoaPods. Naštěstí CocoaPods používá Ruby, který je dodáván se všemi verzemi macOS X od verze 10.7.

otevřete terminál a zadejte následující příkaz:

sudo gem install cocoapods

Na požádání zadejte své heslo. Výstup terminálu zobrazí různé výstupy pro načítání, instalaci a dokumentaci, na závěr „XX gems installed“.

Poznámka: musíte použít sudo instalovat CocoaPods, ale jakmile je nainstalován, nebudete muset znovu použít v tomto návodu.

nakonec zadejte tento příkaz do terminálu a dokončete nastavení:

pod setup --verbose

Tento proces trvá několik minut, protože to klony CocoaPods Master Specifikace úložiště do ~/.cocoapods / na vašem počítači.

volba verbose zaznamenává průběh procesu, což vám umožní sledovat proces místo toho, abyste viděli zdánlivě „zamrzlou“ obrazovku.

úžasné, nyní jste připraveni používat CocoaPods!

Ice Cream Shop, Inc.

vaším nejlepším klientem je Ice Cream Shop, Inc. Jejich zmrzlina je tak populární, že nemohou držet krok s objednávkami zákazníků na přepážce. Najali vás, abyste vytvořili elegantní aplikaci pro iOS, která zákazníkům umožní objednat zmrzlinu přímo z jejich telefonů iPhone.

začali jste vyvíjet aplikaci a přichází to dobře. Podívejte se na svůj pokrok otevřením IceCreamShop.xcodeproj, pak budování a běh. Uvidíte kužel vanilkové zmrzliny na zalévání úst:

Ice Cream Shop, Inc.Úvodní stránka's start page

uživatel by měl mít možnost vybrat si z této obrazovky příchuť zmrzliny, ale to ještě není možné. Prvním krokem je dokončení implementace této funkce.

otevřít Hlavní.storyboard from the Views / Storyboards & Nibs group to see the app ‚ s layout. Zde je rychlý přehled srdcem aplikace, Vyberte si Chuť scéna:

Komponenty Vyberte si Chuť scéna

  • PickFlavorViewController view controller pro tuto scénu. Zpracovává interakci s uživatelem a poskytuje data pro zobrazení sběru, které zobrazuje různé příchutě zmrzliny.
  • IceCreamView je vlastní pohled, který zobrazuje kužel zmrzliny založený na režimu zálohování, Flavor.
  • ScoopCell je vlastní sbírka zobrazit buňku, která obsahuje ScoopView, která dostane barvy z Flavor model.

While every Ice Cream Shop, Inc. místo má společné charakteristické příchutě, každý nese své vlastní místní příchutě, také. Z tohoto důvodu musí webová služba poskytnout data pro Flavors.

to však stále nevysvětluje, proč si uživatelé nemohou vybrat své příchutě zmrzliny.

otevřete PickFlavorViewController.swift, nalezený ve skupině regulátorů, a uvidíte stubbed metodu:

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

Aha, neexistují žádné příchutě! Musíte implementovat funkci!

i když můžete použít URLSession a psát své vlastní síťové třídy, existuje jednodušší způsob: použijte Alamofire!

můžete být v pokušení stáhnout tuto knihovnu a přetáhnout zdrojové soubory přímo do vašeho projektu. To by však bylo těžké. CocoaPods poskytuje mnohem elegantnější a hbitější řešení.

instalace první závislosti

prvním krokem je zavření Xcode. Jo, čteš to správně.

je čas vytvořit Podfile, kde budete definovat závislosti vašeho projektu.

Otevřít Terminál a přejděte do adresáře, který obsahuje IceCreamShop projektu pomocí příkazu cd:

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

Next, zadejte následující příkaz:

pod init

To vytváří Podfile pro váš projekt.

a Nakonec, zadejte následující příkaz k otevření Podfile pomocí Xcode pro úpravy:

open -a Xcode Podfile
Poznámka: nepoužívejte Příkaz upravit Podfile, protože nahrazuje standardní citace s více graficky atraktivní vysázet citace. To může způsobit zmatení Cocoapodů a házení chyb. Místo toho použijte Xcode nebo jiný programovací textový editor k úpravě Podfile.

výchozí Podfile vypadá takto:

# 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

Odstranit # a prostor před platform, pak odstranit ostatní řádky začínající #.

váš Podfile by nyní měl vypadat takto:

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

to říká CocoaPods váš projekt cílí na iOS 9.0 a bude používat rámce místo statických knihoven. Zatímco Swift a CocoaPods podporují statické propojení, ne všechny knihovny, které zahrnujete, Ano. Jeden z nich, který budete používat v tomto projektu není.

Pokud jste naprogramovali pouze ve Swiftu, může to vypadat trochu divně. Je to proto, že Podfile je ve skutečnosti napsán v Ruby. Nemusíte vědět, Ruby používat CocoaPods, ale měli byste si být vědomi toho, že i drobné textové chyby způsobí CocoaPods házet chyby.

slovo o knihovnách

uvidíte termín knihovna často používaný jako obecný termín, který ve skutečnosti znamená knihovnu nebo rámec. Tento výukový program je vinen z nenuceného smíchání těchto slov, také.

možná vás zajímá rozdíl mezi knihovnou, frameworkem a Cocoapodem. Je to v pořádku, pokud vám terminologie připadá trochu matoucí!

CocoaPod, nebo zkráceně pod, je obecný termín pro knihovnu nebo rámec, který je přidán do vašeho projektu pomocí CocoaPods.

iOS 8 představil dynamické rámce, které vám umožňují spojit kód, obrázky a další aktiva dohromady. Před iOS 8 jste vytvořili CocoaPods jako“ tlusté “ statické knihovny. „Fat“ znamená, že obsahovaly několik kódových instrukčních sad, například i386 pro simulátor, armv7 pro zařízení atd. Swift však neumožňuje statickým knihovnám obsahovat zdroje, jako jsou obrázky nebo aktiva.

zpět na instalaci první závislosti

je konečně čas přidat první závislost pomocí CocoaPods. Přidejte následující do vašeho Podfile, hned po use_frameworks!:

pod 'Alamofire', '4.9.1'

Tento říká, CocoaPods, které chcete zahrnout Alamofire verze 4.9.1 jako závislost pro váš projekt.

Uložte a zavřete Podfile.

nyní musíte říct CocoaPods, aby nainstalovali závislosti pro váš projekt.

zadejte následující příkaz do terminálu poté, co se ujistíte, že jste stále v adresáři obsahujícím Projekt IceCreamShop a Podfile:

pod install

měli Byste vidět výstup jako tento:

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.

Otevřít složku projektu pomocí Finder a uvidíte CocoaPods vytvořil nový IceCreamShop.soubor xcworkspace a složka Pods pro uložení všech závislostí projektu.

poznámka: od této chvíle, jak bylo uvedeno varování příkazového řádku, musíte Projekt vždy otevřít pomocí .soubor xcworkspace a ne .xcodeproj. V opačném případě se setkáte s chybami sestavení.

výborně! Právě jste přidali svou první závislost pomocí CocoaPods!

pomocí nainstalovaných lusků

Nyní budete používat zcela novou závislost, Alamofire.

Pokud je projekt Xcode otevřený, zavřete jej a otevřete IceCreamShop.xcworkspace.

otevřete PickFlavorViewController.swift a přidejte následující těsně pod existující import:

import Alamofire

Build and run. Uvidíte zatím žádnou změnu, ale buďte si jisti, že Alamofire je nyní k dispozici.

první kompilace po integraci závislosti Alamofire

dále nahraďte loadFlavors() následujícím:

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

Tady je play-by-play, co se děje v tento kód:

  1. použití Alamofire vytvořit SI vyžádat a stáhnout plist obsahující příchutě zmrzliny.
  2. Chcete-li přerušit silný referenční cyklus, použijte slabý odkaz na self v bloku dokončení odpovědi. Jakmile se blok spustí, okamžitě získáte silný odkaz na self , takže na něm můžete později nastavit vlastnosti.
  3. dále ověříte response.result ukazuje úspěch a response.result.value je pole slovníků.
  4. Nyní můžete nastavit self.flavors do pole Flavor objekty, které FlavorFactory vytváří. Toto je třída, kterou pro vás napsal“ kolega “ (není zač!), který má řadu slovníků a používá je k vytvoření instancí Flavor.
  5. nakonec znovu načtete pohled kolekce a vyberete první příchuť.

sestavení a spuštění. Nyní si můžete vybrat příchuť zmrzliny!

vyberte příchuť

nyní pro chutnou polevu

aplikace vypadá dobře, ale stále ji můžete vylepšit.

všimli jste si, že aplikace trvá sekundu, než stáhne soubor flavors? Pokud máte rychlé připojení k Internetu, možná si zpoždění nevšimnete, ale vaši zákazníci nebudou mít vždy takové štěstí.

dalším krokem je ukázat indikátor načítání ve vaší aplikaci, který zákazníkům pomůže pochopit, že načítá data, a ne jen kroutit jeho knihovny. MBProgressHUD je opravdu pěkný ukazatel, který zde bude dobře fungovat. A podporuje CocoaPods; jaká náhoda! :]

Chcete-li použít tento pod, musíte jej přidat do svého Podfile. Spíše než otevření Podfile z příkazového řádku, můžete nyní najít v Lusky cíl v prostoru:

Lusky v Prostoru

Otevřít Podfile a přidejte následující, hned po Alamofire line:

pod 'MBProgressHUD', '~> 1.0'

Uložte soubor a nainstalovat závislosti přes modul nainstalovat v Terminálu, stejně jako jste to udělali předtím.

Všimli jste si tentokrát něčeho jiného? Ano, zadali jste číslo verze jako ~> 1.0. Ale proč?

CocoaPods doporučuje, aby všechny lusky používaly sémantické verze. Udělejte si chvilku, abyste pochopili, co to je.

sémantická verze

mnohokrát uvidíte verzi napsanou takto: 1.0.0. Tato tři čísla jsou hlavní, čísla menších a opravných verzí.

například pro číslo verze 1.0.0 je 1 Hlavní číslo, první 0 je vedlejší číslo a druhé 0 je číslo opravy.

příklad sémantické verze

Pokud se hlavní číslo zvýší, znamená to, že verze obsahuje změny, které nejsou zpětně kompatibilní. Když upgradujete modul na další hlavní verzi, možná budete muset opravit chyby sestavení nebo se modul může chovat jinak než dříve.

Pokud se menší číslo zvýší, znamená to, že verze obsahuje nové funkce, které jsou zpětně kompatibilní. Pokud se rozhodnete upgradovat, můžete nebo nemusíte potřebovat novou funkci, ale nemělo by to způsobit žádné chyby sestavení nebo změnit stávající chování.

Pokud se číslo opravy zvýší, znamená to, že nová verze obsahuje opravy chyb, ale žádné nové funkce nebo změny chování. Obecně, vždy chcete upgradovat verze oprav co nejdříve, abyste měli nejnovější, stabilní verze modulu.

A konečně, když zvýšíte číslo nejvyššího řádu-major, pak minor pak patch-podle výše uvedených pravidel, musíte resetovat všechna čísla nižšího řádu na nulu.

zde je příklad:

zvažte modul, který má aktuální číslo verze 1.2.3.

Pokud provedete změny, které nejsou zpětně kompatibilní, nemají nové funkce, ale opravit stávající chyby, dáš to verze 2.0.0.

Challenge Time

pokud má pod aktuální verzi 2.4.6 a provedete změny, které opravují chyby a přidávají zpětně kompatibilní funkce, jaké by mělo být nové číslo verze?

Odpověď: 2.5.0
Vysvětlení: Pokud provedete změny, které zahrnují nové funkce, které je zpětně kompatibilní, můžete zvýšit menší číslo a obnovit patch na nulu.

pokud má modul aktuální verzi 3.5.8 a provedete změny stávajících funkcí, které nejsou zpětně kompatibilní, jaké by mělo být číslo nové verze?

odpověď: 4.0.0
vysvětlení: Pokud změny změní stávající chování a nejsou zpětně kompatibilní, musíte zvýšit hlavní číslo a resetovat čísla minor a patch na nulu.

pokud má pod aktuální verzi 10.20.30 a opravujete pouze chyby, jaké by mělo být nové číslo verze?

odpověď: 10.20.31
vysvětlení: Pokud opravujete pouze chyby, zvýšíte pouze číslo opravy.

poté, co jsem to všechno řekl, existuje jedna výjimka z těchto pravidel:

Pokud je číslo verze pod menší než 1.0.0, považuje se to za beta verzi. Menší zvýšení počtu může zahrnovat změny, které nejsou zpětně kompatibilní.

Takže zpátky k MBProgressHUB: Pomocí ~> 1.0 znamená, že byste měli nainstalovat nejnovější verzi, která je větší než nebo rovno 1.0, ale méně než 2.0.

tím zajistíte, že máte nejnovější opravy chyb a funkce při instalaci tohoto modulu, ale nebudete náhodou vytáhnout zpětně nekompatibilní změny.

existuje několik dalších operátorů, které můžete také použít. Úplný seznam naleznete v odkazu na syntaxi Podfile.

Nyní, když jste se naučili, jak operátoři pracují s vašimi CocoaPods, je čas dokončit aplikaci.

zobrazení pokroku

Pokud si vzpomenete, stavěli jste indikátor pokroku, který uživatelům ukázal, kdy se příchutě načítají v aplikaci.

Chcete-li tuto funkci dokončit, přejděte zpět na PickFlavorViewController.poté přidejte následující pomocné metody poloadFlavors():

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

nyní vloadFlavors()přidejte následující dva řádky (jak je uvedeno):

 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 // ...

Jako metodu jména napovídají, showLoadingHUD() ukazuje příklad MBProgressHUD zatímco SE žádost stáhne. hideLoadingHUD() skryje HUD po dokončení požadavku. Protože showLoadingHUD() je mimo uzávěr, nepotřebuje prefix self.

sestavení a spuštění. Během načítání příchutí se nyní zobrazí indikátor načítání. Pokud vaše připojení k internetu je příliš rychlý na to, můžete přidat sleep(_:) prohlášení těsně před hideLoadingHUD() tak, že můžete zažít bohu, že je MBProgressHUD. :]

aplikace se symbolem načítání

skvělá práce! Zákazníci si nyní mohou vybrat svou oblíbenou příchuť zmrzliny a během stahování chutí vidí indikátor načítání.

kam jít odtud?

dokončený projekt si můžete stáhnout pomocí tlačítka Stáhnout materiály v horní nebo dolní části této stránky.

Gratulujeme! Nyní znáte základy používání CocoaPods, včetně vytváření a úpravy závislostí a porozumění sémantické verzi. Nyní jste připraveni začít používat ve svých vlastních projektech!

je toho mnohem víc, co můžete udělat s CocoaPods. Existující lusky můžete hledat na oficiálním webu CocoaPods. Podívejte se také na Průvodce CocoaPods, abyste se dozvěděli jemnější podrobnosti o tomto vynikajícím nástroji. Ale pozor, jakmile začnete používat, budete se divit, jak jste někdy podařilo bez něj! :]

doufám, že se vám líbilo čtení tohoto tutoriálu CocoaPods stejně jako psaní. Jaké jsou některé z vašich oblíbených CocoaPods? Na které z nich se při každodenních projektech nejvíce spoléháte? Neváhejte se podělit, nebo klást jakékoli dotazy, v komentářích níže!

raywenderlich.com Týdenní

raywenderlich.com newsletter je nejjednodušší způsob, jak zůstat up-to-date na vše, co potřebujete vědět jako mobilní vývojáře.

Získejte týdenní přehled našich výukových programů a kurzů a získejte bezplatný podrobný e-mailový kurz jako bonus!

Průměrné hodnocení

4.8/5

Přidat hodnocení pro tento obsah

přihlaste se pro přidání hodnocení

33 hodnocení

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.