When we initially open sourced Uno Framework at //build 2018, we took a big step in showing the world what we had been internally working on for nearly five years. The year was 2018 and we were still doing mostly mobile work via UWP. During those days, you saw us fly the #UWPEverywhere banner proudly. A lot has changed since then in the .NET ecosystem, in WebAssembly world, as well as in scenarios our community had been asking us to cover. While UWP was, and still is, our first love, with today’s announcements we are keeping pace with our audience asks and we are shifting gears towards ensuring the future WinUI stack can be run everywhere – WebAssembly, iOS, Android, and of course Windows, making room for our new northern light – # WinUIEverywhere!!!
In practice, what does that mean?
The inner loop for developing with Uno gives you the ability to use XAML Hot Reload in Visual Studio for Windows, allowing you to go to 95% of your app’s development. You generally need to finalize your application’s testing using the actual app environment, on device or in a browser.
The ability to Hot Reload XAML from Visual Studio while the app is running, will give for the ability to update the UI without rebuilding. The Hot Reload feature works on iOS, Android and WebAssembly.
Here’s an example of edition using WebAssemly:
We’re actively working on the feature, yet it will give a good sense of what will be possible, as we’ll be improving the experience using XAML VS Language services integration, integrated error reporting, and Resources and templates edition.
You can visit our GitHub release page to try it out: https://github.com/unoplatform/uno/releases/tag/hr-pre1
While in the past we had done spikes in this direction, today we are proud to say you can run your Xamarin.Forms apps on WebAssembly via Uno Platform.
The Xamarin.Forms teams has been working since the beginning on supporting UWP and Windows, and since the Uno Platform provides the full UWP API set, it was natural for us to build those renderers on top of Uno to enable WebAssembly.
This enables Xamarin.Forms apps to run on the Web with execution of a simple command line. Here’s how to do it, in Visual Studio for Windows:
- Create a Xamarin.Forms project
- Check “Place project and solution in the same directory”
- Check “Windows (UWP)”
- Using a VS Developer Command Prompt, navigate to the folder containing the solution
- Type the following to install the latest templates:
dotnet new -i Uno.ProjectTemplates.Dotnet::1.46.230-dev.2723
- Then type the following to create the new WebAssembly project:
dotnet new wasmxfhead
- Open or Reload the solution in Visual Studio
- Set the Wasm project as the startup project
- Open the Nuget Package manager for the Wasm project and update the Uno.Xamarin.Forms.Platform project to the latest experimental package
- Run the app using Ctrl+F5 (without the Visual Studio debugger), and you’re good to go!
There are also existing Xamarin Forms sample applications that use this work:
- Bike Sharing: https://bikesharing-wasm.azurewebsites.net
- The RPN Calculator: https://rpncalculator-wasm.azurewebsites.net
It is worth saying that this scenario had in the past been covered by the work of our dear friend Frank Krueger and his Ooui framework. We certainly hope to keep on collaborating with Frank in the future on making Xamarin Forms run on WebAssembly.
Following our initial announcement on early support for SkiaSharp for WebAssembly, today we are proud to announce that the Uno Platform now providing professional support for SkiaSharp.
Skia.Extended provides a set of advanced rendering operations such as shapes, interpolation or SVG rendering. We ported the library over to the Uno Platform, and you can visit the GitHub page here: https://github.com/unoplatform/Uno.SkiaSharp.Extended
We’re continuing to work on it and some of the upcoming features are the inclusion of a Wasm OpenGL backend support, alignments with latest SkiaSharp updates and more support for decoders.
We’re been working for a while on improving the reliability and testability of the Uno Platform. This is the reason we built Uno.UITest, a library that provides cross-platform UI Testing for iOS, Android and WebAssembly. iOS and Android are backed by Xamarin.UITest and AppCenter, and WebAssembly testing is backed by Selenium.
The library provides the ability to run the tests in CI/Pull Requests environment, allowing for UI Testing to be part of the development flow, and not an after thought.
Here’s what the experience looks like when testing for WebAssembly:
You can visit the Uno.UITest repository for more details: https://github.com/unoplatform/Uno.UITest
We’ve been working to hard to create this release, and with the help of the community, here are some of the highlights set for this release:
- ThemeResources support
- Magnetometer support
- Texbox TextChanging and BeforeTextChanging
- JumpLists support
- DisplayInformation support
- Accelerometer support
- PhoneCallManager support
- Vibration Device support
- Android Notch support
- Refactored Pointer Events
And many more features and bug fixes!
For the full release notes, see the release notes document: https://github.com/unoplatform/uno/blob/master/doc/ReleaseNotes
Many of you have asked us to help you run a local event. To this point, we have prepared “Event in a Box’ – some demos, PPTs and SWAG to give out at the event. Please contact us and we will get you set up with PPTs and perhaps even help with pizza and pop or the event.
Firstly, you should absolutely take Uno Platform 2.0 for a spin and let us know what you think.
As for the platform, the strategic direction has been laid out – putting WinUI everywhere where it currently doesn’t run on. We would like to join forces with all of you on doing just that. If you are interested in contributing to Uno Platform, please let us know on firstname.lastname@example.org.
If you are watching from afar or couldn’t make it to tomorrow’s UnoConf 2019 workshop: https://github.com/unoplatform/workshops
Also, keep an eye out on Microsoft Ignite conference in November, where we hope to bring you more Uno Platform news.