CocoaPods Schnelleinstieg Moritz Haarmann, Software for mobile devices CocoaPods ist das Tool der Wahl, wenn es darum geht, Abhängigkeiten eines Projekts zu verknüpfen. CocoaPods ist kostenlos und quelloffen das Beste ist jedoch dass man auch eigene Bibliotheken, die z.b. nur intern genutzt werden problemlos hinzufügen kann. Los gehts. 1 Installation Die Installation verläuft angenehm simpel. CocoaPods ist in Ruby geschrieben, was allerdings bei Mac OS immer vorinstalliert ist. Daher reicht es, in einem Terminal den Befehl $ sudo gem i n s t a l l cocoapods einzugeben. Danach kann über $ pod v Überprüfen, ob die Installation auch funktioniert hat. Bei mir sieht die Ausgabe davon im Moment so aus, wobei sich die Versionsnummer natürlich stets ändert. $ pod v e r s i o n 0. 3 3. 1 Wunderbar, wäre dieser Teil geschafft. www.moritzhaarmann.de Seite 1 von 5
2 Verwendung CocoaPods besteht in erster Linie aus dem oben schon aufgerufenen Programm pod. Bevor wir jedoch CocoaPods wirklich benutzen können, sind zwei Dinge notwendig. Zum ersten ist das ein leeres Xcode-Projekt. Dazu Xcode öffnen und dort ein neues, leeres ios-projekt anlegen. Da wir das Projekt selbst nur am Rande und zum testen unserer Konfiguration verwenden, ist egal welches Projekt-Template verwendet wird. Wichtig ist nur, dass der Ort des Projekts bekannt ist, so dass wir unkompliziert dorthin navigieren können. 2.1 Podfile Dieses neue Projekt ist ziemlich leer und im Moment noch ziemlich nutzlos. Um das zu ändern, wollen wir 2 Bilbliotheken einbinden. Was früher ziemlich aufwendig war, geht dank CocoaPods recht schnell. Als erstes wird eine sog. Podfile benötigt, die Informationen enthält mittels denen CocoaPods bestimmt, welche Plattformen unterstützt werden sollen und welche Abhängigkeiten benötigt werden. Wer sich mit Maven aus der Java-Welt oder Bundler von Ruby auskennt erkennt ein Schema: Eine Konfigurationsdatei ist Grundlage für ein weiteres Tool, dass dann die notwendige Projektkonfiguration erstellt oder aktualisiert. Eine einfache Podfile besteht mindestens aus der Angabe der Plattform, auf der das Projekt basiert. p l a t f o r m : i o s, 7. 1 So weiss CocoaPods, dass unsere Build-Plattform ios 7.1 ist. Abhängigkeiten werden bei CocoaPods pods genannt, in Anlehnung an die Kakaobohne (Cocoa), die Bohnen in sog. Pods, den Schalen, enthält. Jedes Pod definiert genau eine Abhängigkeit. Will man z.b. AFNetworking in sienem Projekt benutzen, fügt man in der Podfile eine neue Zeile ein, die wie folgt aussieht pod AFNetworking Achtung, die Namen der Pods sind Case-Sensitive, d.h. unterscheiden nach Groß- und Kleinschreibung! führt man dann in einem Terminal den Befehl $ pod i n s t a l l aus, macht CocoaPods einige Dinge im Hintergrund und auf einmal. Zuerst wird ein Abhängigkeitsgraph erstellt, da es ein üblicher Fall ist, dass Pods ihrerseits von anderen Pods abhängen. Anhang dieses Abhängigkeitsbaums rennt CocoaPods los www.moritzhaarmann.de Seite 2 von 5
Moritz Haarmann Abbildung 1: Kakaobohnen in Schalen und läd die entsprechenden Projekte in den pod-ordner im Projektverzeichneis, in dem alle Artefakte und Quellen gespeichert sind, die von CocoaPods verwaltet werden Im pods-ordner sollte man nicht von Hand Änderungen vornehmen, da das Verhalten im besten Fall undefiniert, im schlechtesten Fall katastrophal ist. Nachdem dieser Schritt zum Ende gekommen ist, wird ein Pods-Projekt angelegt. Dieses Projekt dient einzig und alleine dazu, die Abhängigkeiten in einem Projekt zusammenzufassen und dort in eine statische Bibliothek zu kompilieren. Für sich ist das schon praktisch, allerdings besteht der kritische Punkt im nächsten Schritt, bei dem CocoaPods einen Workspace erstellt, die unser ios-projekt und das Pods-Projekt enthält und diese verknüpft. Diese Verknüpfung besteht im Kern daraus, dass das Pods-Projekt als Abhängigkeit unseres Projekts angegeben wird, so dass dieses immer gebaut wird. Dieser Workspace ist ab sofort auch der Dreh- und Angelpunkt der Entwicklung das heisst dass das bisherige.xcodeproj nicht mehr benutzt werden kann, da sonst die Abhängigkeiten fehlen. www.moritzhaarmann.de Seite 3 von 5
Auf der Kommandozeile kann mittels open P r o j e c t. xcworkspace einfach das neu angelegte Projekt bzw. der dazugehörige Workspace geöffnet werden. 2.2 Änderungen an der Podfile Ändert man die Podfile, was in der Praxis natürlich häufig der Fall ist, kann das bestehende Pod-System mittels pod update auf den neusten Stand gebracht werden. Sollte Xcode die Änderungen nicht sofort erkennen bzw. Probleme beim Bauen haben hilft oft ein Neustart von Xcode. Sollte das nicht den gewünschten Effekt haben, kann man in der (CocoaPods Troubleshooting guide)[http://guides.cocoapods.org/using/troubleshooting.html] weiter bekannte Probleme und deren Lösungen recherchieren. 3 Pods finden CocoaPods kommt mit einem search-kommando, dass behilflich ist, wenn man Pods finden möchte. Sucht man Beispielsweise ein Pod, dass aus Hex-Farbcodes wie sie in HTML/CSS zum Einsatz kommen, eine UIColor-Instanz baut, kann man einfach danach suchen: pod s e a r c h hex Eine Liste mit verfügbaren Pods wird dann angezeigt, die auszugsweise so aussieht: > UIColor ColorWithHexAndAlpha ( 1. 2. 0 ) C r e ate U I C o l o r O b j e c t s u s i n g Hex Values pod UIColor ColorWithHexAndAlpha, ~> 1. 2. 0 Homepage : h t t p s : / / g i t h u b. com/ A r t S a b i n t s e v / UIColor ColorWithHexAndA Source : h t t p s : / / g i t h u b. com/ A r t S a b i n t s e v / UIColor ColorWithHexAndA V e r s i o n s : 1. 2. 0 [ master repo ] > UIColor Hex ( 0. 1. 1 ) I n i t i a l i z e s the U I C o l o r u s i n g h e x a d e c i m a l. pod UIColor Hex, ~> 0. 1. 1 Homepage : h t t p : / / g i t h u b. com/ n a k a j i j a p a n www.moritzhaarmann.de Seite 4 von 5
Source : h t t p s : / / g i t h u b. com/ n a k a j i j a p a n / UIColor Hex. g i t V e r s i o n s : 0. 1. 1, 0. 1. 0 [ master repo ] > UIColor H e x S t r i n g ( 1. 1. 0 ) Easy, Android c o m p a t i b l e hex s t r i n g s to U I C o l o r. pod UIColor HexString, ~> 1. 1. 0 Homepage : h t t p s : / / g i t h u b. com/ k e v i n r e n s k e r s / UIColor H e x S t r i n g Source : h t t p s : / / g i t h u b. com/ k e v i n r e n s k e r s / UIColor H e x S t r i n g. g i t V e r s i o n s : 1. 1. 0, 1. 0. 1, 1. 0. 0 [ master repo ] daraus kann man sich nun den Namen des gewünschten Pods kopieren und in die eigene Podfile übernehmen 4 Cocoapods und git Vor Cocoapods war die Verwaltung von Dependencies mittels git submodules oder anderer Techniken oftmals mühsam und hat (in meiner Erfahrung) zu mehr Problemen geführt, als man wollte. Eine bewährte Strategie für den Umgang mit Cocoapods und git ist, die folgenden Dateien und Verzeichnisse komplett in die Versionskontrolle zu übernehmen so ist es jedem Entwickler nach einem clone sofort möglich, loszuarbeiten, auch ohne selbst Cocoapods installiert zu haben: P o d f i l e P o d f i l e. l o c k Pods/ $ ( Projektname ). xcworkspace Ein weiterer Vorteil liegt darin, dass auch eine Continuous Integration-Umgebung dass Projekt auschecken und bauen kann, da alle Abhängigkeiten schon parat liegen. www.moritzhaarmann.de Seite 5 von 5