Wer sich den Titel einmal genau durchliest und nur ein wenig Ahnung von der Materie hat wird sich unter Granite denken „Was zum Teufel schreibt der da. Und als ich zum ersten Mal von diesem Konzept gehört habe war auch ich erst mal sehr misstrauisch. Doch mittlerweile führen wir in unserem Unternehmen einige Testläufe durch, um zu sehen ob das Framework und diese Herangehensweise die produktive Entwicklung wirklich einfacher macht.
Kurz zur Erklärung: UWP (Universal Windows Apps) ist eine Schnittstelle zur App-Programmierung unter Windows 10 (Und auch nur da, keine andere Windows-Version und erst recht kein anderes Betriebssystem bietet die Möglichkeit zur Ausführung der UWP-Apps. Ein Quellcode-Projekt besteht im Normalfall aus verschiedenen Programmdateien. Diese liegen zum Beispiel in C# vor. Zusätzlich gibt es dann noch die Definitionsdateien für die Programmoberfläche, welche in XAML geschrieben sind. Sowohl C# als auch XAML sind aber unabhängige Definitionen und werden so zum Beispiel auch in Xamarin-Projekten oder in WPF-Projekten (Win32) verwendet. Das was UWP von Xamarin oder WPF unterscheidet ist auf XAML-Seite die Definition wie ein Button oder ein Textfeld beschrieben wird oder in C# wie eine bestimmte API angesprochen wird. Das WAS ändert sich also, nicht das WIE.
Und so gesehen verwendet das Framework Uno Platform auch nicht die UWP-Schnittstellen, um die Apps auf anderes Betriebssystem und sogar das Web zu bringen, sondern kompiliert den im Projekt gespeicherten Quellcode einfach nur anders. Das was das Uno Platform-Projekt hier so einzigartig macht ist die Tatsache, dass man nicht wie bei anderen Projekten eine komplett eigene Projektstruktur oder Vorlagen benötigt. Man kann einfach eine normale und bereits lauffähige UWP-App nehmen und diese fast ohne zusätzliche Schritte auf iOS, Android bringen und als PWA veröffentlichen. Der Compiler erkennt hier also die UWP-Definitionen und übersetzt diese in das Gegenstück des Ziel-Betriebssystems. Für iOS und Android macht man sich hier sogar das Xamarin-Framework zu nutze.
Mobile Apps ist langweilig – Was ist mit UWP im Browser?
Das was an der Uno Platform wirklich interessant ist, ist nicht die Anwendung für mobile Apps, also für Windows 10, Android oder iOS sondern die Veröffentlichung als Web App. Da der Uno-Compiler zugriff auf den gesamten Quellcode besitzt könnte man vielleicht denken, dass daraus einfach HTML und JavaScript generiert wird. Theoretisch ist das mit XAML durchaus möglich und es gibt bereits einen C# to JavaScript-Compiler (Dabei wird richtiges JavaScript und kein WebAssembly erzeugt). An dieser Stelle sei das Open Source-Projekt Bridge.NET (Inklusive Online-Vorschau) genannt.
Das Uno Framework geht hier dennoch einen einfacheren Weg und verwendet in der Tat WebAssemblies. Damit spart man sich Unterschiede in verschiedenen Browsern. Derzeit werden WebAssemblies von allen großen Browsern inklusive Firefox (Ab Version 52) unterstützt. Chromium-Browser unterstützen das Feature ab der Version 57, Microsoft Edge ab Version 16 (der neue wie genannt ab Version 57) und Apples Safari ab Version 11.
Doch was sind WebAssemblies eigentlich? WebAssembly (Abgekürzt Wasm) ist eine Web-Definition des W3C und stellt ein binäres Befehlsformat dar, welches in einem Browser im Rahmen einer kleinen virtuellen Maschine ausgeführt wird. Wasm ist als portables Ziel für die Kompilierung von Hochsprachen wie C/C++/Rust konzipiert und ermöglicht den Einsatz im Web für Client- und Server-Anwendungen. Quelle: webassembly.org
Der Uno Compiler übersetzt den C#-Quellcode inklusive dem XAML-Interpreter in eine WebAssemby, sodass der Browser diese lesen und ausführen kann.
Mittlerweile kann das Uno Platform-Projekt mit zahlreichen Referenzen aufwarten, allen voran sei hier Microsoft’s Taschenrechner genannt. Diesen stellte Microsoft vor einiger Zeit als Open Source Projekt zur freien Verfügung. Und es handelt sich beim Taschenrechner um eine leistungsfähige UWP-App. Das Team hinter Uno stellte diese nicht nur als Android und iOS-App bereit, sondern auch als vollfunktionsfähige PWA. Damit kann dieser nicht nur als App unter Android und iOS ausgeführt werden sondern zum Beispiel auch unter macOS und Linux. Unter iOS hat es bereits den Onbord-Taschenrechner von Apple verdrängt und ich finde, dass der UWP-Rechner deutlich schicker unter iOS aussieht 😉.
Microsoft Taschenrechner als PWA
Am Ende ist es also einfacher Anwendungen mit Uno zu schreiben, da man im Gegensatz zu Xamarin nicht nur Android und iOS abdeckt, sondern auch das Web (Was heutzutage ja nicht mehr so unwichtig ist. Darüber hinaus bietet es Entwicklern die Möglichkeit die vielen Stärken der UWP-Plattform öfters zu benutzen und erleichtert so einiges. Xamarin hat hier zum Beispiel viele eigene Implementationen, die vielleicht nicht ganz so ausgereift sind, da man nicht auf einer UWP-Definition aufbaute (Das ist aber sicherlich nur Geschmackssache). Einen Nennenswerten Negativpunkt besitzt das Uno-Projekt allerdings dann noch. Die Visual Studio Templates, welche über ein Plugin hinzugefügt werden können, sind noch lange nicht ausgereift. Hier fehlt unter anderem zum Beispiel die Autovervollständigung. Alternativ dazu kann man auch einfach eine Anwendung als UWP-Projekt entwickeln und diese dann nur in einem Uno-Projekt öffnen.
Uno Platform ist ein Projekt mit Potenzial, welche es dem Entwickler erlaubt die vielen (Es sind so viele) der UWP-Plattform zu nutzen. An manchen Punkten steckt die Umsetzung aber noch in den Kinderschuhen.
Sehr coole Sache! Ich nutze den Uno Calculator auch bevorzugt auf allen meinen Geräten!
Finde ihn auch sehr gut. Es fehlt nur leider der Währungsrechner. (ich vermute das es den auch nicht im Open Source Code gibt, da dieser ja dauerhaft auf eine Datenbank zurückgreifen muss; korrigiert mich, wenn ich falsch liege)