24th Jul 2018

Cross Platform Mobile Apps with .NET and Uno

By Huseyin Kaya

Whilst Microsoft’s mobile offering is well and truly dead, their push to provide platform agnostic solutions for developers is alive and well. Xamarin.Forms’ growth has accelerated since Microsoft purchased Xamarin back in 2016 and with .NET Core & .NET Standard providing a simple way to create libraries for all targets easily, C# is becoming a go-to language for creating quality software that scales.

That being said, the ecosystem for mobile app development is also evolving and it’s not hard to get the idea that Xamarin.Forms may not be the go-to solution for mobile app development. Both iOS & Android have beloved languages for native applications in Swift and Kotlin respectively whilst other solutions such as React Native and Flutter achieve what Xamarin.Forms can do without the need for an IDE and heavy toolset. This doesn’t even take into account Progressive Web Applications; an approach to app development in which well crafted, JavaScript driven web applications look and feel like native apps you wouldn’t expect to run in a browser.

Along came Uno

Uno advertises itself as a framework used to “Build native apps for Mobile and Web using XAML and C#”. This doesn’t sound like anything new especially when talking about the other options we have available for these solutions, but scrolling down on Uno’s site does a stellar job of showing off just what makes Uno a better choice over the competition by providing the following comparison table.

So yes, despite being so early in development Uno does provide a lot to love. When breaking down what is offered by Uno in this table, the first thing that sticks out is “WebAssembly”. WebAssembly has been a hot topic for many developers recently as its adoption by modern browsers as well as polyfill implementations such as asm.js mean that we don’t have to write JavaScript to get cool things done on the web anymore. This is not to imply that there haven’t been other options such as TypeScript which patch up the holes in JS or the various languages and frameworks which will transpile down to JavaScript, but the fact is that being able interface with the browser through a means of assembly-esque programming is a very cool addition. This isn’t the first time .NET has made use of WebAssembly to do something magical; the most notable example being Blazor-an experimental framework from KnockoutJS creator Steve Sanderson which allows you to create single page applications using C# and Razor syntax. As far as I can tell similar (if not the same?) technology has been used by Uno to allow Uno applications to run in the browser using the same code as their mobile counterparts.

In fact you can try a live sample of a Uno application running in browser here, note they recommend using Firefox or Edge for the best results. This was enough to make me download the quickstart for Uno, I didn’t think that getting started would take long considering they touted XAML Standard/UWP compatibility and I consider myself pretty good with these technologies but it was starting to seem like the whole library was too good to be true.