Gerade noch pĂŒnktlich, wie angekĂŒndigt, in KW 33 der erste Blogpost aus der Reihe âiOS Apps mit Maven bauenâ
Generell gibt es bei Maven 2 Möglichkeiten ein neues Projekt zu erstellen: per Hand oder via archetype:generate. Das Maven Plugin fĂŒr iOS bringt auch eigene (leicht angestaubte) Archetypes mit. FĂŒr die Arbeit in einem Unternehmen ist es immer sinnvoll Archetypes zu verwenden, um eine einheitliche Basis fĂŒr alle Projekte zu haben. Trotzdem möchte ich hier einmal den manuellen Weg zeigen.
Wichtiger Hinweis: auch wenn Maven fĂŒr alle Betriebssysteme verfĂŒgbar ist, lĂ€uft der iOS Build natĂŒrlich nur auf einem Mac, da nur hier die zusĂ€tzlich benötigen Commandline-Tools verfĂŒgbar sind.
Schritt 1: Xcode Commandline-Tools installieren
FĂŒr den Build mit Maven sind die Xcode Commandline Tools unbedingt erforderlich. Eine Anleitung fĂŒr die Installation der Commandline Tools findet sich z.B. auf docwiki.embarcadero.com
Schritt 2: Projektordner erstellen
Der Aufbau des Projektordners ist sehr simpel: wir brauchen lediglich einen Unterordner fĂŒr unser Xcode Projekt. Nach Maven Konvention liegen alle Dateien des Hauptprojektes unter âsrc/mainâ. FĂŒr unser iOS Projekt legen wir deshalb die Ordnerstruktur âsrc/main/iosâ an.
Schritt 3: pom.xml erstellen
Nun kommt das HerzstĂŒck eine Maven Projektes: die pom.xml. In der pom.xml werden alle fĂŒr das Build erforderlichen Konfigurationen zentral gepflegt. Die pom.xml muss im Root-Verzeichnis des Projektes liegen.
Die ersten Informationen, die wir in die pom.xml eintragen sind: groupId, artifactId und version.
Die groupId ist meistens die umgekehrte Domain, Ă€hnlich wie bei einem Java Package. Je nach Vorliebe/Vorgabe noch ergĂ€nzt um weitere Elemente. FĂŒr thoughtsonmobile.com wĂ€re die groupId also com.thoughtsonmobile
Ich ergĂ€nze generell noch gerne die Plattform in der groupId. Deshalb lautet die groupId: âcom.thoughtsonmobile.iosâ
Als nĂ€chstes die artifactId. Die artifactId ist der eigentliche Projektname. Hier stoĂen das erste Mal Maven und Xcode/iOS Konventionen aufeinander: WĂ€hrend Maven auf lowercase und Bindestriche setzt, ist man bei Xcode eher CamelCase Projektnamen gewohnt. FĂŒr welche Konvention man sich am Ende entscheidet ist natĂŒrlich völlig egal. Ich persönlich habe mich fĂŒr die Maven-Variante entschieden um auch in meinem Maven Repository einheitlich mit den anderen Projekten zu sein. Die artifactId und der spĂ€tere Projektname des Xcode Projekts mĂŒssen identisch sein. FĂŒr dieses Beispiel soll unsere artifactId âmaven-testâ
Die Version ist erst einmal völlig egal. Das einzig Wichtige ist, dass sie mit â-SNAPSHOTâ endet. Dabei handelt es sich um ein SchlĂŒsselwort von Maven, dass anzeigt, dass es sich bei der Version um eine Entwicklungsversion und nicht um eine Release-Version handelt. Detailliertere Informationen hierzu wird es in einem der nachfolgendes Blogposts geben.
Unsere pom.xml sieht nach den oben beschriebenen Punkten wie folgt aus:
<project xmlns="http://ift.tt/13J5Aq9; xmlns:xsi="http://ift.tt/Atvu06; xsi:schemaLocation="http://ift.tt/IH78KX http://ift.tt/19Bz6pF; <modelVersion>4.0.0</modelVersion> <groupId>com.thoughtsonmobile.ios</groupId> <artifactId>maven-test</artifactId> <version>1.0-SNAPSHOT</version> </project>
Nun mĂŒssen wir das iOS-Plugin ergĂ€nzen und konfigurieren. AuĂerdem mĂŒssen wir das âpackagingâ des Projektes, sprich die Auslieferungsform, auf âipaâ Ă€ndern.
Das Plugin ist derzeit nicht ĂŒber Maven-Central erreichbar, deshalb mĂŒssen wir es von GitHub herunterladen (http://ift.tt/1A2Z12B) und anschlieĂend mit mvn install in unser lokales Repository einspielen. Das Plugin wird gepflegt von LetsDev.
Danach können wir es einbinden und konfigurieren. Die fertige pom.xml sieht dann wie folgt aus:
<?xml version="1.0"?> <project xmlns="http://ift.tt/13J5Aq9; xmlns:xsi="http://ift.tt/Atvu06; xsi:schemaLocation="http://ift.tt/IH78KX http://ift.tt/19Bz6pF; <modelVersion>4.0.0</modelVersion> <groupId>com.thoughtsonmobile.ios</groupId> <artifactId>maven-test</artifactId> <version>1.0-SNAPSHOT</version> <name>Maven+iOS Example Project</name> <packaging>ipa</packaging> <build> <plugins> <plugin> <groupId>de.letsdev.maven.plugins</groupId> <artifactId>maven-ios-plugin</artifactId> <version>1.6-SNAPSHOT</version> <extensions>true</extensions> <configuration> <sourceDir>src/main/ios</sourceDir> <!-- replace with your own identity --> <codeSignIdentity>iPhone Developer: Leif Janzik</codeSignIdentity> <appName>${project.artifactId}</appName> <bundleIdentifier>com.thoughtsonmobile.${PRODUCT_NAME:rfc1034identifier}</bundleIdentifier> <displayName>TOM Maven</displayName> </configuration> </plugin> </plugins> </build> </project>
Wichtig ist natĂŒrlich die eigene Identity einzutragen.
Schritt 5: Xcode Projekt erstellen
Dieser Schritt ist mit der einfachste, einfach wie gewohnt ein Projekt in Xcode erstellen. Als Pfad wĂ€hlen wir den Ordner iOS in unserem Testprojekt. Der Name des Projektes ist âmaven-testâ.
Schritt 6: Das Projekt bauen
Ist das Projekt erstellt, können wir ein erstes Build mit unserer Maven Konfiguration erstellen. Dazu einfach mvn package in der Kommandozeile aufrufen. Wenn alles richtig konfiguriert wurde, endet das Build nach einiger Zeit mit der Meldung: â[INFO] BUILD SUCCESSâ. Danach finden wir in dem Ordner âtarget/â eine IPA Datei die wir auf unseren TestgerĂ€ten installieren können.
Parallel dazu können wir das Projekt natĂŒrlich noch uneingeschrĂ€nkt mit Xcode bauen und debuggen.
 Damit haben wir den ersten Teil abgeschlossen. Wir haben ein Xcode Projekt, dass wir mit Maven bauen können. Bisher stellt sich die Frage inwiefern das eine Verbesserung gegenĂŒber dem Normalfall darstellt. Wie ich in meinem vorherigen Blogpost beschrieben habe, gibt es zu diesem Zeitpunkt noch keinen Vorteil. Die Vorteile von Maven werden erst in den nachfolgenden Artikeln deutlich, wenn es um die weiterfĂŒhrenden Möglichkeiten von Maven geht.
Der Sourcecode der gesamten Blogserie ist auf GitHub verfĂŒgbar:Â http://ift.tt/1A2YZrj
Teil 1: Aufsetzen eines iOS Projektes mit Maven