# Mobile-App-Entwicklung

Mobile App-Entwicklung ist der Vorgang oder Prozess, durch den eine mobile App für mobile Endgeräte, wie bspw. Tablets oder Smartphones, entwickelt wird. Wie allgemein bei der Softwareentwicklung muss bei der Erstellung von mobilen Apps eine große Anzahl an unterschiedlichen Endgeräten berücksichtigt werden.
Die Entwicklung mobiler Apps ist ein Wachstumsmarkt und mobile Apps generierten 2019 mehr als die Hälfte des weltweiten Internet-Datenaufkommens. Im Jahr 2022 sollen die Umsätze im App-Markt bei 385,2 Milliarden US-Dollar liegen und bis 2026 auf über 500 Milliarden US-Dollar steigen.

## Abgrenzung

Mobile-App-Entwicklung wird von der Softwareentwicklung für Desktop-Computer oder eingebettete Systeme in der Literatur unterschiedlich abgegrenzt. Mit dem technischen Fortschritt verschwimmen diese Grenzen auch zusehends.
* Batteriebetrieb: Im Gegensatz zu Desktop-Geräten haben mobile Geräten oft nur eine Batterie als Energiequelle und mobile Betriebssysteme (Android, iOS etc.) sind auf minimalen Energieverbrauch optimiert. Apps von Drittanbietern sollten ebenfalls entsprechend „schonend“ mit dem begrenzten Energievorrat umgehen.
* Sensoren: Im Gegensatz zu Desktop-Geräten haben mobile Geräte oft eine große Anzahl von unterschiedlichen Sensoren, die mit einer App direkt interagieren können. Bekannte Sensoren sind GPS, Kompass, Beschleunigungssensor oder Neigungsmesser.
* Konnektivität: Im Gegensatz zu Desktop-Geräten haben mobile Geräte oft große Anzahl von Verbindungsmöglichkeiten, wie GSM, UMTS, LTE, WLAN, Bluetooth, NFC. Dadurch, dass die mobilen Geräte nicht standortgebunden sind, ergeben sich große Herausforderungen für die Software, da Verbindungen jederzeit (auch unbeabsichtigt) abgebrochen oder überlagert werden können.
* Sicherheit: Durch die hohe Konnektivität ergeben sich auch besondere Anforderungen an die Sicherheit von mobilen Apps, da eine Vielzahl an „Einbruchszenarien“ denkbar ist.
* App Stores: Während „eingebettete Systeme“ meist ausschließlich mit werkseitiger Software laufen, können auf mobilen Betriebssystemen eine Vielzahl von Apps (Programme, Applikationen) vom Benutzer installiert und auch wieder entfernt werden.
* User-Interaktion: Mobile Apps werden meist mit Gestensteuerung bedient, im Gegensatz zu klassischen Desktop-Geräten, die meist mit Tastatur und Keyboard bedient werden. Bei der App-Entwicklung muss Rücksicht auf die kleine Bildschirmgröße mobiler Geräte genommen werden und die Bedienung entsprechend an die Ein- und Ausgabemöglichkeiten angepasst werden.
Anders als bisherige Generationen macht die überwiegende Mehrheit der Generation Alpha und Teile der Generation Z ihre ersten Erfahrungen mit Software und Computern mit mobilen Endgeräten und Mobile Apps. Bisherige Generationen kamen in der Regel als erstes mit PCs, Laptops und Desktop-Software in Berührung. Dieser Trend führt dazu, dass auch Desktop-Softwares immer häufiger Eigenschaften wie etwa das Design von Mobile Apps übernehmen. Während 2011 noch kein eigener Studiengang für App-Entwickler existierte, wird inzwischen Mobile-App-Entwicklung als Studium oder Studiengang angeboten. Auch auf Jobportalen wird der Beruf des Mobile-App-Entwicklers von der allgemeinen Softwareentwicklung abgegrenzt.

## Entwicklungsprozess

Die Entwicklung mobiler Apps entspricht im Wesentlichen der Entwicklung von Software im Allgemeinen. Je nach Vorgehensmodell kann die Reihenfolge und Gewichtung der folgenden Prozesse unterschiedlich ausfallen: Planung, Analyse, Entwurf, Programmierung, Validierung und Verifikation.
Ein möglicher Ablauf könnte folgendermaßen aussehen:
* Analyse
** Projektumfang: Zielgruppe, Projektziele, Zwischen- und Endergebnisse definieren.
** Projekt-Roadmap: Projektziele, Meilensteine und Ergebnisse im Zeitplan einordnen.
** Use Case: Funktionsanforderungen und User Interaktionen festlegen.
** Projekt-Architektur: Strukturieren der beteiligten Systeme – Applikationen, Server, Datenbanken – und deren Beziehungen untereinander
* UX Design
** Wireframes: Inhalte und Funktionalitäten der App-Seiten in einer Grundstruktur organisieren.
** Klickbarer Prototyp: Auf Basis der Wireframes einen klickbaren App-Prototyp anfertigen. Diesen für User Akzeptanztests verwenden.
* UI Design
* Softwareentwicklung
** Minimum Viable Produkt (MVP): Minimal funktionstüchtiges Produkt veröffentlichen und testen.
** Frameworks: Je nach Use Case ein Framework wählen oder die App nativ programmieren. Dabei die vorgegebenen Programmiersprachen der App Stores verwenden.
** Programmiersprachen: Android Apps in Kotlin (früher: Java) und iOS Apps in Swift (früher: Objective-C) programmieren.
** Agile Entwicklung: Mobile App agil entwickeln. Dabei Unstimmigkeiten im UX Design beseitigen und weitere Funktionen hinzufügen.
** Tests: Die App nach jedem Entwicklungsschritt (Meilenstein) testen und verbessern.

## Technologie
### Native App

Unter nativen Apps versteht man normalerweise Apps, die mit jenen Werkzeugen und Programmiersprachen erstellt wurden, die von den Herstellern der jeweiligen Plattformen empfohlen und unterstützt werden. Durch die direkte Unterstützung der Entwicklungswerkzeuge durch die Hersteller haben native Apps meist als erster Zugriff auf neue Funktionen (z.B: neue Sensoren, spezielle Kamerafunktionen etc.) der jeweiligen Plattform. Weiters weisen native Apps ein gut ausbalanciertes Verhältnis von Ressourcenverbrauch und Geschwindigkeit auf. Bei Android wird die Programmierumgebung Android Studio empfohlen und es werden die Programmiersprachen Kotlin, Java, sowie C und C++ unterstützt. Bei iOS wird die Programmierumgebung XCode empfohlen und es werden die Programmiersprachen Swift und Objective-C unterstützt.

### Hybride App

Hybride Apps verwenden hybride Frameworks wie Ionic Capacitor und Apache Cordova. Sie kommen vorrangig bei kleineren App-Projekten ohne komplexe technologische Anforderungen zum Einsatz und werden in HTML, CSS und JavaScript entwickelt. Hybride Apps werden mithilfe eines Wrapper verpackt, sind also von ihm umgeben. Der Wrapper öffnet Webseiten und stellt diese dann in einem App-Container bereit. Ein ähnlicher, wrapper-basierter, Aufbau findet sich auch bei kommerzieller Software, die Websites in Apps umwandelt, wieder. Diese Ansätze sind von neuartigen hybriden Frameworks wie Flutter zu unterscheiden. Dort erfolgt die App-Entwicklung mit der Programmiersprache Dart und es wird kein webbasierter Wrapper mehr verwendet. Eine hybride App muss nur einmal entwickelt werden und steht dann gleich für beide Betriebssysteme bzw. Plattformen, also Android und iOS, zur Verfügung. Wird die mobile App weiterentwickelt, dann treten oft die Einschränkungen des Frameworks in den Vordergrund und der Preisvorteil schwindet. Die App von Airbnb basierte ursprünglich auf dem Framework React Native. Inzwischen hat AirBnB diese aber durch eine native App ersetzt.

### Web App

Web Apps entsprechen, technisch gesehen, mobile Webseiten, die über einen Webbrowser aufgerufen werden, sind aber in ihrer Bedienung einer nativen App ähnlicher als einer Webseite. Web Apps werden nur einmal entwickelt und können mit jedem Betriebssystem verwendet werden. Progressive Web Apps (PWA) erlauben erweiterte Offline-Funktionen, können dementsprechend auf Schnittstellen der Endgeräte zugreifen, um mit ihnen zu interagieren und liefern eine noch bessere Nutzererfahrung (User Experience). Der Zugriff auf die Schnittstellen wird durch JavaScript Frameworks und HTML 5 realisiert. PWA funktionieren auch offline und werden häufig ergänzend zu einer Webseite und zu einer mobilen App eingesetzt.