16.07.2023

.NET MAUI, Flutter, React Native, Jetpack Compose oder SwiftUI?

JFIF File

Zu Beginn eines jeden App-Projekts besprechen wir mit unseren Kunden die technische Basis ihrer Apps. Dies ist aus unserer Sicht unabdingbar, denn der Kunde muss mitentscheiden können, welcher Ansatz für ihn der richtige ist, denn einmal getroffen, muss man mehrere Jahre mit dieser Entscheidung leben oder migrieren, was mit zusätzlichen Kosten verbunden ist.

Im Wesentlichen gibt es 2 Ansätze. Zum einen die native Entwicklung mit den Werkzeugen und Programmiersprachen, die die Betriebssystemhersteller Google, Apple und Microsoft für ihre Betriebssysteme Android, iOS und Windows anbieten und zum anderen die Erstellung von Apps mit Werkzeugen von Drittanbietern wie Facebook, Apache Foundation, Unity Technologies und so weiter.

Cross-Plattform

Werkzeuge von Drittanbietern zeichnen sich in der Regel dadurch aus, dass sie mit einer Codebasis mehrere Plattformen bedienen können. Man spricht dann von plattformübergreifender oder plattformunabhängiger Entwicklung. Wie diese Frameworks implementiert sind, ist im Detail unterschiedlich. Grob unterteilt: Die einen tun so als ob und emulieren eine native Anwendung, die anderen sind eine Schnittstelle zu nativen Bibliotheken und fungieren als Übersetzer.

Allen gemeinsam ist, dass die Lösungen von Drittanbietern den Entwicklungen der Betriebssystemhersteller hinterherlaufen. Denn ein neues Feature für iOS oder Android (z.B. Dark Mode, Face ID) wird zunächst im Betriebssystem implementiert, die Neuerungen werden dann früher oder später von den Drittanbietern aufgegriffen und ganz am Ende kann Ihr App-Entwickler darauf zugreifen. Das kann dazu führen, dass Kunden auf später vertröstet werden müssen, wenn sie das neueste iOS- oder Android-Feature in ihrer App implementiert haben möchten.

Heute (Sommer 2023) ist Material Design 3 noch nicht vollständig für Flutter verfügbar. Material 3 wurde auf der Google I/O im Mai 2021 vorgestellt und mit Android 12 im Oktober desselben Jahres veröffentlicht. Es sind nur Kleinigkeiten, aber manchmal sind sie entscheidend. Bring Material 3 to Flutter

Häufig werben App-Entwickler damit, dass die plattformübergreifende Entwicklung besonders kostengünstig sei, was für die Neuentwicklung auf der grünen Wiese auch zutreffen mag. Nach unserer Erfahrung sind jedoch die Kosten für die Pflege und Wartung der Apps höher, der administrative Aufwand also größer. Dies resultiert aus einer komplexeren Toolchain, einem größeren Werkzeugkasten, da bei einem Update der iOS- oder Android-Version neben den Tools und Bibliotheken des Herstellers auch alle Tools und Bibliotheken von Drittanbietern aktualisiert werden müssen.

Insbesondere Projekte, die auf JavaScript basieren, neigen dazu, dass neue Versionen häufiger mit „breaking changes“ einhergehen und migriert werden müssen.

Warum ist die Cross-Plattform Entwicklung nun so beliebt?

Neben der bereits erwähnten Kosteneffizienz basieren die meisten Lösungen von Drittanbietern auf Java Script, so dass bereits vorhandene Kenntnisse genutzt werden können. Objective-C, Swift, Kotlin und Java müssen nicht erst erlernt werden. Dies ist besonders für Teams mit Webentwicklern spannend, da so JavaScript-Kenntnisse in einem breiten Spektrum genutzt werden können.

Für große Unternehmen wie Facebook, Google oder Microsoft ist es verständlich, eine Lösung mit einer gemeinsamen Codebasis zu wollen. Denn diese Unternehmen haben natürlich viel Code, den sie in den verschiedensten Anwendungen mehrfach wiederverwenden wollen.

Andererseits war das Arbeiten mit Project Builder (heute XCode) und Android Studio in vielen Fällen unkomfortabel und ungewohnt, insbesondere das Erstellen von Storyboards für iOS.

Ab 2014 begannen wir, Android- und iOS-Apps mit Xamarin.Forms zu entwickeln. Xamarin.Forms wurde von der gleichnamigen Firma Xamarin entwickelt und vermarktet. Xamarin wurde später von Microsoft übernommen und schließlich in .NET MAUI umbenannt.

Die Entscheidung für Xamarin.Forms hatte für uns als Entwickler folgende Vorteile:

  1. Wir konnten mit der Programmiersprache C# und dem .NET Framework entwickeln. Mit beiden waren wir vertraut.
  2. Wir konnten Visual Studio für die Entwicklung nutzen. Eine der etabliertesten Entwicklungsumgebungen, die es gibt.
  3. Vorhandener C#/.NET-Quellcode unserer Kunden konnte in vielen Fällen unverändert verwendet werden und musste nicht neu geschrieben werden.

Allerdings trafen auch hier die oben genannten Nachteile zu.

Aktuell

In den letzten Jahren haben sich die Tools von Apple und Google jedoch so verbessert, dass wir sie gerne einsetzen.

Klassischerweise werden in der App-Entwicklung nach der Planungsphase Storyboards, Mockups, Wireframes und Low- oder High-Fidelity-Prototypen erstellt, um die App für den Kunden und das Entwicklungsteam zu visualisieren. Dazu wird spezielle UX/UI Software wie z.B. Figma oder Adobe XD eingesetzt. Dies ist heute, entsprechendes Personal vorausgesetzt, nicht mehr notwendig. Denn Apples Swift UI und Googles Jetpack Compose sind mittlerweile so leistungsfähig und benutzerfreundlich, dass Prototypen direkt in XCode und Android Studio erstellt werden können. Dies hat den offensichtlichen Vorteil, dass ein Prototyp nicht nur wie eine App aussieht, sondern auch eine ist und das Ergebnis nicht nur betrachtet, sondern auch via Test Flight ausprobiert werden kann. Fehlende Animationen, Übergänge und fehlerhaftes Navigationsverhalten sind kein Thema mehr und wenn der Prototyp gefällt, kann er direkt eingesetzt werden.

Letztendlich ist es toll, dass Kunden und Entwickler aus einer breiten Palette von Lösungen wählen können. Leider wird die Auswahl dadurch nicht einfacher.

Da wir ohne Kenntnis Ihrer Situation an dieser Stelle keine Empfehlungen aussprechen können, hier einige Überlegungen, die Ihnen vielleicht weiterhelfen:

Wann ist der native Ansatz mit SwiftUI oder Jetpack Compose für mein Unternehmen der richtige?

Wenn Ihre App grundsätzlich Zugriff auf die neusten Funktionen haben soll, Sie keine gemeinsame Code-Basis benötigen oder Ihre App nur für Android oder iOS entwickelt werden soll kann dieser Ansatz für Sie der richtige sein. Insbesondere wenn Sie planen Ihre App auch für die Apple Watch oder Apple TV bereitzustellen. Wollen Sie zeitnah eine Unterstützung für Apples VisionOS ist die native Entwicklung mit Swift und SwiftUI sicher die geeignete Wahl.

Wann ist Flutter die Lösung für unser Unternehmen?

Nutzen Sie bereits Google Firebase Services kann Flutter für Sie eine gute Wahl sein. Ebenso wenn Sie neben iOS und Android weitere Plattformen wie Linux, MacOS und Windows bedienen möchten.

Wann ist React Native für unser Unternehmen eine gute Wahl?

React Native ermöglicht eine native UI-Performance für Android und iOS, indem App-Komponenten direkt in nativen Code übersetzt werden. Dies gewährleistet flüssige Animationen und eine reaktionsfähige Benutzererfahrung. Vorhandener JavaScript- oder React-Code kann ebenfalls verwendet werden. React Native ist auch dann interessant, wenn eine native UI-Performance benötigt wird, da die Komponenten in nativen Code übersetzt werden.

Wann ist .NET MAUI das richtige für unser Unternehmen?

.NET MAUI kann für Sie das richtige sein, wenn Ihr Unternehmen bereits in .NET geschriebene Projekte im Einsatz hat, hier ist die Chance groß, dass vorhandene Programme oder Teile davon für Ihre Apps genutzt werden können. Zudem bietet sich .NET MAUI an, wenn Sie neben Android und iOS Ihre App auch für Windows-Geräte entwickelt haben wollen. Setzen Sie Microsoft Azure Cloud-Dienste ein, kann dies auch ein Argument für .NET MAUI sein.

Betriebssystemunterstützung nach Framework

- .NET MAUI Flutter React Native Jetpack Compose SwiftUI
Android Ja Ja Ja Ja Nein
iOS Ja Ja Ja Nein Ja
iPadOS Ja Ja Ja Nein Ja
macOS Ja Ja Ja Nein Ja
visionOS Nein Nein Nein Nein Ja
watchOS Nein Nein Nein Nein Ja
Windows Ja Ja Ja Nein Nein
Linux Ja Ja Nein Nein Nein

Der Stand der Tabelle ist Juli 2023, die Inhalte können sich jederzeit ändern, da an den Frameworks kontinuierlich gearbeitet wird. Und nur weil eine Plattform grundsätzlich unterstützt wird, heißt das nicht, dass es im Detail keine Einschränkungen gibt.

An error has occurred. This application may no longer respond until reloaded. Reload 🗙