Einführung Cross-Platform Entwicklung: Vor- und Nachteile von Cordova, NativeScript, React Native, Xamarin, etc
Soll eine App entwickelt werden, so stellt sich automatisch eine erste Frage: für welche Betriebssysteme soll die App entwickelt werden? In den allermeisten Fällen möchte man alle relevanten Betriebssysteme abdecken, denn nur so können möglichst viele Nutzer erreicht werden. Das bedeutet aber auch, dass mehrere Apps entwickelt werden müssen.
Das Cross-Platform Versprechen
Eine App für alle Plattformen (Cross-Platform) hört sich doch vielversprechend an. Im Gegensatz zur nativen Entwicklung, wo für jede Plattform eine eigene App nötig ist, wird nur einmal entwickelt und man hat ein Produkt, das überall läuft.
Cross-Platform Entwicklung hat seine eigenen Herangehensweisen und Herausforderungen. Es gibt große Unterschiede bezüglich der Technologien und ihrer Handhabung. Je nach gewähltem Ansatz spricht man entweder von „write once, run everywhere" oder „learn once, write everywhere".
Write once, run everywhere
Wie man sich schon denken kann wird bei dieser Methode nur einmal entwickelt, und die App läuft überall. Eine Herangehensweise, um dies zu erreichen, ist die Nutzung von Webtechnologien. Die App wird mit HTML5 , CSS und JavaScript entwickelt und anschließend mit Cordova oder PhoneGap in einen nativen Container verpackt, der die App in einer Webview rendert. Üblicherweise wird dabei auf ein UI Framework wie Ionic zurückgegriffen, das gängige Mobile UI Komponenten in Webtechnologien implementiert. Werden native Funktionalitäten benötigt, können diese mit der Hilfe von Plugins zugänglich gemacht werden.
Titanium und NativeScript Apps werden ebenfalls in JavaScript programmiert. Das Rendering der UI erfolgt hier allerdings mit Hilfe nativer UI Komponenten. Neben einer Reihe generischer Komponenten sowohl für iOS als auch für Android (Titanium unterstützt außerdem auch Windows Phone) stellen diese Frameworks auch die vollständigen nativen APIs transparent in JavaScript zur Verfügung, so dass beliebige native Funktionalitäten allein in JavaScript abgebildet werden können. Denselben Ansatz verfolgt Xamarin. Nur wird die Business Logik hier in C# geschrieben.
Learn once, write everywhere
Bei React Native steht weniger die Portierbarkeit als vielmehr eine einheitliche technologische Plattform sowie die mit ReactJS eingeführte Architektur im Mittelpunkt. Die Entwicklung erfolgt mit JavaScript und nativen Programmiersprachen. Die Auswahl an generischen Komponenten sowohl für Android als auch iOS ist sehr eingeschränkt, die meiste Zeit kommen plattformspezifische Komponenten zum Einsatz. React Native spielt eine Sonderrolle, da es hauptsächlich durch seine Philosophie geprägt ist und sich nicht direkt mit den anderen Cross-Platform Technologien messen will.
Webtechnologien bieten die größte Flexibilität
Eine mit Webtechnologien entwickelte App hat den Vorteil, dass sie sich ohne weitere Anpassungen auf alle Plattformen übertragen lässt. Je nach Entwicklungsschwerpunkt ist es dabei sogar möglich, sie als Web App über den Browser auszuliefern. Der Nutzer merkt von alledem nichts, denn das Look-and-Feel nativer Apps kann nahezu vollständig nachgebildet werden, die Performance ist für gängige Anwendungszwecke absolut ausreichend.
Native UI holt gegenüber Webtechnologien die maximale Performance aus einer Plattform. Allerdings sind auf diese Art entwickelte Apps in der Regel nicht ganz so einfach auf andere Plattformen übertragbar, wie die Frameworks es versprechen. Denn die zur Verfügung stehenden generischen UI Komponenten reichen für die meisten Anwendungsfälle nicht aus und es muss zusätzlich plattformspezifischer Code geschrieben werden. Der volle Zugriff auf native APIs ist ein mächtiges Werkzeug, aber wiederum auch alles andere als plattform-unabhängig. In manchen Anwendungsfällen sind NativeScript, Xamarin, etc aber dennoch im Vorteil. Nämlich dann, wenn besonders viele oder besonders einzigartige native Funktionalitäten kombiniert werden sollen, denn die Entwicklung von Plugins für Cordova oder PhoneGap ist hier ungleich aufwändiger.