Ich besitze eine unter Entwicklern weit verbreitete Krankheit. Wenn mir eine Idee in den Kopf kommt möchte ich am liebsten sofort los programmieren ohne mir zuvor Gedanken über Plattformen, Endgeräte und Technische Voraussetzungen machen zu müssen. Da ich mich bisher nahezu ausschließlich mit Desktop-Applikationen beschäftigt habe hat das auch wunderbar funktioniert. Der Grund: Windows nutzt sowieso fast jeder, das .NET Framework ist auf jedem PC installierbar und ausreichend Performance ist mit heutigen PC’s meist kein Problem mehr.
Doch als Entwickler von mobilen Apps sieht das schon ganz anders aus. Wenn die Zielgruppe nicht klar ist, braucht man erst gar nicht mit dem Entwickeln anzufangen. Im schlimmsten Fall ist sonst der aufwändig zusammengeschusterte Code unbrauchbar. Daher sollten die folgenden Punkte stets als erstes geklärt werden:
- Welche mobilen Endgeräte kommen zum Einsatz (Smartphone, Tablet)
- Welche Betriebssysteme laufen auf den mobilen Endgeräten (iOS, Android,…)
- Welche Frameworks/Programmiersprachen sind darauf verfügbar (C, C#, Java,…)
- Welche Hardwareanforderungen müssen eingehalten werden (CPU, Kamera, …)
Jeder dieser Punkte muss vorab ausführlich durchdacht werden. Änderungen in nur einem der Parameter können zu einem späteren Zeitpunkt des Entwicklungsprozesses weitreichende Auswirkungen haben. Jeder einzelne Punkt wird daher im Folgenden genauer behandelt.
Welche mobilen Endgeräte kommen zum Einsatz?
Mobile Endgeräte können hauptsächlich in zwei Kategorien eingeteilt werden, Smartphones und Tablets. Doch wieso ist es so wichtig jetzt schon zu wissen wo nachher die geplante App zur GPS gestützten Positionierung der Kaffeemaschine
laufen soll? Ganz einfach, die Zielgruppe entscheidet über den Erfolg einer Applikation und wenn eine Zielgruppe gar keinen Zugang zu unserer App hat, wird daraus auch nie ein Erfolg. Zurzeit teilen sich iOS (ca. 66%) und Android (ca. 27%) nahezu den kompletten Tabletmarkt. Wer also an die Entwicklung von Windows Mobile Applikationen gedacht hatte, kann sich das vermutlich ganz schnell aus dem Kopf schlagen.
Welche Betriebssysteme laufen auf den mobilen Endgeräten?
Wie bereits im Punkt zuvor angedeutet, spielt das Betriebssystem eine große Rolle bei der Wahl der geeigneten Entwicklungswerkzeuge. Hier unterscheidet sich der Smartphonemarkt zum Teil deutlich vom Tabletmarkt. Die folgende Grafik zeigt einen kurzen Überblick über die aktuellen (3. Quartal 2011, Marktanalyse durch Gartner und Strategy Analytics) Anteile der jeweiligen Betriebssysteme bei Smartphones und Tablet-PCs.
Die Grafiken zeigen schnell, der Markt wird von iOS und Android dominiert. Symbian (hauptsächlich Nokia Endgeräte) ist zwar bei Smartphones noch relativ stark vertreten, dies wird sich aber in den kommenden Monaten ändern, da Nokia in Zukunft auf Windows Phone 7 statt Symbian setzt.
Dies bedeutet dass aktuell die Plattformen Android, iOS und z.T. Windows Phone 7 für die Entwicklung von Apps interessant sind.
Wichtig ist ebenso die Eingrenzung der Betriebssystemversionen. Die Unterstützung von bestimmten Funktionen in einer der ersten SDK-Versionen von Android unterscheiden sich zum Teil deutlich von der aktuellen SDK Version 4.0.
Welche Frameworks/Programmiersprachen sind darauf verfügbar?
Zuerst muss geklärt werden, welche Sprachen die jeweiligen Betriebssysteme als Standardsprache definieren.
Android: Bei Android ist Java die Sprache der Wahl. Nahezu der komplette Sprachumfang von Java wurde implementiert, für den Zugriff auf die Hardwarekomponenten (GPS, Audio/Video, …) stehen zusätzliche Libraries zur Verfügung. Bei Performancekritischen Anwendungen besteht die Möglichkeit via Native Development Kit (NDK) C/C++-Quelltexte einzubinden.
iOS: Hier dominiert die Sprache Objectiv-C. Dabei handelt es sich um eine Variation des Standard-C Umfangs der um objektorientierte Spracherweiterungen ergänzt wurde.
Windows Phone 7: Da es sich, wie der Name bereits verrät, um ein Microsoft Produkt handelt, wird von Anfang an auf C#/VB.NET gesetzt. Die Verwendung von Silverlight und der XNA Technologie kommen ebenso zum Einsatz.
Damit wäre also klar, dass jedes System von Haus aus auf eine andere Programmiersprache setzt. Hat man den Luxus und kann sich (bzw. die Zielgruppe) auf ein Betriebssystem einschränken, so ist meine Empfehlung stets die Standardsprache des jeweiligen Betriebssystems zu verwenden. Der Vorteil liegt darin das alle Funktionalitäten immer gut getestet sind, neu Features (Hardware/Software) sofort zur Verfügung stehen und die Sprache vermutlich so schnell nicht ausstirbt.
Zwei Gründe können jedoch gegen meine letzte Empfehlung sprechen. Erstens, man beherrscht die Programmiersprache des gewählten Betriebssystems nicht und möchte sie nicht lernen. Zweitens, die geplante App soll auf mehreren Betriebssystemen lauffähig sein. Aus diesem Grund gibt es die Möglichkeit ein Framework einzusetzen, das die Programmierung und den Zugriff auf die Hardware in der Sprache der Wahl zulässt. Zurzeit ermöglicht nur .NET (in Form von Mono for Android/MonoTouch) die Plattformübergreifende Verwendung einer gemeinsamen Programmiersprache.
Java läuft zwar auf Android, jedoch gibt es bisher meines Wissens nach keine Unterstützung für Windows Mobile 7 und iOS. Zumindest für iOS soll ein Compiler folgen der die JVM inkl. Programmcode in Zukunft in einer APP ausliefert, ein genauer Releasetermin steht aber noch nicht zur fest.
Welche Hardwareanforderungen müssen eingehalten werden?
Last but not least die Hardwareanforderungen. Könnte man davon ausgehen dass alle Benutzer stets die neuste Hardware verwenden, wäre dieser Punkt überfällig. Leider sieht die Realität meist anders aus. Nicht jedes Endgerät verfügt über gleich viel Speicher, eine super schnelle CPU oder ein riesiges Display. Auch Komponenten wie Kamera, GPS und Beschleunigungssensoren sind nicht immer vorhanden. Und selbst wenn z.B. eine Kamera vorhanden ist, bedeutet das noch lange nicht dass sämtliche Features unterstützt werden (Auflösung, Autofocus, Zoom,…). Neben der Hardwareaustattung spielt auch die bereits oben erwähnte Version des Betriebssystems eine große Rolle. Daher gilt es vorab genau die nötige Hard- und Software zu definieren auch wenn dies bedeutet das gewisse Benutzer ausgeschlossen werden. Der Test von verschiedenen Systemen (Minimal-/Maximalanforderungen) durch Emulatoren oder, falls vorhanden, durch verschiedene Smartphones/Tablets sollte stets in den Entwicklungsprozess integriert werden.
Zusammenfassung:
Dieser Artikel zeigt dass es wichtig ist bereits vorab die Hard- und Software der Zielgruppe genau zu kennen bzw. zu definieren. Es hat sich herauskristallisiert das iOS und Android (bedingt auch Windows Phone 7) die Betriebssystem der Wahl sind. Wer lediglich für eine Plattform entwickelt ist gut beraten die Standard-Programmiersprachen des jeweiligen Systems zu verwenden. Für Plattformübergreifende Projekte ist das .NET-Framework/Mono die richtige Lösung. Und zu guter Letzt müssen vorab die Minimalanforderungen für die Hardware (Speicher, CPU, Kamera, GPS, ..) definiert werden, damit Zielgruppengerechte Anwendung erstellt werden können.