Wie entwickelt man eine App?

Jeder von uns hat ein Smartphone in der Tasche oder ein Tablet dabei. Und jeder von uns kennt die kleinen und grossen Programme, die uns durch den Alltag helfen, uns beschäftigen, erinnern und auf dem Laufenden halten. Jeder lädt sie sich runter, aktualisiert, probiert aus und spielt damit herum. Die Rede ist von Apps.

Aber was genau ist eigentlich eine App? Was solltet ihr wissen und welchen Herausforderungen müsst ihr euch stellen, wenn ihr eine App selbst entwickeln möchtet?

In dem Bereich Apps gelten vor allem Geräte von Apple mit dem Betriebssystem iOS und verschiedenste Gerätehersteller mit dem Betriebssystem Android als führend. Dadurch ergibt sich, dass dasselbe Produkt oder in diesem Sinne dieselbe App auf unterschiedlichen Geräten mit unterschiedlicher Grösse, Auflösung, Speicherplatz und jede Menge weiterer Eigenheiten funktionieren und am besten auch immer gleich aussehen soll.

Hinzu kommt noch das auf diesen Geräten auch die Versionen von Android und iOS variieren können, da nicht jeder Benutzer zwingend immer alle Geräte-Updates installiert. Das birgt verschiedene Herausforderungen, welche bei der Entwicklung beachtet werden müssen. Frühzeitige Grundsatzentscheide helfen uns dabei klare Abgrenzungen festzulegen. Wir haben uns folgende Fragen gestellt:

  • Soll die App für iOS und Android verfügbar sein?
  • Ist die App für Smartphones, Tablets oder beides gedacht?
  • Ab welcher iOS / Android Version wird die App unterstützt?
  • Wie wollen wir mit Updates umgehen?
  • Welche Programmiersprache und welche Tools wollen wir für die Entwicklung nutzen?

Native, Web oder Hybride?

Native-Apps

Native Apps sind die klassischen und “Urvarianten” der Apps. Sie sind spezifisch für das Betriebssystem Android, iOS oder Windows programmiert und sehr eng mit der Hardware verbunden. Dadurch ist der Zugriff auf Komponenten wie Sensoren und Kameras leicht umzusetzen und können sehr effizient eingesetzt werden. Native Apps zu entwickeln lohnt sich vor allem bei sehr aufwendigen Oberflächen, welche uneingeschränkten Zugriff auf die Hardware benötigen. Ein gutes Beispiel für den Einsatz von Native-Apps sind Spiele. Diese sind rechenintensiv und benötigen häufig viele Daten von Sensoren. Das grösste Problem, das sich für uns bei nativen Apps stellt, sind die darin verwendeten Programmiersprachen und die Strukturen der Programme, die je nach Betriebssystem völlig unterschiedlich sein können.

Bei Apple wurde ursprünglich mit Objective-C gearbeitet, mittlerweile ist aber die Programmiersprache Swift im Einsatz. In der Regel wird die Apple Software xCode zur Entwicklung von Apps auf iOS Geräten verwendet. xCode unterstützt den Entwickler optimal, um die Apps spezifisch für iPhone, iPad oder iWatch zu programmieren. Zugriff auf Testdaten, Testgeräte, Zertifikate und schlussendlich das Aufbereiten der Apps für den Store werden über xCode geregelt. Das erleichtert den kompletten Arbeitsablauf enorm.

Bei Android werden Apps mit Java entwickelt. Der Vorteil besteht unserer Ansicht nach vor allem darin, dass Java eine sehr verbreitete Programmiersprache ist und klassische Applikationsentwickler mit der Basis Java oftmals vertraut sind. Damit mittels Java für Android optimierte Apps entwickelt werden können, wird von Android das Tool AndroidStudio angeboten. Ähnlich wie bei xCode hat man in diesem Tool jegliche Unterstützung, welche zur App-Entwicklung auf Android wichtig ist.

Wenn eine App auf beiden Betriebssystemen gleich aussehen und sich gleich anfühlen und verhalten sollte, müssten wir unserer Meinung nach eine Menge Programmierlogik doppelt führen. Für beide Varianten würden wir stets umfassendes Know How benötigen und auch bei Updates müssten wir immer zwei Programme pflegen.

Web-Apps

Bei einer Web-App wird eine Webseite responsive entwickelt. Das heisst, dass die Ansicht der Webseite auf Smartphones und Tablets ausgerichtet ist. Diese Art ist somit die “einfachste” aller Arten, da wir eine bestehende Webseite “nur” anpassen müssten. Da die App über eine URL aufgerufen wird, können wir die App weder im Appstore (iOS) noch im Playstore (Android) anbieten. Dies wäre aber ein Vorteil zum Verbreiten der App und beim Bereitstellen von Updates. Zudem können wir bei Web-Apps die Integration von Zugriffen auf Sensoren oder Kameras nicht so einfach umsetzen. Die offline Nutzung der App könnten wir bis zu einem gewissen Grad umsetzen, vollständig ist dies allerdings nicht möglich.

Ein Vorteil, der sich aus der Unabhängigkeit von Betriebssystemen ergibt ist, dass alle User jederzeit die gleiche Ansicht haben, ohne dass wir aufwändig für iOS und Android verschiedene Apps anbieten müssten.

Hybride-Apps

Hybride-Apps sind eine Kombination aus Web-App und Native-App. Das Gerüst der App entspricht dem einer Native-App. Der Inhalt in diesem Gerüst ist allerdings webbasiert. Das bietet uns den Vorteil, dass die App sowohl für iOS als auch für Android nur einmal programmiert werden müsste. Das Gerüst für das jeweilige Betriebssystem wird über ein Tool generiert.

Gängige Programme für das Programmieren von Hybride Apps sind:

  • Cordova → Gerüst
  • Ionic → Graphical User Interface
  • Angular → Web Applikation

Wir haben uns bei unserer ersten App für die Entwicklung einer Hybride-App entschieden. Der Hauptgrund für diesen Entscheid beruht auf der Tatsache, dass die Programme bei einer Hybride-App nahe an Javascript sind und dieses Know How beim IT-Team bereits vorhanden ist.

Erste Schritte

2014 haben wir mit unserer ersten App für unsere Kunden begonnen. Zu diesem Zeitpunkt war eine Web-App ausreichend. Mit neuen und umfangreicheren Anforderungen mussten wir überlegen, ob eine andere Art der App nicht geeigneter wäre. Diese Überlegung wurde 2017 konkreter, als wir für zwei neue Kunden eine App zur Erfassung von Gesundheitsdaten entwickeln durften. Eine wichtige Anforderung an diese neue App war, dass sie zuverlässig offline genutzt werden kann. Für dieses Anliegen konnten wir nicht mehr auf unsere ursprüngliche Basis einer Web-App zurückgreifen.

Aus diesem Grund holten wir uns externe Unterstützung und erweiterten mit der Umsetzung der App unser Knowhow und somit auch unser Produkt- und Serviceangebot im IT Bereich.

Betriebssystem

Offline & Synchronisation

Updates

Erfahrungen

Bei der Umsetzung von Apps gibt es, wie auch bei anderen Programmen, einige Herausforderungen. Eine davon sind die unterschiedlichen Betriebssysteme. Wie wir bereits in den Ausführungen der verschiedenen App Varianten beschreiben haben, ist die Programmierung für die beiden Betriebssysteme komplett unterschiedlich. Wir wollten unser Know How in diesem Bereich erweitern und haben uns deshalb für die Zusammenarbeit mit einer externen Firma entschieden. Wichtig war uns dabei innerhalb des Projekts das Know How intern zu übertragen.

Die Anforderung unserer Kunden an die Offline-Fähigkeit verlangt ein komplettes Umdenken in der App Programmierung, da bei unseren bisherigen Apps die Web-Variante zum Einsatz kam und somit immer von einer bestehenden Datenverbindung ausgegangen wurde. Das heisst, dass wir bei der Entwicklung aller neuen Features die Offlinefähigkeit berücksichtigen müssen.

Die Synchronisation mit dem Backend verlangt besondere Aufmerksamkeit. Schliesslich wollen wir doppelte Daten vermeiden, die aufgrund von Datenerfassungen über die App, als auch über den Browser entstehen könnten.

Damit unsere Apps einwandfrei funktionieren sind regelmässige Updates erforderlich. Je nach Endgerät und Betriebssystem haben wir bemerkt, dass wir zu unterschiedlichem Verhalten bei der Versionierung kommen. Wir hatten durchaus Fälle, in welchen Korrekturen nur für ein Betriebssystem gemacht werden müssen, da es auf dem anderen Betriebssystem korrekt funktioniert. Bei jedem Update muss also die Überlegung stattfinden, was passiert, wenn jemand das Update nicht installiert. Soll die App dann weiterhin funktionieren und wo und wie handelt man das ab, vor allem wenn ein Update für eine App gröbere Überarbeitungen und neue Features erhält.

Wir haben festgestellt, dass sich Abnahmekriterien für Updates bei App- und Playstore durchaus unterschieden. Teilweise stiessen wir dabei auf Uploadverzögerungen und die App auf dem einem Betriebssystem war dann aktueller, als auf dem anderen.

Es ist noch kein Meister vom Himmel gefallen. So sind auch wir unsere erste App angegangen. Für den Engineering Lead haben wir uns mit einer Partnerfirma zusammen getan. Mit Hilfe des externen Input konnten wir uns viele Tricks abschauen und einiges lernen. So konnten wir durch die Umsetzung der App neues Know How in unserem IT-Team integrieren, welches uns auch bei unseren weiteren Projekten sehr hilfreich sein wird.

Bei der Umsetzung der App wurde auf agile Vorgehensweisen gesetzt, was uns Entwicklern neue Sichtweisen und Arbeitsmethoden aufgezeigt hat.

Cross Plattform Entwicklung

Cross Platform Entwicklungen können sowohl für Hybride wie auch native Apps verwendet werden. Das Ziel ist, das der Code nur einmal gepflegt werden muss und das per Hilfstool (z.B.: Xamarin) die Zielapp je nach Betriebssystem erstellt werden kann. Bei der Webapp ist dies schon gegeben, da auf den mobilen Endgeräten die Web-App per Browser geöffnet wird und dieser gleich funktionieren muss, egal von welchem Betriebssystem aus es gestartet wird. Wie auch bei der Hybride App ist hier der Vorteil, dass der Code für die App nur ein mal programmiert werden muss. Im Gegensatz zu der Hybride App hat man im Anschluss allerdings einen Native App Code und nicht nur ein Gerüst aussen rum.

Fazit

Bei der Entwicklung der Hybride App sind wir auf verschiedene Herausforderungen gestossen, die sich vor allem durch das mobile Umfeld ergaben. Aufgrund von mobilen Aspekten und vor allem aufgrund der gewünschten Offlinefähigkeit mussten wir beim Programmieren umdenken und nach – für uns – neuen Lösungen suchen. Das Zusammenspiel zwischen App, Backend und Server, auf dem die Daten gespeichert werden, entscheidet hierbei über Erfolg oder Misserfolg der App.

Natürlich wird die App auch nach dem ersten Roll-Out weiterhin von uns gepflegt und verbessert. So gewährleisten wir laufend funktionierende Produkte auch dann, wenn die Betriebssysteme Neuerungen enthalten, die die Funktion der App beeinträchtigen würden.

Unser Ziel, alle Daten lokal zu speichern und im Anschluss eine funktionierende Übertragung sicherzustellen, konnten wir mit den neuen Vorgehensweisen erreichen und unseren Kunden ein Produkt zur Verfügung stellen, welches allen Anforderungen gerecht wird.

Projekt “Erste App” – erfolgreich abgeschlossen!