Xamarin Forms, MVVMCross und SkiaSharp: Die Heilige Dreifaltigkeit der plattformübergreifenden App-Entwicklung

Veröffentlicht: 2022-03-11

Sprechen Sie über hohe Erwartungen. Die heilige Dreifaltigkeit, nicht weniger!

Die Wahrheit ist, dass die Entwicklung mobiler Apps kostspielig ist, wenn Sie auf mehrere Plattformen abzielen, da es keinen gemeinsam genutzten Code gibt. Bei Apple müssen Sie in Objective-C oder Swift programmieren, bei Android müssen Sie in Java programmieren, und bei WinPhone müssen Sie in .NET, oft C#, entwickeln. Hinzu kommt die Fülle an Bibliotheken, die jede Plattform bereitstellt, um Karten, Zeichnungen, Bilder oder GPS zu handhaben – eine enorme Menge an Zeit und Wissen ist erforderlich, um eine einzige mobile App zu erstellen.

Plattformübergreifende App-Entwicklung mit Xamarin Forms, MVVMCross und Skiasharp

Unnötig zu sagen, dass die meisten Startups es sich nicht leisten können, ihre Ausgaben zu verdreifachen, und selbst etablierte Unternehmen können es schwer haben, den Eintrittspreis in den mobilen Bereich zu rechtfertigen.

In diesem Artikel erfahren Sie, wie Xamarin Forms in Kombination mit MVVMCross und SkiaSharp eine praktikable Methode zum Erstellen plattformübergreifender mobiler Apps sein kann, ohne die Vertrautheit, Leistung und Einzigartigkeit zu beeinträchtigen. Der Artikel befasst sich mit diesen drei Technologien und wie sie die Entwicklungskosten senken können, indem sie eine maximale Code-Wiederverwendung über mehrere mobile Plattformen hinweg ermöglichen.

Ein wichtiges Problem

Das Problem der plattformübergreifenden Entwicklung mobiler Apps ist real und daher sind im Laufe der Jahre viele verschiedene Lösungen entstanden, um die Entwicklungskosten zu senken, indem Code zwischen Plattformen geteilt wird. In der Videospielbranche bieten beispielsweise alle großen Spiele-Engines eine plattformübergreifende Lösung, wobei sogar Unreal und Unity auf Mobiltelefone und Tablets abzielen.

Auf der App-Front gab es im Laufe der Jahre mehrere Versuche, diesen plattformübergreifenden Markt anzuführen. Viele sind zu kurz gekommen und im Abgrund verloren gegangen, aber einige von ihnen überleben noch nach mehreren Jahren. Darunter ist Xamarin, die einzige .NET-Lösung, die alle drei mobilen Plattformen unterstützt.

Eingeborener oder nicht, hier komme ich

Es gibt also einen Krieg zwischen verschiedenen Lösungen und wer sagt, dass Krieg Propaganda bedeutet!

Der Krieg wird meistens an der Front des großen N ausgetragen : Eingeborener sein! Sie müssen sich vor dem Wort in Acht nehmen, da es keine klare Bedeutung hat. Heutzutage ist es das am häufigsten verwendete Wort in der Welt der mobilen Entwicklung und sehr trendy. Die Wahrheit ist, dass sich niemand darüber einig ist, was es eigentlich bedeutet.

Bei der Auswahl eines plattformübergreifenden Frameworks sind nicht alle „nativen“ Optionen gleich, also passen Sie auf, Sie könnten Äpfel mit Birnen vergleichen. Für einige geht es um die Programmiersprache, für andere geht es darum, die Hardwarefunktionen nutzen zu können, andere denken, es geht um die Verwendung von Plattform-APIs/UI, und oft geht es nur darum, keine Web-App zu sein.

Es gibt Argumente auf allen Seiten der Debatte und ich werde nicht tiefer graben, weil es nutzlos ist. Warum ist es nutzlos? Nun, lassen Sie mich Ihnen eine schwer zu schluckende Tatsache sagen: Ihren Endbenutzern ist es egal!

Ja, Sie haben richtig gelesen, nur Ihre Programmierer kümmern sich darum. Ihr Endbenutzer wird Ihre App niemals aufgrund der zugrunde liegenden Technologie auswählen: Er wird Ihre App auswählen, weil sie sein Problem löst und eine gute Erfahrung bietet.

Anstatt also über die Bedeutung eines Wortes zu streiten, schauen wir uns an, wie Xamarin eine effiziente Möglichkeit bietet, Ihren Benutzern das zu geben, was ihnen wichtig ist.

Der Vater, der Sohn und der Heilige Geist

Bevor wir fortfahren, wollen wir nur die drei Elemente verdeutlichen, aus denen unsere Lösung für das Problem der plattformübergreifenden Entwicklung besteht.

Der Vater: Xamarin

Wie bereits erwähnt, ist Xamarin eine .NET-Lösung für die Entwicklung von Mobil- und Desktop-Apps. Es wurde 2016 von Microsoft gekauft, ist aber mit dem Mono-Projekt vor etwa vier Jahren datiert. Heutzutage bietet es drei Lösungen: Xamarin.iOS, Xamarin.Android und Xamarin.Mac. Die anderen Plattformen verarbeiten bereits standardmäßig .NET-Apps und sind Microsoft-Lösungen. Kurz gesagt, Xamarin bietet eine direkte Verbindung zu Plattform-APIs in .NET. Sie können daher native Funktionen einer .NET-App verwenden. Es gibt auch ein Erweiterungsmodul für Xamarin namens Forms, das eine Abstraktionsebene für die Benutzeroberfläche bereitstellt.

Der Sohn: SkiaSharp

Skiasharp ist ein .NET-Wrapper für die Skia-Vektorgrafikbibliothek von Google. Skia ist die native Rendering-Engine von Android, Chrome, ChromeOS und Firefox. Mit Skiasharp können Sie die Bibliothek in Ihrer .NET-App verwenden, um sie plattformübergreifend zu machen. Das bedeutet, dass der hübsche Schatten, von dem Ihr Designer sagt, dass „Ihre App sooooo viel besser wird“, nur einmal codiert werden kann, anstatt für jede Zielplattform wiederholt zu werden. Persönlich denke ich, dass die beste Funktion die Fähigkeit ist, SVG-Grafiken so zu rendern, dass Sie die Duplizierung der verschiedenen Formfaktoren verhindern und gleichzeitig ein gestochen scharfes, pixelgenaues Rendering beibehalten können.

Der Heilige Geist: MVVMCross

Um alles gut getrennt und lose gekoppelt zu halten, stützt sich unsere geweihte Lösung auf MVVMCross. Dieses Framework implementiert eine MVVM-Infrastruktur (Model-View-ViewModel), sodass alles unabhängig gehalten werden kann. Ohne zu technisch zu werden, werden Apps im Allgemeinen in drei Teile unterteilt:

  1. Das Modell: Eine Speicherdarstellung unserer Daten
  2. Die Ansicht: Unsere Benutzeroberfläche, die den Benutzern die Daten und Aktionen präsentiert
  3. Das ViewModel: Die Schicht, die unser Modell an unsere Ansicht bindet und umgekehrt

In der Softwareentwicklung bemühen wir uns immer, die Ansicht vom ViewModel zu trennen, damit die Anwendungslogik (im ViewModel) auch dann wiederverwendet werden kann, wenn wir die visuelle Darstellung ändern. MVVMCross hilft uns dabei, genau das zu erreichen, indem es Datenbindungen handhabt und Muster und Tools für die Plattformabstraktion bereitstellt.

Worauf Endnutzer Wert legen

Um es noch einmal zusammenzufassen: Es gibt verschiedene Dinge, die erfolgreiche Apps von schlechten unterscheiden. Eine gelungene App:

  1. Löst ein echtes Problem
  2. Bietet ein angenehmes Erlebnis

Punkt 1 hat offensichtlich nichts mit dem Rahmen zu tun, den Sie wählen. Konzentrieren wir uns also auf Punkt 2. Es gibt drei Hauptaspekte, die zum Spaß an Ihrer App beitragen:

  1. Vertrautheit
  2. Leistung
  3. Einzigartigkeit

Vertrautheit

Vertrautheit bezieht sich auf die Benutzerfreundlichkeit und das schnelle Zurechtfinden in der App.

Mit anderen Worten, es geht darum, die unterschiedlichen User-Interface-Paradigmen der Plattform systemweit kohärent zu nutzen. Beispielsweise tragen einfache Dinge wie Schaltflächenpositionen, Listenkontextaktionen oder Navigation zur Vertrautheit Ihrer App bei.

Vertrautheit ist der größte Schwachpunkt von Web-Apps oder Frameworks, die auf einer Weboberfläche basieren. Xamarin Forms hingegen bietet plattformübergreifende Zuordnungen zu vom Anbieter bereitgestellten UI-Elementen.

Ihre Benutzer erhalten daher ein Erlebnis, das dem allgemeinen Erscheinungsbild der Plattform entspricht, sodass sie sich in Ihrer App intuitiv wohlfühlen.

Leistung

Ehrlich gesagt bedeutet die Erwähnung von „einheimisch“ in Ihrer Marketingpropaganda nichts. Nehmen Sie als Beispiel Jasonette, die „nativ über HTTP“ ist. Die Benutzeroberfläche wird auf einem Webserver gespeichert … hallo Roundtrips und Verlangsamungen, wir sehen also, dass native nicht unbedingt eine bessere Leistung bedeuten kann!

Nachdem dieser Mythos aus dem Weg geräumt ist, stellt sich Xamarin bei der Betrachtung von Benchmarks aus dem wirklichen Leben als die am besten abgerundete Lösung in Bezug auf die Leistung heraus. Xamarin Forms, die nicht wesentlich mehr Kontextwechsel erfordern, bieten eine vergleichbare Leistung wie muttersprachliche Apps.

Meine Schlussfolgerung ist, dass eher Ihre Implementierungsentscheidungen Ihre App verlangsamen können als Xamarin im Vergleich zur nativen Sprache. Andere Optionen da draußen sind in Bezug auf die Leistung klar im Nachteil.

Einzigartigkeit

Die Möglichkeit für Ihre Designer, eine einzigartig aussehende App zu erstellen, ist ebenfalls sehr wichtig, wenn Sie die bestmögliche Benutzererfahrung bieten und Ihre App von anderen abheben möchten.

Einzigartigkeit bedeutet oft, individuell aussehende Steuerelemente, Animationen oder Gesten zu erstellen. Wenn es in Xamarin nicht ohne Weiteres verfügbar ist, können Sie SkiaSharp (ein Wrapper um die Skia-Vektorgrafik-Renderingbibliothek von Google) verwenden und das benutzerdefinierte Rendererkonzept von Xamarin Forms nutzen, um so nah wie nötig an die Hardware heranzukommen, während Sie immer in einem einzigen Code codieren Sprache, was die anderen Lösungen nicht bieten können.

Worauf Sie als Unternehmen Wert legen

An dieser Stelle denken Sie höchstwahrscheinlich, dass die Wahl des Frameworks auch eine geschäftliche Entscheidung ist. Abgesehen von Faktoren, die außerhalb des Rahmens dieses Artikels liegen, wie der Verfügbarkeit von Personal, hat Xamarin viel zu bieten, insbesondere in Verbindung mit MVVMCross. Ich werde auf vier Aspekte eingehen, die Sie bei Ihrer Entscheidung berücksichtigen sollten:

  1. Preis und Entwicklungskosten
  2. Wiederverwendung von Code
  3. Komponentenverfügbarkeit
  4. Unterstützung und Gemeinschaft

Preis und Entwicklungskosten

Lassen Sie uns das aus dem Weg räumen. Seit Anfang dieses Jahres ist Xamarin für Freiberufler und kleine Unternehmen wie Start-ups (mit Visual Studio Community Edition) kostenlos. Für größere Organisationen ist es „kostenlos“ mit einer Visual Studio-Lizenz erhältlich, die Sie möglicherweise bereits haben. Xamarin Forms, MVVMCross und SkiaSharp sind ebenfalls alle kostenlos und Open Source, um das Ganze abzurunden!

Wie ich bereits erwähnt habe, können Sie Ihre Apps mit Xamarin auf dem .Net-Weg von Anfang bis Ende in einer einzigen Sprache entwickeln. Bei den meisten anderen Lösungen da draußen müssen Ihre Programmierer verschiedene Sprachen beherrschen. Im Fall von Cordova müssen Sie beispielsweise nicht nur HTML, Javascript, CSS, sondern möglicherweise auch Objective-C, Java und/oder C# fließend beherrschen, wenn Sie auf Anbieter-APIs zugreifen müssen, für die kein Plugin verfügbar ist .

Die Vielfalt der verwendeten Sprachen sorgt für mehr Kontextwechsel und mehr zu beherrschende Tools, was zu einer geringeren Effizienz führt. Xamarin hingegen ist eine All-in-One-Lösung: Von Visual Studio aus erstellen, implementieren und debuggen Sie auf allen Plattformen.

Obwohl es nicht direkt mit Xamarin verwandt ist, erhalten Sie auch viele Funktionen in C#, die die Entwicklung beschleunigen, wenn Sie sich für die .Net-Lösung entscheiden. Sie profitieren nämlich von den großartigen Features in C# 4.5+ wie einfachem Multi-Threading mit async/await, Closures und Reflection, die alle nachweislich die Effizienz verbessern.

Wiederverwendung von Code

Wahrscheinlich haben Sie über die Wiederverwendung von Code nachgedacht, und höchstwahrscheinlich halten Sie alle Lösungen in dieser Hinsicht für gleichwertig. Tut mir leid, Kumpel zu sagen, aber du liegst falsch!

Die Programmierer unter Ihnen haben sich vielleicht gefragt, warum um alles in der Welt ich die Verwendung von MVVMCross über der in Forms integrierten MVVM-Schicht vorschlagen würde? Nun, hier ist etwas zu beachten: Bauen Sie wirklich nur mobile Apps?

Indem Sie Ihre App-Logik mit MVVMCross isolieren und die von ihm bereitgestellte Inversion of Control verwenden, können Sie eine maximale Menge an Code auf Mobilgeräten, aber auch auf Windows und Mac wiederverwenden (weil Xamarin.Mac Ihr Freund ist).

Es spart Ihnen nicht nur Geld, sondern stellt auch bewährte technische Praktiken vor, die Ihre Code-Wartungskosten senken.

Komponentenverfügbarkeit

Vielleicht bist du nicht wie ich, aber ich hasse es, das Rad neu zu erfinden. Daher ist der Zugriff auf vorhandene Komponenten, die Sie einfach in Ihre App integrieren können, entscheidend, um Ihre Markteinführungszeit zu verkürzen und oft gleichzeitig Ihre Kosten zu senken.

Die Auswahl von Xamarin und MVVMCross bietet Ihnen zwei Optionen, aus denen Sie vorhandene Komponenten auswählen können. Erstens sind immer mehr Komponenten für Xamarin mit oder ohne Forms verfügbar. Xamarin verfügt über einen in Visual Studio integrierten Komponentenspeicher, in dem Sie verschiedene Lösungen für allgemeine App-Probleme finden und andere Unternehmen direkt verkaufen können. Suchen Sie also unbedingt, bevor Sie mit dem Schreiben Ihrer eigenen Komponenten beginnen (oder erwägen Sie, diese zu verkaufen, sobald sie erstellt wurden).

Zweitens sollten Sie Nuget-Pakete durchsuchen, da die Chancen gut stehen, dass jemand bereits Code geschrieben hat, um das zu tun, was Sie brauchen. Unter diesen Paketen finden Sie eine anständige Liste von plattformübergreifenden MVVMCross-Plugins, die häufige Probleme wie E-Mail, GPS oder Lokalisierung lösen.

Wenn Sie bereits Erfahrung mit C# haben, haben Sie wahrscheinlich Ihre bevorzugten Komponenten. Natürlich möchte man sie nicht mehr hergeben, so wohl fühlen sie sich. Seien Sie versichert, Sie können C#-Bindungen für vorhandene Komponenten erstellen und diese dann so verwenden, als wären sie mit Xamarin gebündelt, sogar in Forms mit ein wenig Hilfe von benutzerdefinierten Renderern.

Apropos, vielleicht möchten Sie sich das Github-Repository für Xamarin-Bindungen ansehen, bevor Sie Ihr eigenes erstellen.

Unterstützung und Gemeinschaft

Schließlich ist der Zugang zu Unterstützung und Beispielen ein sehr wichtiger Faktor bei der Auswahl eines Frameworks. Xamarin gibt es schon eine Weile, daher hat die Community heute eine ziemlich gute Größe.

Das Nachschlagen von Informationen bei Google ergibt normalerweise eine ganze Reihe von Antworten (Tipp: Versuchen Sie auch, nach monotouch und monodroid, den Vorfahren von Xamarin, zu suchen) und Xamarin bietet viele Beispiele und eine großartige Dokumentation auf seiner Website.

Da Xamarin wirklich nur eine Bindung über die Anbieter-APIs ist, ist die Dokumentation von Apple und Google außerdem immer relevant und wird viele Ihrer Fragen beantworten. Anschließend können Sie Ihren eigenen MVVMCross-Dienst erstellen, um die Anbieter-APIs in Ihrem freigegebenen Code zu abstrahieren.

Was die Zukunft von Xamarin angeht, wette ich mit der Übernahme durch Microsoft im vergangenen März, dass es nur in die Zukunft geht. Seit diesem Verkauf und dem passenden Wechsel zu einem kostenlosen Modell ist die Community nur gewachsen, der Support hat sich verbessert und das Produkt hat sich möglicherweise sogar noch schneller verbessert!

Die Zukunft sieht für Xamarin rosig aus.

Jetzt geht's los!

Ich bin mir bewusst, dass ich mit diesem Artikel möglicherweise einen Wurm aufmache. Verstehen Sie mich jetzt nicht falsch, es gibt andere Möglichkeiten, die es wert sind, in Betracht gezogen zu werden, und ich lade Sie ein, dies zu tun, da meine Bedenken möglicherweise nicht mit Ihren übereinstimmen.

Denken Sie daran, dass Sie nicht gewinnen, wenn Sie einen Zeitplan von sechs Wochen haben und vier Monate später immer noch keine fertige App haben. Das würde zweieinhalb Monate und eine Menge Geld übrig lassen, um jemanden intern zu schulen oder jemanden einzustellen, der sich auskennt. Zu diesem Zeitpunkt darauf zu bestehen, eine „native“ App zu erstellen, kann sich sehr nachteilig auf das Schicksal Ihres Projekts auswirken.

Xamarin und diese begleitenden Technologien bieten genau das, was Ihren Benutzern wichtig ist und was Sie brauchen. Ich hoffe, dieser Artikel hilft Ihnen dabei, eine gut informierte Entscheidung über das Framework zu treffen, das Sie für Ihre nächste mobile App auswählen können.

Verwandte: Bessere Android-Apps mit MVVM mit sauberer Architektur