a CocoaPods a Swift és Objective-C Kakaóprojektek népszerű függőségi menedzsere. A CocoaPods honlapja szerint könyvtárak ezrei és alkalmazások milliói használják. De mi az a függőségi menedzser, és miért van szüksége rá?
a függőségkezelő megkönnyíti az alkalmazás által használt harmadik féltől származó függőségek hozzáadását, eltávolítását, frissítését és kezelését.
például ahelyett, hogy újra feltalálná saját hálózati könyvtárát, könnyen behúzhatja az Alamofire-t egy függőségkezelő segítségével. Megadhatja a használni kívánt pontos verziót vagy egy sor elfogadható verziót.
Ez azt jelenti, hogy még akkor is, ha az Alamofire frissítést kap olyan módosításokkal, amelyek nem kompatibilisek visszafelé, az alkalmazás továbbra is használhatja a régebbi verziót, amíg készen áll a frissítésre.
ebben az oktatóanyagban megtudhatja, hogyan kell használni a CocoaPods-ot a Swift-rel. Pontosabban, akkor:
- telepíteni CocoaPods.
- dolgozzon egy funkcionális demo alkalmazással, amely a fagylaltra gondol.
- használja a CocoaPods-ot a hálózat hozzáadásához.
- Tudjon meg többet a szemantikus verzióról.
- adjon hozzá egy másik könyvtárat egy rugalmas verzió használatával.
Ez az oktatóanyag olyan osztályokat is tartalmaz, amelyek Alapgrafikát használnak. Bár az alapvető grafika ismerete előnyös, nem szükséges. Ha szeretne többet megtudni, olvassa el a modern Core grafika Swift sorozat.
- első lépések
- Fagylaltbolt, Inc.
- az első függőség telepítése
- egy szó a könyvtárakról
- vissza az első függőség telepítéséhez
- A telepített hüvelyek
- most egy ízletes feltöltéshez
- szemantikus verziószámozás
- kihívás ideje
- haladás megjelenítése
- Hová menjünk innen?
- raywenderlich.com Heti
- átlagos értékelés
- értékelés hozzáadása ehhez a tartalomhoz
első lépések
töltse le a kezdő projektet az oktatóanyag tetején vagy alján található anyagok letöltése gombra kattintva.
az oktatóanyag során egy Ice Cream Shop, Inc nevű alkalmazással fog dolgozni. A CocoaPods segítségével függőségeket adhat hozzá az alkalmazáshoz a saját írása helyett.
mielőtt folytatná ezt az oktatóanyagot, telepítenie kell a CocoaPods alkalmazást. Szerencsére a CocoaPods a Ruby-t használja, amely a 10.7-es verzió óta szállítja a macOS X összes verzióját.
nyissa meg a terminált, és írja be a következő parancsot:
sudo gem install cocoapods
adja meg jelszavát, amikor kéri. A terminál kimenete különböző lekérési, telepítési és dokumentációval kapcsolatos kimeneteket jelenít meg, amelyek “XX gems installed” – vel zárulnak.
sudo
elemet kell használnia, de a telepítés után nem kell újra használni ebben az oktatóanyagban.végül írja be ezt a parancsot a terminálba a telepítés befejezéséhez:
pod setup --verbose
Ez a folyamat néhány percet vesz igénybe, mert klónozza a CocoaPods Master specifikációs adattárat ~/ – be.cocoapods / a számítógépen.
a verbose
opció naplózza a folyamat futását, lehetővé téve a folyamat megtekintését a látszólag” fagyott ” képernyő helyett.
félelmetes, most be van állítva a CocoaPods használatára!
Fagylaltbolt, Inc.
a legjobb ügyfél Ice Cream Shop, Inc. Fagylaltjuk annyira népszerű, hogy nem tudnak lépést tartani az ügyfelek megrendeléseivel a pultnál. Ők már toborzott, hogy hozzon létre egy karcsú iOS app, amely lehetővé teszi az ügyfelek számára, hogy rendelni fagylalt közvetlenül a saját iPhone.
elkezdte fejleszteni az alkalmazást, és jól halad. Vessen egy pillantást az előrehaladásra az IceCreamShop megnyitásával.xcodeproj, majd épület és futás. Látni fog egy ínycsiklandó vanília fagylalt kúp:
a felhasználónak képesnek kell lennie arra, hogy válasszon egy fagylalt ízét ezen a képernyőn, de ez még nem lehetséges. Az első lépés ennek a funkciónak a megvalósítása.
a fő megnyitása.storyboard a nézetek / Storyboards & Nibs csoport, hogy az alkalmazás elrendezését. Itt van egy gyors áttekintés az alkalmazás szívéről, a Válassza ki az ízét jelenet:
-
PickFlavorViewController
a jelenet nézetvezérlője. Ez kezeli a felhasználói interakció, és biztosítja az adatokat a gyűjtemény nézet, amely megjeleníti a különböző fagylalt ízek. -
IceCreamView
egy egyéni nézet, amely megjeleníti a fagylaltkúpot a háttér mód alapján,Flavor
. -
ScoopCell
egy egyéni gyűjtemény nézet cella, amely tartalmaz egyScoopView
, amely színeket kap aFlavor
modell.
míg minden Fagylaltbolt, Inc. a helyszín közös ízekkel rendelkezik, mindegyik saját helyi ízeket hordoz, is. Ezért egy webszolgáltatásnak meg kell adnia a Flavor
s adatait.
Ez azonban még mindig nem magyarázza meg, hogy a felhasználók miért nem tudják kiválasztani a fagylalt ízeiket.
nyissa meg a Pickflavorviewcontrollert.swift, a vezérlők csoport alatt található, és megjelenik egy stubbed módszer:
private func loadFlavors() { // TO-DO: Implement this}
Aha, nincsenek ízek! Végre kell hajtania a funkciót!
bár használhatod a URLSession
és írhatod a saját hálózati osztályaidat, van egy egyszerűbb módszer: használd az Alamofire-t!
lehet, hogy a kísértés, hogy töltse le ezt a könyvtárat, és húzza a forrás fájlokat közvetlenül a projekt. Ez azonban a nehezebb utat választaná. A CocoaPods sokkal elegánsabb és fürge megoldást kínál.
az első függőség telepítése
az első lépés az Xcode bezárása. Igen, jól olvastad.
itt az ideje, hogy létrehozza a Podfile-t, ahol meghatározza a projekt függőségeit.
nyissa meg a terminált, és keresse meg az IceCreamShop projektet tartalmazó könyvtárat a cd paranccsal:
cd ~/Path/To/Folder/Containing/IceCreamShop
Ezután írja be a következő parancsot:
pod init
Ez létrehoz egy Podfilét a projekthez.
végül írja be a következő parancsot a Podfile megnyitásához az Xcode használatával szerkesztésre:
open -a Xcode Podfile
Az alapértelmezett Podfile így néz ki:
# 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
törölje a #
és a platform
előtti helyet, majd törölje a #
kezdő sorokat.
a Podfilének most így kell kinéznie:
platform :ios, '9.0'target 'IceCreamShop' do use_frameworks!end
Ez azt mondja a CocoaPods-nak, hogy a projekt az iOS 9.0-t célozza meg, és statikus könyvtárak helyett keretrendszereket fog használni. Míg a Swift és a CocoaPods egyaránt támogatja a statikus összekapcsolást, nem minden könyvtár működik. Az egyik közülük, hogy akkor használja ezt a projektet nem.
Ha csak Swift-ben programozott, ez kissé furcsának tűnhet. Ez azért van, mert a Podfile valójában Ruby-ban van írva. A CocoaPods használatához nem kell ismernie a Ruby-t, de tisztában kell lennie azzal, hogy még a kisebb szöveges hibák miatt a CocoaPods hibákat dob.
egy szó a könyvtárakról
látni fogja a könyvtár kifejezést, amelyet gyakran általános kifejezésként használnak, amely valójában könyvtárat vagy keretet jelent. Ez az oktatóanyag bűnös abban, hogy ezeket a szavakat véletlenül összekeveri, is.
lehet, hogy kíváncsi a könyvtár, a keretrendszer és a CocoaPod közötti különbségekre. Nem baj, ha kissé zavarónak találja a terminológiát!
a CocoaPod vagy röviden pod egy általános kifejezés egy könyvtárra vagy keretrendszerre, amelyet a CocoaPods segítségével adnak hozzá a projekthez.
az iOS 8 bevezette a dinamikus keretrendszereket, amelyek lehetővé teszik a kód, képek és egyéb eszközök összekapcsolását. Az iOS 8 előtt létrehozta a Cocoapod-okat “kövér” statikus könyvtárakként. A ” Fat ” azt jelenti, hogy több kód utasításkészletet tartalmaztak, mint például az i386 a szimulátorhoz, az armv7 az eszközökhöz stb. A Swift azonban nem engedélyezi a statikus könyvtárak számára, hogy erőforrásokat, például képeket vagy eszközöket tartalmazzanak.
vissza az első függőség telepítéséhez
végre ideje hozzáadni az első függőséget a CocoaPods használatával. Adja hozzá a következőket A Podfiléhez, közvetlenül a use_frameworks!
után:
pod 'Alamofire', '4.9.1'
Ez megmondja a CocoaPods-nak, hogy az Alamofire 4.9.1-es verzióját a projekt függőségeként szeretné felvenni.
mentse és zárja be a Podfilét.
most meg kell mondania a CocoaPods-nak, hogy telepítse a projekt függőségeit.
írja be a következő parancsot a terminálba, miután megbizonyosodott arról, hogy továbbra is az IceCreamShop projektet és a Podfile fájlt tartalmazó könyvtárban van:
pod install
a következő kimenetet kell látnia:
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.
nyissa meg a projekt mappát a Finder segítségével, és látni fogja, hogy a CocoaPods létrehozott egy új Icecreamshopot.xcworkspace fájl és egy Pods mappa a projekt összes függőségének tárolására.
kiváló! Most adta hozzá az első függőségét a CocoaPods használatával!
A telepített hüvelyek
most, akkor használja a vadonatúj függőség, Alamofire.
Ha az Xcode projekt nyitva van, zárja be most, és nyissa meg az IceCreamShop programot.xcworkspace.
nyissa meg a Pickflavorviewcontrollert.swift és adja hozzá a következőket közvetlenül a meglévő Importálás alá:
import Alamofire
Build and run. Még nem lát változást, de biztos lehet benne, hogy az Alamofire már elérhető.
ezután cserélje le a loadFlavors()
elemet a következő:
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() } }
itt a play-by-play, hogy mi történik ebben a kódban:
- használja Alamofire létrehozni egy GET kérelmet, és töltse le a plist tartalmazó fagylalt ízek.
- erős referenciaciklus megszakításához gyenge hivatkozást használ a
self
hivatkozásra a válasz befejezése blokkban. A blokk végrehajtása után azonnal erős hivatkozást kap aself
– re, így később beállíthatja a tulajdonságokat. - Ezután ellenőrizze, hogy a
response.result
megmutatja-e a sikert, aresponse.result.value
pedig egy sor szótár. - most a
self.flavors
aFlavor
objektumok tömbjére állítja be, amelyeket aFlavorFactory
hoz létre. Ez egy osztály a “kolléga” írt neked (szívesen!), amely egy sor szótárat használ aFlavor
példányainak létrehozásához. - végül újratölti a gyűjtemény nézetet, és kiválasztja az első ízt.
Építsd és futtasd. Most választhat egy fagylalt ízét!
most egy ízletes feltöltéshez
az alkalmazás jól néz ki, de még mindig javíthatja.
észrevetted, hogy az alkalmazás egy másodpercet vesz igénybe az ízek fájl letöltéséhez? Ha gyors internetkapcsolattal rendelkezik, előfordulhat, hogy nem veszi észre a késést, de ügyfelei nem mindig lesznek ilyen szerencsések.
a következő lépés egy betöltési mutató megjelenítése az alkalmazásban, hogy segítsen az ügyfeleknek megérteni az adatok betöltését, és nem csak a könyvtárakat. Az MBProgressHUD egy nagyon szép mutató, amely itt jól fog működni. Támogatja a Cocoapodokat; micsoda véletlen! :]
a pod használatához hozzá kell adnia a Podfiléhez. Ahelyett, hogy a parancssorból megnyitná a Podfájlt, Most megtalálhatja a munkaterület Pods céljában:
nyissa meg a Podfile fájlt, és adja hozzá a következőket, közvetlenül az Alamofire sor után:
pod 'MBProgressHUD', '~> 1.0'
mentse el a fájlt, és telepítse a függőségeket a Pod install in Terminal segítségével, ahogy korábban is tetted.
észrevesz valami mást ebben az időben? Igen, a verziószámot ~> 1.0 néven adta meg. De miért?
a CocoaPods azt javasolja, hogy minden Hüvely használjon szemantikai verziót. Szánjon egy percet arra, hogy megértse, mi az.
szemantikus verziószámozás
sokszor megjelenik egy ilyen Verzió: 1.0.0. Ez a három szám major, minor és patch Verziószám.
például az 1.0.0 verziószámnál az 1 A fő szám, az első 0 a kisebb szám, a második 0 pedig a javítás száma.
Ha a fő szám növekszik, azt jelzi, hogy a verzió nem visszafelé kompatibilis változásokat tartalmaz. Amikor egy pod-ot a következő nagyobb verzióra frissít, előfordulhat, hogy javítania kell az építési hibákat, vagy a pod másképp viselkedhet, mint korábban.
ha a kisebb szám növekszik, az azt jelzi, hogy a verzió új, visszafelé kompatibilis funkciókat tartalmaz. Ha úgy dönt, hogy frissíti, akkor lehet, hogy nincs szüksége az új funkcióra, de nem okozhat építési hibákat, vagy nem változtathatja meg a meglévő viselkedést.
ha a javítás száma növekszik, ez azt jelenti, hogy az új verzió hibajavításokat tartalmaz, de nem változik új funkció vagy viselkedés. Általában mindig a lehető leghamarabb frissíteni szeretné a patch verziókat, hogy a pod legújabb, stabil verziója legyen.
végül, ha növeli a legmagasabb rendű számot-major, majd minor, majd patch-a fenti szabályok szerint, vissza kell állítania az alacsonyabb rendű számokat nullára.
íme egy példa:
Vegyünk egy pod-ot, amelynek jelenlegi verziószáma 1.2.3.
Ha olyan változtatásokat hajt végre, amelyek nem kompatibilisek visszafelé, nem rendelkeznek új funkciókkal, de javítják a meglévő hibákat, akkor a 2.0.0 verziót adja meg.
kihívás ideje
Ha a pod aktuális verziója 2.4.6 és olyan változtatásokat hajt végre, amelyek kijavítják a hibákat és hozzáadják a visszafelé kompatibilis funkciókat, mi legyen az új Verziószám?
válasz: 2.5.0
magyarázat: Ha olyan változtatásokat hajt végre, amelyek új, visszafelé kompatibilis funkciókat tartalmaznak, növeli a kisebb számot, és nullára állítja a javítást.
Ha egy pod jelenlegi 3.5.8-as verziója van, és a meglévő funkciókat módosítja, amelyek nem kompatibilisek visszafelé, mi legyen az új Verziószám?
válasz: 4.0.0
magyarázat: Ha a módosítások módosítják a meglévő viselkedést, és nem kompatibilisek visszafelé, akkor növelnie kell a főszámot, és nullára kell állítania a kisebb és patch számokat.
Ha egy pod jelenlegi verziója 10.20.30, és csak hibákat javít, mi legyen az új Verziószám?
válasz: 10.20.31
magyarázat: Ha csak a hibákat javítja, akkor csak növeli a javítás számát.
Mindezek után egy kivétel van a szabályok alól:
Ha egy pod verziószáma kevesebb, mint 1.0.0, akkor béta verziónak számít. A kisebb számú növekedés olyan változásokat is tartalmazhat, amelyek nem kompatibilisek visszafelé.
tehát vissza az MBProgressHUB-hoz: a ~> 1.0
használata azt jelenti, hogy a legújabb verziót kell telepítenie, amely nagyobb vagy egyenlő, mint 1.0
, de kevesebb, mint 2.0
.
Ez biztosítja, hogy a pod telepítésekor megkapja a legújabb hibajavításokat és funkciókat, de nem véletlenül húzza be a visszafelé nem kompatibilis módosításokat.
számos más operátor is használható. A teljes listát lásd a Podfile szintaxis referencia.
most, hogy megtanulta, hogyan működnek az operátorok a Cocoapodokkal, itt az ideje befejezni az alkalmazást.
haladás megjelenítése
Ha emlékszel, akkor egy előrehaladási mutatót építettél, amely megmutatja a felhasználóknak, amikor az ízek betöltődnek az alkalmazásban.
a funkció befejezéséhez térjen vissza a PickFlavorViewController oldalra.ezután adja hozzá a következő segítő módszereket
import MBProgressHUD
ezután adja hozzá a következő segítő módszereketloadFlavors()
:
private func showLoadingHUD() { let hud = MBProgressHUD.showAdded(to: contentView, animated: true) hud.label.text = "Loading..."}private func hideLoadingHUD() { MBProgressHUD.hide(for: contentView, animated: true)}
most, aloadFlavors()
, adja hozzá a következő két sort (a jelzett módon):
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 // ...
ahogy a metódus neve is sugallja, showLoadingHUD()
a MBProgressHUD
egy példányát mutatja a GET kérés letöltésekor. hideLoadingHUD()
elrejti a HUD-t, amikor a kérés befejeződik. Mivel a showLoadingHUD()
a lezáráson kívül van, nincs szüksége a self
előtagra.
felépítés és futtatás. Most megjelenik egy betöltési jelző, amíg az ízek betöltődnek. Ha az internetkapcsolat túl gyors ehhez, hozzáadhat egy sleep(_:)
utasítást közvetlenül a hideLoadingHUD()
előtt, hogy megtapasztalhassa az MBProgressHUD jóságát. :]
nagyszerű munka! Az ügyfelek most kiválaszthatják kedvenc fagylalt ízüket, és látják a betöltési mutatót, miközben az ízek letöltődnek.
Hová menjünk innen?
az elkészült projektet az oldal tetején vagy alján található anyagok letöltése gombbal töltheti le.
gratulálok! Most már ismeri a CocoaPods használatának alapjait, beleértve a függőségek létrehozását és módosítását, valamint a szemantikai verziók megértését. Most már készen áll arra, hogy saját projektjeiben használja őket!
van még sok más, amit tehetünk CocoaPods. A meglévő hüvelyeket a CocoaPods hivatalos webhelyén keresheti. Olvassa el a CocoaPods útmutatókat is, hogy megismerje ennek a kiváló eszköznek a finomabb részleteit. De figyelmeztetni kell, ha egyszer elkezdi használni, akkor csoda, hogy valaha is sikerült nélküle! :]
remélem tetszett olvasni ezt CocoaPods bemutató, mint én írtam. Melyek a kedvenc CocoaPods? Melyekre támaszkodsz a legjobban a mindennapi projektekben? Nyugodtan ossza meg, vagy bármilyen kérdést feltenni, az alábbi megjegyzésekben!
raywenderlich.com Heti
a raywenderlich.com a hírlevél a legegyszerűbb módja annak, hogy naprakész maradjon mindenről, amit mobil fejlesztőként tudnia kell.
szerezzen heti összefoglalót oktatóanyagainkról és tanfolyamainkról, és bónuszként kapjon egy ingyenes, mélyreható e-mail tanfolyamot!
átlagos értékelés
4.8/5
értékelés hozzáadása ehhez a tartalomhoz
bejelentkezés értékelés hozzáadásához