De meesten van ons gebruiken dagelijks open source-bibliotheken. Met CocoaPods is het beheren van afhankelijkheden in een Cocoa-project vrijwel pijnloos. In sommige situaties is een project echter afhankelijk van een bibliotheek of raamwerk dat gesloten is en niet openbaar toegankelijk. U kunt CocoaPods in dergelijke situaties nog steeds gebruiken. CocoaPods werkt geweldig voor zowel gesloten als open source bibliotheken.
Om dit te laten werken, moet je een repository voor privéspecificaties maken. Als je er eenmaal een hebt ingesteld, merk je niet eens het verschil tussen publieke en private afhankelijkheden, omdat CocoaPods voor je zorgt voor de nodige details. In deze zelfstudie leert u hoe u een repository voor privéspecificaties kunt instellen om privé-bibliotheken te beheren.
Als u alleen CocoaPods hebt gebruikt voor het beheren van openbare pods, weet u misschien niet dat CocoaPods meerdere repositories met specificaties kan verwerken. Als er geen specs-repository is gespecificeerd in het project Podfile, CocoaPods valt terug in de repository met de hoofdspecificaties.
Als u een afhankelijkheid opgeeft in uw project Podfile, CocoaPods zoekt standaard in de repository met hoofdspecificaties. Bekijk de volgende twee voorbeelden. Beide voorbeelden genereren hetzelfde resultaat. Het verschil is dat we expliciet de bron van de specs-repository in de tweede specificeren Podfile.
platform: ios, '8.0' doel 'Testen' do pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' end
bron 'https://github.com/CocoaPods/Specs.git' platform: ios, '8.0' doel 'Testen' do pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' end
Als je nog nooit een pod hebt gemaakt of eraan hebt bijgedragen, vraag je je misschien af wat een specsortatiebron is? Een specs-repository is niets meer dan een repository met een verzameling podspecificaties, bestanden met een .podspec of .podspec.json uitbreiding.
Zoals de naam al doet vermoeden, bevat de specs-repository niet de bronbestanden voor de pods. Je kunt bladeren door de repository van de CoconutPods-masterspecificaties op GitHub. Als CocoaPods op uw machine is geïnstalleerd, dan is er al een kopie van de repository met de hoofdspecificaties aanwezig op uw machine.
Tijdens het installatieproces, CocoaPods klonen de master specs repository naar uw thuismap. Je kunt het vinden op ~ / .Cocoapods / repos / master.
Ik gebruik GitHub meestal voor het hosten van Git-repositories, dus dat is het platform dat ik zal gebruiken voor deze tutorial. Het maakt niet uit waar u de specs-repository host, zolang deze maar toegankelijk is voor iedereen in uw team.
Je kunt een gratis GitHub-account maken om mee te volgen, maar houd er rekening mee dat je alleen openbare repositories kunt maken met een gratis account. Als u een bibliotheek hebt waarvan u de bron wilt openen, wordt het aanbevolen om de podspecificatie te publiceren naar de repository met de hoofdspecificaties, die wordt beheerd door het CocoaPods-team. U behaalt niets door een afzonderlijke repository voor openbare specificaties te maken.
Het eerste dat we moeten doen, is een privé-repository maken op GitHub voor de privéspecificaties die we later gaan toevoegen. Ik heb de mijne genoemd tutspods. GitHub zal voorstellen om de repository naar je computer te klonen, maar dat is niet nodig. CocoaPods zal de specs repository voor u klonen zodra u het aan CocoaPods hebt toegevoegd. Dat is wat we in de volgende stap zullen doen.
De volgende stap is om CocoaPods te vertellen over de specs-repository die we zojuist hebben gemaakt. U doet dit door de volgende opdracht vanaf de opdrachtregel uit te voeren.
pod repo toevoegen tutspods https://github.com/bartjacobs/tutspods.git
Je merkt misschien dat de opdracht vergelijkbaar is met het toevoegen van een remote aan een Git-repository. Zorg ervoor dat je de naam onthoudt die je de specs repository geeft, tutspods in dit geval. We hebben het later nodig.
Wanneer u een specs repository toevoegt, kopieert CocoaPods de repository naar uw machine. U kunt dit verifiëren door naar te navigeren ~ / .Cocoapods / repos. De map moet nu twee specs-repository's bevatten, de meester specs repository en de tutspods specs repository. Afgezien van een .git map, de tutspods directory is leeg omdat we nog geen specs hebben toegevoegd.
Niet zo lang geleden schreef Andy Obusek een geweldige tutorial over het maken van je eerste pod. Als u nog nooit een pod openbaar of privé hebt gemaakt, raad ik u aan eerst het artikel van Andy te lezen. Ik zal niet herhalen wat Andy schreef in deze tutorial.
Als voorbeeld heb ik een kleine bibliotheek gemaakt, TSPTableView, die een special bevat UITableView
subklasse. Als u een podspecificatie voor de bibliotheek wilt maken, voert u de volgende opdracht uit in de hoofdmap van de bibliotheek.
pod create spec TSPTableView
Door het bovenstaande commando uit te voeren, maakt CocoaPods een bestand genaamd TSPTableView.podspec. Open het bestand in een teksteditor en vul de vereiste velden in. Als je klaar bent, ren dan pod spec lint
om de podspecificatie te valideren. Als de podspecificatie geen validatie doorgeeft, kunt u de spec niet naar de specsrepository duwen.
Als de podspecificatie de validatie doorgeeft, wordt het tijd om deze naar de repository voor persoonlijke specificaties te pushen die u eerder hebt gemaakt. U doet dit door de volgende opdracht vanaf de opdrachtregel uit te voeren.
pod repo push tutspods TSPTableView.podspec
Het is belangrijk dat je dezelfde naam gebruikt die je eerder hebt gebruikt om de repository met persoonlijke specificaties toe te voegen aan CocoaPods. Het laatste argument is het pad naar de podspecificatie die u naar de specs-repository pusht.
We kunnen nu gebruiken TSPTableView in een nieuw project. Maak een project in Xcode en voeg een toe Podfile aan de basis van het project door te rennen pod init
vanaf de opdrachtregel. Dit is wat de Podfile zou eruit kunnen zien als je klaar bent.
platform: ios, '8.0' doel 'MyAmazingApp' do pod 'TSPView' einde
Rennen pod installeren
vanaf de opdrachtregel om de afhankelijkheden te installeren die in de projecten worden vermeld Podfile. Is er ook een probleem opgetreden? Ik zie de volgende fout.
pod-installatie Updates van lokale specificaties bijwerken Departementen analyseren [!] Kon geen specificatie vinden voor 'TSPTableView'
De output vertelt ons dat CocoaPods eerst de lokale specs repositories bijwerkt. Dit betekent dat de repositories in de ~ / .Cocoapods / repos map worden bijgewerkt, waarbij eventuele wijzigingen worden ingetrokken.
CocoaPods doet dit om ervoor te zorgen dat het de nieuwste versie van de specificaties heeft die zijn opgeslagen in de repositories. Als we de ~ / .Cocoapods / repos / tutspods map, kunnen we zien dat de podspecificatie voor de TSPTableView pod is er zoals we verwacht hadden. Waarom kan CocoaPods de podspecificatie niet vinden TSPTableView?
De oplossing is eenvoudig. Aan de top van de Podfile, we moeten specificeren welke specs repositories CocoaPods zoekt om de afhankelijkheden op te lossen die in de projecten staan Podfile. Dit is wat de Podfile zou eruit moeten zien om ons probleem te verhelpen.
source 'https://github.com/bartjacobs/tutspods.git' source 'https://github.com/CocoaPods/Specs.git' platform: ios, '8.0' doel 'MyAmazingApp' do pod 'TSPTableView' einde
Rennen pod installeren
nog een keer om de afhankelijkheden te installeren die in de projecten zijn vermeld Podfile. De opdracht zou nu succesvol moeten worden voltooid, zoals hieronder wordt getoond. Ik gebruik momenteel CocoaPods 0.38.2 dus de uitvoer kan enigszins afwijken als u een andere versie van CocoaPods gebruikt.
podinstall Updaten van lokale specs repositories Analyseren van afhankelijkheden Downloaden van afhankelijkheden Installeren van TSPTableView (0.0.1) Genereren van Pods project Integratie van client project [!] Sluit alle huidige Xcode sessies en gebruik 'MyAmazingApp.xcworkspace' voor dit project vanaf nu.
Merk op dat de volgorde waarin u de specs repositories in de Podfile is belangrijk. Als u bijvoorbeeld een openbare pod hebt gevorkt, gewijzigd en een privépod voor de vork met dezelfde naam hebt gemaakt, krijgt u een botsing met een naam.
Dit is geen probleem voor CocoaPods, omdat het de eerste pod zal gebruiken die het kan vinden met de opgegeven naam. Over het algemeen moet je de repository met persoonlijke specificaties bovenaan plaatsen om ervoor te zorgen dat CocoaPods die als eerste doorzoekt, en zo nodig terugvalt op de repository met openbare specificaties..
CocoaPods is een geweldige tool die ik niet zou kunnen gebruiken zonder. Ik hoop dat deze tutorial je heeft laten zien hoe krachtig CocoaPods is en hoe gemakkelijk het is om privé-pods te maken en te beheren met CocoaPods.