Dependency Management unter iOS mit CocoaPods

Werkzeuge  –  1 Kommentare

Eine Software für das Management von Abhängigkeiten fehlte iOS-Entwicklern lange Zeit. Das dafür vorgesehene Projekt CocoaPods erleichtert einem Entwicklungsteam die tägliche Arbeit deutlich und erhöht die Build-Geschwindigkeit drastisch.

Entwickler sind bei ihren Softwareprojekten zumeist von anderen Frameworks oder Projekten abhängig. Beim Scannen von QR-Codes stößt man zum Beispiel oft auf das erfolgreiche Google-Code-Projekt ZXing. Hier bemerken Entwickler jedoch schnell, dass schon das einfache Importieren zeitaufwendig ist, denn vor den entsprechenden API-Aufrufen sind etliche Aufgaben zu erledigen: Compiler-Flags setzen, die sogenannten Header Search Paths einrichten, die main.m-Datei auf *.mm ändern (damit der Compiler über den bevorstehenden Einsatz von C++ informiert ist) und vieles andere mehr. Bei jedem Projekt beginnt der Entwickler dabei wieder von vorn und muss alle Einstellungen erneut vornehmen. Falls er etwas vergisst, entstehen Folgefehler, und eine unnötig lange Suche nach den Ursachen beginnt.

Je größer das Projekt, desto länger ist die Liste der zu importierenden und einzurichtenden Frameworks. Die Abhängigkeiten zwischen unterschiedlichen Versionen sind hier noch gar nicht berücksichtigt. Wie schön wäre es da, wenn nur ein Tool diese Aufgaben lösen könnte. Nicht nur Java-Entwickler werden sofort an Apache Maven denken. Doch so etwas hat iOS-Entwicklern lange gefehlt – bis vor einiger Zeit das Projekt CocoaPods ins Leben gerufen wurde, das sich dem Management von Abhängigkeiten unter iOS annimmt.

Doch CocoaPads ist nicht nur für iOS-Entwickler wichtig, denn Android- und iOS-Projekte laufen oft Hand in Hand. Ein Kunde, der eine mobile App beauftragt, möchte nahezu immer Android und iOS bedienen. Deshalb müssen auch Android-Entwickler wissen, wie sich Dependency-Probleme in der iOS-Welt angehen lassen. Der Bereich Continuous Integration schafft darüber hinaus Berührungspunkte zwischen iOS- und Android-Entwicklung. CocoaPods gibt den Entwicklern die Möglichkeit, Abhängigkeiten und eigenen Quellcode sauber voneinander zu trennen, was gerade bei Continuous Integration hilfreich ist.

Wie funktioniert CocoaPods?

Wie die Paketmanager dpkg oder apt verwendet das Framework ein Kommandozeilenprogramm. Dabei wird der Befehl pod aufgerufen, um die Fremdprojekte zu installieren und zu verwalten. In einer Konfigurationsdatei wird spezifiziert, welche Abhängigkeiten zu welchem Target gehören und welche Version verwendet werden soll. Darüber hinaus nimmt man in der sogenannten Podfile viele weitere Konfigurationen vor.

CocoaPods verwaltet dafür ein lokales Git-Repository auf dem System des Benutzers, das unter ~/.cocoapods zu finden ist. Dort sind alle podspec-Dateien gespeichert und in Unterordnern mit der entsprechenden Version abgelegt. Diese Dateien werden von den jeweiligen Projektentwicklern selbst erstellt und als Pull-Request an CocoaPods geschickt. Die Mitglieder von CocoaPods führen daraufhin eine Qualitätskontrolle durch und entscheiden dann, ob das Framework/Projekt den Anforderungen entspricht, bevor es anschließend in das öffentliche Verzeichnis aufgenommen wird.

Auf der CocoaPods-Website lässt sich dieses durchsuchen. Außerdem kann man Closed-Source Bibliotheken einbinden. Darüber hinaus ist es möglich, lokale Projekte zu integrieren (also solche, die nicht ins öffentliche Podspec-Verzeichnis sollen). Damit ist das Konzept von CocoaPods für nahezu jedes Entwicklungsprojekt flexibel genug.

Die CocoaPods-Website mit praktischer Echtzeitsuche (Abb. 1)

Installation von CocoaPods

CocoaPods richtet man über RubyGems ein. Ruby ist auf aktuellen Mac-Systemen vorinstalliert, sodass sich die unten aufgeführten Befehle einfach ins Terminal eingeben lassen:

$ [sudo] gem install cocoapods
$ pod setup

Danach steht dem Entwickler CocoaPods zur Verfügung. Mitunter kommt es bei der Installation zu relativ langen Wartezeiten, während derer auch keine Ausgabe erfolgt.