Native iOS versus Cross-Plattform Entwicklung

Benjamin Doppler
Donnerstag, 12. Dezember 2019

Bei der Entwicklung von Apps steht man am Anfang immer vor einer wichtigen Technologieentscheidung. Will man nur eine Plattform unterstützen, kann man Native Apps entwickeln. Um einen Großteil des mobilen Markts abzudecken, müssen aber zumindest iOS und Android unterstützt werden. Cross-Plattform Frameworks bieten genau zu diesem Zweck die Möglichkeit mit einer gemeinsamen Codebasis iOS, Android und manchmal auch Windows oder Web Apps zu bauen. Aber auch wenn anfangs nur eine Plattform benötigt wird, sollte überlegt werden ob man in Zukunft nicht vielleicht doch expandieren will. Dann würde es sich nämlich bezahlt machen, gleich zu Beginn auf eine Cross-Plattform Lösung zu setzen. Der folgende Artikel ist mit Fokus auf iOS formuliert, da es oft die erste gewünschte Plattform ist.

Dies hat auch seine Berechtigung, denn der Einsatz von Apple in Unternehmen bietet durchwegs viele Vorteile. Nicht ohne Grund, setzen 70% der Top Unternehmen in Österreich auf iOS only. Doch wo liegen die Vorteile der iOS-Plattform im Einzelnen?

Oft wird angeführt, dass iPhone und iPad im Vergleich zu anderen Geräten zu teuer seien. Im Unternehmenseinsatz, wo weit mehr Kostenfaktoren zu berücksichtigen sind, zeigt sich jedoch, dass die Anschaffung der Apple-Geräte sogar günstiger ist. Für die Berechnung der Gesamtkosten (TCO, Total Cost of Ownership) ist neben dem Anschaffungspreis auch der Restwert am Ende der Lebenszeit zu berücksichtigen, zu dem man das Gerät noch verwerten kann. Ebenso zählen Schulungs-, Support- und Managementkosten sowie die Ausgaben für Software, Zubehör und Reparaturen dazu. Damit relativiert sich der höhere Anschaffungspreis.

Denn einem höheren Kaufpreis steht ein deutlich höherer Restwert gegenüber, der den Preisunterschied zu Android-Geräten zum Teil schon mehr als wett macht. Aber auch die deutlich geringeren Aufwendungen für User-Support und Geräte-Management sind bedeutende Kostenfaktoren, bei denen die Apple-Plattform eindeutig die Nase vorn hat.

iOS hat den Vorteil, dass Hardware und Betriebssystem aus einer Hand kommen. Anders bei Android-Geräten, entstehen unzählige Varianten, durch unterschiedliche Hersteller oder Brandings von Mobilfunkprovidern. Dies macht sich natürlich sowohl im Support der Geräte, bei Updates (Dauer der Unterstützung und Sicherheitsupdates) bemerkbar.

Mehr Infos rund um den Einsatz von Apple-Geräten in Unternehmen können Sie hier nachlesen.

Aber zurück, zu unserem ursprünglichen Thema, ob man native Apps programmieren soll oder lieber auf Cross-Plattformen setzen soll.

Das Performance Thema

Gleich zu Beginn möchte ich noch mit einem Mythos aufräumen, der immer aufkommt, wenn von Cross-Plattform Entwicklung die Rede ist - und zwar die schlechte Performance. Wir haben zur Evaluierung eine Demo-App einmal Native und dreimal mit Cross-Plattform Technologien gebaut. Die App lädt mehrere tausende Einträge von einem Web-Service, zeigt diese in einer scrollbaren Liste an und greift auf native Funktionen wie das Filesystem, die Kamera und diverse Sensoren zu. Getestet haben wir die vier Apps auf einem fünf Jahre alten iPhone. Performanceunterschiede gab es nur bei der Startzeit und bei exzessivem Scrolling. Capacitor ist dabei ein bisschen anfälliger, da hier zusätzlich noch die JavaScript Engine zwischen dem Gerät und der App steht.

Ansonsten verhalten sich die Apps aber ähnlich. Insofern muss die Performance nicht die erste Entscheidungsgrundlage sein, außer man will eine ressourcenhungrige Echtzeitanwendung bauen. Mit dieser Klarstellung im Voraus, möchte ich nun Cross-Plattform Frameworks und Native iOS Entwicklung kurz vor- und gegenüberstellen.

1. Ionic Capacitor

Ist der spirituelle Nachfolger von Apache Cordova und bietet iOS, Android und das Web als mögliche Zielplattformen. Eine Capacitor App ist prinzipiell ein Container, in dem eine Website läuft. Deshalb kann man Capacitor als Webentwickler praktisch ohne Einarbeitung verwenden. Nur sobald man auf native Funktionen wie Filesystem, Kamera oder Gyroskop zugreifen will, braucht man meistens ein Plugin. Die Einbindung dieser Plugins ist aber meist kein großer Aufwand.

Das Ionic Framework kann, aber muss nicht in Kombination mit Capacitor eingesetzt werden. Es hilft einem lediglich, schneller Apps zu bauen, indem es viele praktische Controls anbietet und das Styling vereinfacht. Das Entwickeln generell ist sehr angenehm und schnell, da man die App jederzeit im Browser starten und debuggen kann. Das ist auch der große Vorteil an Capacitor. Eigentlich kann man damit aus jeder Website eine App machen, solange das Styling entsprechend responsive ist.

2. React Native

Wird hauptsächlich von Facebook entwickelt und unterstützt iOS und Android als Plattform. Es befindet sich momentan in Version 0.60, dennoch wird es bereits produktiv in vielen kommerziellen Apps verwendet. React Native ist extrem populär und entwickelt sich rasant weiter. Das ist prinzipiell positiv, allerdings muss man damit rechnen, dass sich grundlegende Aspekte jederzeit ändern können. Unsere Demo-App haben wir für einen Workshop mit Version 0.59 vorbereitet. Zwei Wochen später war beim Workshop-Termin bereits Version 0.60 verfügbar und eines der Plugins war damit nicht mehr kompatibel. Wenn man die Zeit und die Ressourcen hat, jederzeit auf solche Änderungen zu reagieren, ist das vielleicht kein Problem. Die potenziellen Risiken, die ein so volatiles Fundament birgt, müssen einem aber bewusst sein.

Entwickeln mit React Native fühlt sich an wie Web-Entwicklung. Programmiert wird in JavaScript und die UI-Elemente werden HTML ähnlich beschrieben. Im Vergleich zu Capacitor handelt es sich aber nicht um einen Web-Container, sondern um native Elemente, die beschrieben werden. Aus diesem Grund kann man auch kein CSS verwenden und muss manchmal auch plattformspezifische Weichen einbauen. Entwickeln mit React Native ist recht komfortabel. Durch den Hot-Reload können Änderungen schnell getestet werden.

3. Xamarin Forms

Wurde mittlerweile von Microsoft akquiriert und ist seitdem kostenlos in Visual Studio enthalten. Es lassen sich damit iOS, Android und Windows Apps bauen. Mit klassischem Xamarin müsste man das Frontend immer noch für jede Plattform extra entwickeln. Seit Xamarin Forms ist das aber nicht mehr nötig. Die Business Logik wird in C# geschrieben und das Frontend definiert man mittels XAML. An das Entwicklungskonzept von Xamarin und XAML muss man sich erst einmal gewöhnen, dafür hat man mit .NET eine sehr stabile und durchschaubare Basis. Das laufende Testen ist mit Xamarin etwas aufwendiger, da ein Remote Build über einen Mac schon seine Zeit dauern kann. Dafür wurde bereits angekündigt, dass Xamarin Forms auch einen Hot-Reload Mechanismus bekommen soll.

Xamarin bietet außerdem noch mehr Möglichkeit zu Code Sharing als anderen Technologien. Denn basierend auf .NET und C# kann man natürlich auch das zugehörige Backend entwickeln. Jegliche Logik die am Server sowie in der App benötigt wird, muss nur einmal geschrieben werden. Mit Entity Framework Core kann man sogar den beliebten OR Mapper auf einem mobilen Gerät laufen lassen. So kann auch der Datenzugriff vereinheitlicht werden, falls man zum Beispiel eine lokale Datenbank am Client benötigt.

4. Native iOS

Neben diesen und anderen Cross-Plattform Lösungen, gibt es natürlich auch die Möglichkeit Native iOS zu entwickelt. Man ist dabei auf einen Mac und entweder Swift oder Objective-C angewiesen. Swift ist moderner und ersetzt Objective-C nach und nach. Es wurde speziell für iOS und macOS entwickelt und ist daher nicht so universell einsetzbar wie C# oder JavaScript. Bestehendes Wissen kann nicht so leicht genutzt werden und der Vorrat an erfahrenen Entwicklern ist auf jeden Fall kleiner. Dafür ist man sehr nahe am Betriebssystem iOS, kann jederzeit alle neuen Features nutzen und eine reine Apple Erfahrung gestalten.

Vieles läuft über einen Designer, in dem man das UI und den Programmfluss wie in einem Mockup Tool definiert. Per Mausklick werden Komponenten hinzugefügt und verschiedene Ansichten miteinander verknüpft. Alles harmoniert problemlos, weil alles proprietär ist und aus einer Hand kommt. Man muss sich aber bewusst sein, dass eine potenzielle Ausweitung auf Android dann eine Neuentwicklung des Frontends bedeutet. Der Code kann nicht wiederverwendet werden.

Conclusio

Die Entscheidung, ob man Native oder Cross-Plattform entwickeln will und wenn ja welches Framework man einsetzt, muss von Fall zu Fall entschieden werden. Will man eine hundert Prozent markentreue Apple Erfahrung anbieten, ist Native iOS der richtige Weg. Außerdem sollten Betriebssystemupdates bei einer Native App am wenigsten Probleme verursachen. Will man Android auch unterstützen, kommen alle drei genannten Frameworks in Frage. Gibt es Potential zu Code Sharing zwischen App und Server, dann sollte man sich wohl Xamarin ansehen. Soll die App auch im Browser laufen, dann ist Capacitor wahrscheinlich die beste Wahl. Leider gibt es wie so oft keine einfache Antwort. Dafür konnten wir Ihnen hoffentlich einen besseren Überblick über die vorhandenen Optionen vermitteln. In diesem Sinne, viel Erfolg bei der nächsten Technologieentscheidung! Für Fragen stehen wir natürlich jederzeit gerne zur Verfügung und freuen uns auf Ihre Nachricht.

 

Links

  • https://capacitor.ionicframework.com/
  • https://facebook.github.io/react-native/
  • https://docs.microsoft.com/en-us/xamarin/xamarin-forms/
  • https://developer.apple.com/swift/

Weitere Blogbeiträge

zum Thema Development

Updates for innovators: Abonnieren Sie unseren Blog