De fleste av oss bruker åpen kildebibliotek på daglig basis. Med CocoaPods er administrerende avhengigheter i et kakao-prosjekt nesten smertelig. I enkelte tilfeller er et prosjekt imidlertid avhengig av et bibliotek eller rammeverk som er lukket kilde, ikke offentlig tilgjengelig. Du kan fortsatt bruke CocoaPods i slike situasjoner. CocoaPods fungerer bra for både lukkede og åpne kildebiblioteker.
For å gjøre dette arbeidet må du opprette et privat spesifikasjonsregister. Når du har satt opp, merker du ikke en gang forskjellen mellom offentlige og private avhengigheter, fordi CocoaPods tar vare på de nitty gritty detaljene for deg. I denne opplæringen lærer du hvordan du konfigurerer et privat spesifikasjonsregister for å administrere private biblioteker.
Hvis du bare har brukt CocoaPods for å administrere offentlige pods, kan du ikke vite at CocoaPods kan håndtere flere spesifikke arkiver. Hvis ingen spesifikasjoner er oppgitt i prosjektets Podfile, CocoaPods faller tilbake til mastergodsregisteret.
Hvis du angir en avhengighet i prosjektet ditt Podfile, KakaoPods søker som standard i Masterspesifikasjonsarkivet. Ta en titt på følgende to eksempler. Begge eksemplene gir samme resultat. Forskjellen er at vi spesifikt spesifiserer kilden til spesifikasjonsregisteret i det andre Podfile.
plattform: IOS, '8.0' mål 'Testing' do pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' ende
kilde 'https://github.com/CocoaPods/Specs.git' plattform: IOS, '8.0' mål 'Testing' do pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1'-enden
Hvis du aldri har opprettet eller bidratt til en pod, kan du kanskje lure på hva et spesifikasjonsregister er? Et spesifikasjonsregister er ikke noe mer enn et lager som inneholder en samling av podspesifikasjoner, filer med en .podspec eller .podspec.json forlengelse.
Som navnet antyder, inneholder spesifikasjonsarkivet ikke kildefilene for podene. Du kan bla gjennom CocoaPods hovedspesifikasjonsregister på GitHub. Hvis CocoaPods er installert på maskinen din, er det imidlertid en kopi av mastergodsregisteret som allerede er til stede på maskinen din.
Under installasjonsprosessen klones CocoaPods mesterspesifikasjonsarkivet til hjemmemappen. Du kan finne den på ~ / .Cocoapods / repos / herre.
Jeg bruker vanligvis GitHub til hosting Git repositories, så det er plattformen jeg skal bruke for denne opplæringen. Det spiller ingen rolle hvor du er vert for spesifikasjonsregisteret så lenge det er tilgjengelig for alle i teamet ditt.
Du kan opprette en gratis GitHub-konto for å følge med, men husk at du bare kan opprette offentlige arkiver med en gratis konto. Hvis du har et bibliotek som du vil åpne kilde, anbefales det å publisere pod-spesifikasjonen til master-spesifikasjonsarkivet, som administreres av CocoaPods-teamet. Du oppnår ikke noe ved å opprette et eget offentligregnskapsregister.
Det første vi må gjøre er å opprette et privat lager på GitHub for private spesifikasjoner som vi skal legge til senere. Jeg har kalt min tutspods. GitHub vil foreslå å klone lageret til maskinen, men det er ikke nødvendig. CocoaPods vil klone spesifikasjonsarkivet for deg når du har lagt den til CocoaPods. Det er det vi skal gjøre i neste trinn.
Det neste trinnet er å fortelle CocoaPods om spesifikasjonsarkivet vi nettopp har laget. Du gjør dette ved å utføre følgende kommando fra kommandolinjen.
pod repo legg til tutspods https://github.com/bartjacobs/tutspods.git
Du kan merke at kommandoen ligner på å legge til en fjernkontroll til et Git-lager. Sørg for at du husker navnet du gir spesifikasjonsregisteret, tutspods i dette tilfellet. Vi trenger det litt senere.
Når du legger til et spesifikasjonsregister, klipper CocoaPods lagringsplassen til maskinen. Du kan bekrefte dette ved å navigere til ~ / .Cocoapods / depot. Kataloget skal nå inneholde to spesifikke lagre, herre spesifikasjoner repository og tutspods spesifikasjoner depot. Bortsett fra a .git mappe, tutspods katalogen er tom siden vi ikke har lagt til noen spesifikasjoner enda.
Ikke for lenge siden skrev Andy Obusek en flott opplæring om å lage din første pod. Hvis du aldri har opprettet en pod-offentlig eller privat-så anbefaler jeg at du leser Andy's artikkel først. Jeg vil ikke gjenta hva Andy skrev i denne opplæringen.
Som et eksempel har jeg laget et lite bibliotek, TSPTableView, som inneholder en spesiell UITableView
underklasse. For å lage en pod-spesifikasjon for biblioteket, kjør følgende kommando i roten av biblioteket.
pod lage spesifikke TSPTableView
Ved å kjøre kommandoen ovenfor oppretter CocoaPods en fil som heter TSPTableView.podspec. Åpne filen i et tekstredigeringsprogram og fyll ut de nødvendige feltene. Når du er ferdig, løp pod spec lint
for å validere podspesifikasjonen. Hvis pod-spesifikasjonen ikke bestått validering, vil du ikke kunne skyve spesifikasjonen til spesifikasjonsarkivet.
Hvis pod-spesifikasjonen passerer validering, er det på tide å skyve den til det private spesifikasjonsregisteret du opprettet tidligere. Du gjør dette ved å utføre følgende kommando fra kommandolinjen.
pod repo push tutspods TSPTableView.podspec
Det er nøkkelen at du bruker det samme navnet du tidligere brukte til å legge til privatspesifikasjonsregisteret til CocoaPods. Det siste argumentet er veien til pod-spesifikasjonen du presser til spesifikasjonsarkivet.
Vi kan nå bruke TSPTableView i et nytt prosjekt. Opprett et prosjekt i Xcode og legg til en Podfile ved roten til prosjektet ved å løpe pod init
fra kommandolinjen. Dette er hva Podfile kan se ut når du er ferdig.
plattform: IOS, '8.0' mål 'MyAmazingApp' do pod 'TSPView' slutten
Løpe pod installasjon
fra kommandolinjen for å installere avhengighetene som er oppført i prosjektets Podfile. Ble du også i et problem? Jeg ser følgende feil.
pod installere Oppdatering av lokale spesifikasjoner repositorier Analyser avhengigheter [!] Kan ikke finne en spesifikasjon for 'TSPTableView'
Utgangen forteller oss at CocoaPods først oppdaterer de lokale spesifikasjonsregistrene. Dette betyr at lagrene i ~ / .Cocoapods / depot katalogen er oppdatert, trekker i eventuelle endringer.
CocoaPods gjør dette for å sikre at den har den nyeste versjonen av spesifikasjonene som er lagret i lageret. Hvis vi tar en titt på ~ / .Cocoapods / repos / tutspods katalog, vi kan se at pod spec for TSPTableView pod er der som vi forventet. Hvorfor kan ikke CocoaPods finne pod-spesifikasjonen for TSPTableView?
Løsningen er enkel. På toppen av Podfile, Vi må spesifisere hvilke spesifikasjoner repositories CocoaPods søker for å løse avhengighetene som er oppført i prosjektets Podfile. Dette er hva Podfile bør se ut som å løse problemet vårt.
kilde 'https://github.com/bartjacobs/tutspods.git' kilde 'https://github.com/CocoaPods/Specs.git' plattform: IOS, '8.0' mål 'MyAmazingApp' do pod 'TSPTableView' slutten
Løpe pod installasjon
en gang til å installere avhengighetene som er oppført i prosjektets Podfile. Kommandoen bør nå fullføres vellykket som vist nedenfor. Jeg bruker for tiden CocoaPods 0.38.2 slik at produksjonen kan være litt annerledes hvis du bruker en annen versjon av kakao.
pod installere Oppdatere lokale spesifikasjoner lagre Analysere avhengigheter Nedlasting av avhengigheter Installere TSPTableView (0.0.1) Generere Pods prosjekt Integrere klient prosjekt [!] Vennligst lukk noen nåværende Xcode økter og bruk 'MyAmazingApp.xcworkspace' for dette prosjektet fra nå av.
Legg merke til at rekkefølgen der du legger inn spesifikasjonsregisterene i Podfile er viktig. For eksempel, hvis du har forked en offentlig pod, endret den og opprettet en privat pod for gaffelen med samme navn, vil du få en navngivningskollisjon.
Dette er ikke et problem for CocoaPods, fordi det vil bruke den første podsen den kan finne med det angitte navnet. Generelt sett bør du sette det private spesifikasjonsregisteret øverst for å sikre at CocoaPods søker den første og faller tilbake til det offentlige spesifikasjonsregisteret om nødvendig.
CocoaPods er et flott verktøy som jeg ikke ville kunne jobbe uten. Jeg håper denne opplæringen har vist deg hvor kraftig CocoaPods er og hvor lett det er å lage og administrere private pods med CocoaPods.