De flesta av oss använder dagligen öppen källkatalog. Med CocoaPods är hanteringsberoende i ett kakaoprojekt nästan smärtfritt. I vissa situationer beror dock ett projekt på ett bibliotek eller ramverk som är sluten källa, inte offentligt tillgänglig. Du kan fortfarande använda CocoaPods i sådana situationer. CocoaPods fungerar bra för både slutna och öppna källbibliotek.
För att göra detta arbete måste du skapa en privat specs repository. När du har ställt upp en gång märker du inte ens skillnaden mellan offentliga och privata beroende eftersom CocoaPods tar hand om de nitty gritty detaljerna för dig. I den här handledningen lär du dig hur du konfigurerar en privat specifikation för att hantera privata bibliotek.
Om du bara har använt CocoaPods för att hantera offentliga pods, kanske du inte vet att CocoaPods kan hantera flera specs-arkiv. Om ingen specifikation förvaras anges i projektets Podfile, CocoaPods faller tillbaka till mästerverkets förråd.
Om du anger ett beroende i ditt projekt Podfile, CocoaPods söker som standard i masterns specs repository. Ta en titt på följande två exempel. Båda exemplen ger samma resultat. Skillnaden är att vi explicit anger källan till specsförvaret i det andra Podfile.
plattform: IOS, '8.0' mål 'Testing' gör pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' slutet
källa 'https://github.com/CocoaPods/Specs.git' plattform: IOS, '8.0' mål 'Testing' gör pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' slutet
Om du aldrig har skapat eller bidragit till en pod, kanske du undrar vad en specs repository är? Ett specifikationsförråd är inget annat än ett förråd som innehåller en samling podspecifikationer, filer med en .podspec eller .podspec.json förlängning.
Som namnet antyder innehåller inte specifikationerna källfilerna för podarna. Du kan bläddra i CocoaPods masterspecs-arkiv på GitHub. Om CocoaPods är installerade på din dator, finns det emellertid redan en kopia av masterspecialförvaret på din maskin.
Under installationsprocessen klonar CocoaPods huvudspecifikationsförvaret till din hemmapp. Du kan hitta den på ~ / .Cocoapods / repor / master.
Jag brukar använda GitHub för att vara värd för Git repositories så det är plattformen jag ska använda för denna handledning. Det spelar ingen roll vart du är värd för specs-förvaret så länge det är tillgängligt för alla på ditt lag.
Du kan skapa ett gratis GitHub-konto för att följa med, men kom ihåg att du bara kan skapa offentliga repositories med ett gratis konto. Om du har ett bibliotek som du vill öppna källan rekommenderas det att publicera podspecifikationen till masterkravets arkiv, som hanteras av CocoaPods-teamet. Du kan inte vinna något genom att skapa ett separat publikationsregister.
Det första vi behöver göra är att skapa ett privat repository på GitHub för de privata specifikationer som vi ska lägga till senare. Jag har namngivit min tutspods. GitHub kommer att föreslå att klonera förvaret till din maskin, men det är inte nödvändigt. CocoaPods kommer att klona specs repository för dig när du har lagt till det på CocoaPods. Det är vad vi ska göra i nästa steg.
Nästa steg är att berätta CocoaPods om specs-förvaret som vi just skapat. Du gör detta genom att utföra följande kommando från kommandoraden.
pod repo lägg till tutspods https://github.com/bartjacobs/tutspods.git
Du kanske märker att kommandot liknar att lägga till en fjärrkontroll till ett Git-arkiv. Se till att du kommer ihåg det namn du ger specs-förvaret, tutspods I detta fall. Vi behöver det lite senare.
När du lägger till ett specs-arkiv klonar CocoaPods förvaret till din maskin. Du kan verifiera detta genom att navigera till ~ / .Cocoapods / repor. Katalogen ska nu innehålla två specifikationer, den bemästra specs repository och the tutspods specs repository. Bortsett från a .git mapp, tutspods katalogen är tom eftersom vi inte har lagt till några specifikationer än.
Inte för länge sedan skrev Andy Obusek en bra handledning om att skapa din första pod. Om du aldrig har skapat en pod-public eller privat-så rekommenderar jag att du läser Andy's artikel först. Jag kommer inte att upprepa vad Andy skrev i denna handledning.
Som ett exempel har jag skapat ett litet bibliotek, TSPTableView, som innehåller en speciell UITableView
underklass. För att skapa en podspecifikation för biblioteket, kör följande kommando i biblioteksroten.
pod skapar spec TSPTableView
Genom att köra ovanstående kommando skapar CocoaPods en fil som heter TSPTableView.podspec. Öppna filen i en textredigerare och fyll i de obligatoriska fälten. När du är klar kör du pod spec lint
att validera podspecifikationen Om podspecifikationen inte passerar validering kommer du inte att kunna trycka specifikationen till specs-förvaret.
Om podspecifikationen passerar validering är det dags att trycka det på det privata specifikationerna du skapade tidigare. Du gör detta genom att utföra följande kommando från kommandoraden.
pod repo push tutspods TSPTableView.podspec
Det är nyckeln att du använder samma namn som du tidigare använde för att lägga till privata specifikationer för CocoaPods. Det sista argumentet är vägen till podspecifiken du trycker på specs-förvaret.
Vi kan nu använda TSPTableView i ett nytt projekt. Skapa ett projekt i Xcode och lägg till ett Podfile i roten av projektet genom att springa pod init
från kommandoraden. Det här är vad Podfile kan se ut när du är klar.
plattform: IOS, '8.0' mål 'MyAmazingApp' do pod 'TSPView' slut
Springa pod installera
från kommandoraden för att installera beroenden som anges i projektets Podfile. Har du också stött på ett problem? Jag ser följande fel.
pod installera Uppdatera lokala specifikationer repositories Analysera beroenden [!] Kan inte hitta en specifikation för 'TSPTableView'
Utgången berättar att CocoaPods först uppdaterar de lokala specifikationerna. Det innebär att förvaret i ~ / .Cocoapods / repor katalogen uppdateras, drar i några ändringar.
CocoaPods gör detta för att säkerställa att den har den senaste versionen av specifikationerna som lagras i förvaret. Om vi tittar på ~ / .Cocoapods / repor / tutspods katalog, vi kan se att pod spec för TSPTableView pod är där som vi förväntade oss. Varför kan inte CocoaPods hitta podspecifikationen för TSPTableView?
Lösningen är enkel. På toppen av Podfile, Vi måste ange vilka specifikationer som repositories CocoaPods söker för att lösa de beroendeområden som anges i projektets Podfile. Det här är vad Podfile bör se ut att åtgärda vårt problem.
källa 'https://github.com/bartjacobs/tutspods.git' source 'https://github.com/CocoaPods/Specs.git' plattform: IOS, '8.0' mål 'MyAmazingApp' do pod 'TSPTableView' slutet
Springa pod installera
ytterligare en gång för att installera de beroenden som anges i projektets Podfile. Kommandot ska nu slutföras framgångsrikt enligt nedan. Jag använder för närvarande CocoaPods 0.38.2 så utsignalen kan vara lite annorlunda om du använder en annan version av kakaopoder.
pod installera Uppdatera lokala specifikationer repositorier Analysera beroenden Nedladdning av beroenden Installera TSPTableView (0.0.1) Generera Pods-projekt Integrera klientprojekt [!] Vänligen stäng alla nuvarande Xcode-sessioner och använd 'MyAmazingApp.xcworkspace' för det här projektet från och med nu.
Observera att den ordning i vilken du listar specifikationerna i Podfile är viktigt. Om du till exempel har forked en offentlig pod, ändrat den och skapat en privat pod för gaffeln med samma namn kommer du att ha en namngivningskollision.
Detta är inte ett problem för CocoaPods, eftersom det kommer att använda den första pod som den kan hitta med det angivna namnet. I allmänhet borde du lägga privata repository överst för att se till att CocoaPods söker den där först och faller tillbaka till public specs repository om det behövs.
CocoaPods är ett bra verktyg som jag inte skulle kunna arbeta utan. Jag hoppas att denna handledning har visat dig hur kraftfulla CocoaPods är och hur lätt det är att skapa och hantera privata podar med kakaoPods.