Uno Platform v3.3.0 Release Notes

Release Date: 2020-11-17 // over 3 years ago
  • WinUI 3.0 Preview 3 is a big step towards shipping the final version of WinUI.

    βœ… We at Uno Platform team are happy to report that Uno Platform already works with the latest WinUI preview. Our sincerest thanks to WinUI team who keeps us posted on their progress and allows us to make modifications to Uno so that our joint developer base can use the latest and greatest bits right away.

    πŸš€ In addition to shipping support for Preview 3 the team also managed to ship additional features in our 7th release in 2020.

    πŸ‘ WinUI 3 Preview 3 support

    πŸ‘ We’re aligning the API surface from WinUI 3.0 Previews in Uno, alongside adding support for the WinUI Desktop project template. The Desktop template enables WinUI applications to use the full Win32 and WinRT API with .NET 5, without running in the UWP sandbox.

    To create an application using the WinUI 3 API set, run the following command:

    dotnet new -i Uno.ProjectTemplates.Dotnet dotnet new unoapp-winui -o MyApp

    This will create a brand-new project to experiment with WinUI 3 Preview 3 and Uno.

    πŸ“š You can find up-to-date information about dotnet new templates in our documentation.

    πŸ‘ A few points about the WinUI 3 Preview support:

    • 🏁 Debugging and running the Windows Desktop project must be done using the β€œMyProject.Windows.Package” project, not the β€œMyProject.Windows.Desktop” package (you will experience Startup exceptions otherwise).
    • πŸ‘ The WinUI+UWP project created by the template does not yet support .NET 5, but supports C# 8.0 and .NET Standard 2.0 libraries.
    • 🏁 In order to run the WinUI 3 Windows Desktop and UWP heads, it's best to install Visual Studio 2019 16.9 Preview 1. For the other platforms, you can choose recent stable builds of Visual Studio 2019.

    πŸ‘ Android 11 and iOS 14 Support

    πŸ—„ Uno is now providing Android 11 support and deprecates the use of Android 9, which Google stopped supporting as of November 1st.
    ⬆️ If your application was targeting the API level 28 (Android 9), you can upgrade to Android 10 (Level 29) or 11 (Level 30) in your application’s property pages.

    πŸ‘Œ Support for KeyUp and KeyDown Skia backends

    ⚑️ Keyboard was a big ask from the community, and the first consumer of this feature is the Uno Calculator for Linux. We’ve updated the Snapped application to enable keyboard support to input numbers and operators.

    Get it from the Snap Store

    πŸš€ We've also updated our appimage support for the Linux Calculator, in case you're on a distribution that does not support snap, or snap is not installed.

    ⬆️ How to Upgrade

    πŸš€ To upgrade to latest release of Uno Platform please update your packages to 3.3 via your Visual Studio NuGet package manager! If you are new to Uno Platform, the best way to get started is following our official getting started guide.

    Here's the full changelog:

    πŸ”‹ Features

    • βž• Add template support for WinUI Desktop (063f98e)
    • skia: [GTK][WPF][Tizen] Add CoreWindow.[KeyUp|KeyDown] and UIElement.[KeyUP|KeyDown] (0e89271)
    • βž• Add resources files with string translations (3dc5cd4)
    • βž• Add resources Keys (3649f52)
    • Localize Drag and Drop Caption text (cda1afb)
    • 🚚 Move Drag n Drop files into directory (34f74fe)
    • android: Add support for Android 11, remove Android 9 support (f7774e6)
    • DatePicker: Enable date part hiding on button (efca12c)
    • DatePicker: Support Header properties (7fea081)
    • NumberBox: Header and HeaderTemplate support (6e14000)
    • TimePicker: Support for Header properties (5bf73e9)
    • βž• Add Platforms folder in VSIX template (2779561)
    • πŸ’… MapStyle and MapInputEventArgs (a833c95)
    • πŸ‘Œ Support for WinUI InfoBar control (601e9a4)
    • Tizen project template (6d46e18)


    • πŸ’» Using the MapControl implementation provided by Uno.UI.Maps requires the MapResources resource dictionary to be included in application resources:

      <Application.Resources> <MapResources xmlns="using:Uno.UI.Maps"/> </Application.Resources>

    πŸ’… This resource dictionary provides the required MapControl style.

    • android: The support for Android 9 is being removed, as the Play Store does not accept updates for applications using this version.

    🐎 Performance Improvements

    • fastconvert: Replace the switch by a calculation for 1-digit string conversion. (87832b0)
    • βœ… tests: Improved perf of UI tests by reducing multiple decoding of same images (c0c391b)

    πŸ› Bug Fixes

    • auto_size: Add support for "Auto" and "Infinity" in float & double converter for DependencyProperty bindings. (58bd5f5)
    • combobox: Set alignment on ComboBox PopupBorder (71ec888)
    • dotnetnew: Adjust templates content for VS integration (55a41ff)
    • elevatedview: UpdateElevation timing issue (df3b6e5)
    • keyboard: [Gtk] Add missing operators mapping (5a08089)
    • listview: [iOS] Fix outer ElementName bindings not available on reload (4cf28e4)
    • listview: [WASM] [Skia] [macOS] Improve ListView measurement (b0b2733)
    • mapcontrol: [iOS] [Android] Fix MapControl for Uno 3.0 (60792e4)
    • maps: [Android] Update Uno.UI.Maps to latest Google Play Services package (0fa1833)
    • Adjust visibility of Skia extensions (3d625cd)
    • Textblock can be constrained by maxlines on wasm and android (0c33868)
    • textblock: Fixed Android measure bug #4414 (11ddb61)
    • XamlFileGenerator: XAML markup extension requires full name #2918 (488a556)
    • BindingExpression failed to apply string explicit source. (94b6bc9)
    • UIElementCollection adding the view twice (52fa4e5)
    • πŸ›  fix(mapcontrol)!: Using MapControl now requires including MapResources (373bf93)
    • generation : Fixes invalid Tuples expansion using Roslyn 3.5 and later (c7bebb2)

Previous changes from v3.2.0

  • πŸš€ The 3.2 release is loaded with feature and performance improvements. Most of the release focused on upcoming .NET 5 and all benefits Uno Platform gets from building on top of it. However, we are also releasing improvements to the controls and tooling we introduced in previous releases.

    βž• Adding preview support for .NET 5 for WebAssembly

    ⚑️ The .NET team has been working hard to add WebAssembly support for .NET 5, and we’ve been able to leverage this work to update Uno and provide a preview of this support.

    ⚑️ This update gives the ability for Uno Platform apps to use the .NET 5 APIs and features, like C# 9.0 and its source generators, records, pattern matching and others interesting features.

    🐎 But that’s not all! The .NET 5 WebAssembly support comes with the IL interpreter runtime, but also brings the AOT support that was already present in the Mono Runtime that Uno Platform currently uses, allowing Uno WASM implementation a performance boost of 7-15x compared to the IL interpreter.

    ⚑️ To get this support, the Uno WebAssembly Bootstrapper has been updated to include the AOT runtime for .NET 5, while keeping the support for the Mono 6.x WebAssembly support (using the netstandard2.0 target framework for projects).

    You can view additional benchmarks on our blog post.

    πŸ‘ Drag and Drop support (multiple platforms)

    πŸ— Drag and drop elements within the application is now supported. Like UWP, any element flagged with the CanDrag property set now has the ability to build a DataPackage and customize the UI for the drag operation. Any element configured with the AllowDrop flag can now receive the drag events.

    🍎 We’ve also added the ability to drag and drop from and to other apps for Skia for Windows and macOS (Thanks @robloo!).

    ⚑️ Playground Updates

    ⚑️ We’ve updated the Uno playground with new samples for you to experiment with:

    πŸ’» You can now use the muxc” namespace to access Microsoft.UI.Xaml.Control enabled controls.

    Other notable features of Uno Platform 3.2

    • ⚑️ We've updated the Uno Platform Visual Studio 2019 Wizard to include a list common issues found when starting a project.
    • πŸ“ˆ AnalyticsInfo, PackageId (Skia/Wasm)
    • StorageFolder: GetFilesAsync(), GetFoldersAsync(), GetItemsAsync() (Thanks @pkar70!)
    • UISettings GetColorValue and AnimationsEnabled (Thanks @MartinZikmund!)
    • πŸ‘ Drag and Drop support (multiple platforms)
    • πŸ‘Œ Support for Windows.Storage.PathIO and many Windows.Storage APIs
    • πŸ‘ VibrationDevice support (Thanks @MartinZikmund!)
    • πŸ‘Œ Support for UIElement.XamlRoot (Thanks @MartinZikmund!)
    • πŸ‘ XAML Source generation improvements, base support for C# 9.0 generation
    • πŸ›  Fixes for multiline TextBox for WebAssembly

    You'll find below the full changelog:

    πŸ”‹ Features

    • [Wasm] Adjust netcore compatiblity 59667ea
    • βž• Add CommandBar SampleControl with Navigation 6c8a61c
    • βž• Add NavigationViewPaneDisplayMode enum 557bcc2
    • βž• Add SelectionMode enum 453c7b6
    • πŸ“ˆ AnalyticsInfo support for Skia (Tizen) ba9356c
    • πŸ“ˆ AnalyticsInfo support for WASM 8b7b97d
    • Appointment (Calendar) common structs f18ee9e
    • πŸ‘ GeoFencing - supporting classes/enums 3361f74
    • Geolocation.PositionSource enum 251e937
    • Implement Application.RequiresPointerMode 23a656b
    • πŸ“¦ PackageId support for Skia, WASM, Tizen 4c8e611
    • StartStopEventWrapper be2b602
    • StorageFolder: GetFilesAsync(), GetFoldersAsync(), GetItemsAsync() e6348f8
    • πŸ‘Œ Support for GuidHelper 7ec98fb
    • πŸ‘Œ Support for UISettings.AnimationsEnabled on Android d78bebf
    • πŸ‘Œ Support for UISettings.GetColorValue bdc1420
    • dragdrop: Add support for RandomAccessStream on BitmapSource 4f16eed
    • dragdrop: Abstract the drag event source so they can be built from another source than pointer c80db88
    • dragdrop: Add ability to ignore only a single element while bubbling event 5f90875
    • dragdrop: Add ability to override the default UI b3f7cb3
    • dragdrop: Add basic sample 6bb7b16
    • dragdrop: Add D&D overlay structure 13b2298
    • dragdrop: Add first implementation of the DragDropManager 8f4547f
    • dragdrop: Add support of Dragging event on the GestureRecognizer 97c476c
    • dragdrop: Enhance the DataPackage API 2b52694
    • dragdrop: Extract the hit testing algorithm ca0688e
    • dragdrop: Extract the HitTestability from the UIElement 030d466
    • dragdrop: Fix Android clipboard usage of DataPackage 238b331
    • dragdrop: Fix DataPackage on WASM 4ec12d1
    • dragdrop: Fix WASM compilation issues 4c5a78e
    • dragdrop: Fix WASM support of Drag and drop c4cb3a7
    • dragdrop: Implement basic UI fabb408
    • dragdrop: Implement UIElement.CanDrag and AllowDrop bbff5ab
    • dragdrop: Import needed XAML classes 418ebc1
    • dragdrop: Import the core drag and drop classes 756d278
    • dragdrop: Initial work for D&D manager f19dc57
    • dragdrop: Make sure to not allow drag operation if pointers does not have any pressed buttons 2faa713
    • dragdrop: Make the CoreDragDropManager implementation configurable 943f048
    • dragdrop: Primitive support of the drag in UIElement e9ef1cb
    • dragdrop: Wire up the Drag and Drop routed events 05830c0
    • dragdrop: Wire-up the UIElement.DragStarting event 0242a0e
    • Droid: Enabled TextBox.CharacterCasing a0d714c
    • iOS: Update method signature for null 7811661
    • TileNotification common struct 705eab8
    • dragdrop: Add missing support for DragStarting and DropCompeleted event handlers 3d81579
    • dragdrop: Add support for external drag and drop on skia 593d6d5
    • dragdrop: Complete support for external drop of all types from other apps/macOS 1680b51
    • dragdrop: Complete support for most drag and clipboard formats in macOS c6bfcd4
    • dragdrop: Fix macOS clipboard usage of DataPackage 91c9fec
    • dragdrop: Hit test and raise the Drag and Drop eventys in the UI 991e885
    • dragdrop: Hook into macOS native window drag/drop methods 80381ca
    • dragdrop: Initial support for drop from external macOS apps f594af3
    • dragdrop: Multi target the Window.RootElement property e853cf7
    • dragdrop: Show a dragging image in macOS 103d2cc
    • dragdrop: Update iOS clipboard usage of DataPackage 04feaca
    • drapdrop: Support for external file drop from macOS ce80450
    • PathIO: Support for Windows.Storage.PathIO API ae86107
    • PathIO: Support PathIO API 03b775b
    • perf: Improve performance of the ScrollViewer with managed ScrollBar by defering their load 08eacc5
    • pointers: Implement pointer capture on skia 7caf355
    • storage: Extract MIME type from extension resolution to a dedicated service 5da461a
    • βœ… Test: Add iOS Test for CommandBar navigation 4897a14
    • wasm: added a font-face override for Segoe to add some cross-platform font consistency fa344d1
    • βž• Add support for C# 9.0 source generators 560e9b3
    • βž• Add support Setter.Target in style declaration d8005d2
    • iOS: Add iOS only solution for Vs4M a5566b4
    • storage: [Perf] allow direct access to the file stream from FileIO when possible bc9540e
    • storage: Add a Buffer.DefaultCapacity e2c49f8
    • storage: Add basic implementation of the AsyncOperationWithProgress a774ad5
    • storage: Add support of streamed <In|Out|RA>Stream aecc0f1
    • storage: Add WinRT RA/In/Out Stream adapter to/from system Stream 2f720ca
    • storage: Code cleanup fb7505f
    • storage: Complete removal of direct file system access in FileIO f913d02
    • storage: Implement RandomAccessStreamReference ec732a5
    • storage: Implement the StreamedCustomDataLoader e6a63ae
    • storage: Implement WindowsRuntimeBufferExtensions 3e0fe98
    • storage: Import missing interfaces from generated code 922632a
    • storage: Make the RAStreamWithContentType a stream wrapper 789ae3f
    • storage: Refactor StorageFile to add support of streamed file (future commit) and File<In|Out|RA>Stream cd2b766
    • storage: Suffix Stream.<Read|Write> accepting buffer by Operation to clarify return type + add ability for stream wrapper to return null so wrapper can be dynamic 1b363e3
    • storage: Use Memory in buffer instead of byte[] 1080144
    • VibrationDevice: Support for Android 1800b95
    • VibrationDevice: Support for iOS 144520d
    • VibrationDevice: Support for macOS 1838e46
    • VibrationDevice: Support for WASM c244733
    • VibrationDevices: Support for Tizen 2a9bca0
    • XamlRoot: Initial support for UIElement.XamlRoot 1cd99c5
    • ChatMessage - common structs 9452e65
    • Storage.Pickers.PickerLocationId cb6bec6

    🐎 Performance Improvements

    • commandbar: Removed redundant DP lookups on Android Native CommandBar renderer 2b663b9
    • πŸ”§ Adjust parallelism configuration 7ef00f8
    • ⬇️ Reduce lookups and symbol displayname comparisons 17e19f3
    • βœ‚ Remove Uno.CodeGen from SampleApp to improve build performance 4a0d9ed

    πŸ› Bug Fixes

    • πŸ”„ changed order of calls in ContentDialog Hide complete handler to invoke the closed handler before the result is set, and modified UI test to change the text before deferral is completed. 88e62ff
    • android_elevatedview: Fixed clipping for ElevatedView when place in a ScrollViewer on Android. 8b8ff63
    • πŸ— build: Fixed missing Generic.xaml as source for generated code. 5e27b29
    • clipping: Tooltip were not properly supporting rounded corners as UWP 40a5787
    • commandbar: Fixed height of CommandBar on iOS when using native template. fc67d09
    • commandbar: Removed potential memory leak 753616a
    • commandbarrenderer: Fix CommandBarRenderer Height for iOS 28cc1b6
    • contentdialog: [Android] Fix botom of full-size ContentDialog cut off 6c0ede3
    • contentdialog: Set default ContentDialog.DefaultButton to None 22e0227
    • contentdialog: Support full sizing, keyboard adjustment, other ContentDialog features 1b6eb6d
    • ContentDialog: Make ContentDialog.ShowAsync awaitable return result on Hide() call ced3508
    • cornerradius: Added overflow:hidden with corner radius is used. 6c9a708
    • cornerradius: Separate the update of CornerRadius from the Border itself 917b75a
    • dotnetnew: Skia WPF head is not referenced properly in sln 110448a
    • dragdrop: Apply styling code review 8e3c5c5
    • dragdrop: Correctly invoke the DraggingExited action in NSWindow 8866ccc
    • dragdrop: DataPackage defered was not propagating result 6fe8d58
    • dragdrop: Fix Android build 3578d1a
    • dragdrop: Fix CanDrag/AllowDrop inversed + attempt to fix the pointer released on skia 8440d96
    • dragdrop: Fix compilation on GTK and Tizen b2b49bf
    • dragdrop: Fix Drag and drop compilation of Unit tests 61e9ca4
    • dragdrop: Fix external D&D not cancel when leaving the window fc6f33a
    • dragdrop: Fix few buidl errors on CI 9271c1a
    • dragdrop: Fix invalid cast when retreiving files from DataPackage 6f18a77
    • dragdrop: Fix nullable for clipboard.wasm 664fb61
    • dragdrop: Fix nullable not supported on WinUI aba7751
    • dragdrop: Fix nullable ref for WinUI c37cd08
    • dragdrop: Raise the DragLeave event properly and fix pointer tracking captured 19894da
    • dragdrop: The Drag and Drop gesture with touches is not recognized properly 5aedd5e
    • dragdrop: The DragCompleted event is bubbling ceec30e
    • dragdrop: When drag source are nested, the top most drag operation is cancelled in favor of the parent's one d49a800
    • elevatedview: remove default background from ElevatedView 15dccc3
    • elevatedview: The shadow color was too intense on Wasm, compared to other platforms. 5913f5a
    • iOS: CommandBar updates on navigation #3017 af732b9, closes #3017
    • iOS: Nullable check f97545a
    • πŸ”— LinkerFailure: Add missing AndroidX.Activity reference to avoid linker failure when using Uno.UI.BaseActivity.OnRetainCustomNonConfigurationInstance 06cbfe0
    • Pivot: Remove TabView.TabItems setter, not part of public API. 527cff5
    • reg: Fix BindableType generator not detecting attributes after roslyn update d56d844
    • reg: Fix scroll offset was applied twice for hit testing on skia 59a6375
    • reg: Fix source generators override path 6144e24
    • reg: Fix UAP build should not include C# 9 source generators c33fc7e
    • scrolleviewer: Avoid to load change visibility of the scrollbar before it's being flagged as IsFixedOrientation b8962e3
    • scrollviewer: [Android] ScrollViewer shouldn't pass PointerMoved to parents 58bfcb0
    • scrollviewer: Avoid double scrollbars in multiline TextBox 449cdcb
    • scrollviewer: Fix double scrollbar when IsFixedOrientation is set bd1dc3d
    • scrollviewer: Was throwing exception when were absent from Control Template. Now simply behave as a ContentControl as UWP. 4013b29
    • βž• Add null check for GetMethod in case of write-only property 0f00793
    • βž• Add support for MediaPlaybackItem as MediaPlayerElement Source 4252c26
    • Do not force a visibility Visible on materialised element if materiazlization is not due to visibility change af4744d
    • scrollviewer: Fix invalid measure (scroll flickering) of TextBoxView when directly nested in ScrollViewer 73db47a
    • πŸ‘» Do not throw exception on navigation after first page failed to load 2db67a7
    • scrollviewer: Fix wrong element 69d8156
    • scrollviewer: Make sure that Actual<Width|Height> is updated when ScrollViewer updates its "dimensions properties" 66d33bf
    • scrollviewer: Make sure that materailized scrollbar are using fixed orientation as soons as possible 257a12a
    • shapes: [Wasm] Fix invalid generation of Shapes caused by missing Wasm detection e97142d
    • shapes: Invalid shape positioning for 1px thickness f0f58c7
    • skia: Fix symbols font is not registered ae8d472
    • skia: FontFamily may return null and fail TextBlock rendering 158403a
    • webassembly: [WASM] remove UTF8 BOM for CSS fonts file 11336bb
    • XamlReader: Update invalid collection error message, validate TabView setter. cb92cb6
    • xbind: fixed code generation for x:bind to second-level method 3502972
    • ElementStub's Name is not set if visibility has been data bound f4bb7ac
    • πŸ›  Fix rebase issue 589897e
    • πŸ— LongPath validation for build errors using generators 6a7fa57
    • ProgressRing: Fixes IsEnabled should not remove the progress ring ee6536d
    • reg: Fix incorrect reference of roslyn generators when LangVersion preview is not selected 16c0d91
    • Adjust roslyn override inclusion for legacy projects b65097e
    • πŸ– Handle const fields in XAML code generation. DRY up some code ecc032d
    • πŸ’… Set PreferredDatePickerStyle on iOS 14 276f230
    • ios_commandbar: Fixed the regression about height of CommandBar on iOS 0033663, closes #2997
    • XamlGenerator compare symbols instead of names 86a9169
    • iOS: Remove warnings when building the iOS head 7ac08e5
    • storage: Ensure that the array return by the Buffer.GetSegment cannot be null 8784b73
    • storage: Explicitly create the temproary file directory (doesn't exists on WASM) d729828
    • storage: Fix AutoCommitStream not disposing the underlying WriteTransaction + copy the source file when creating the transaction for append b7d58b6
    • storage: Fix build iOS / ANdroid 47ed594
    • storage: Fix invalid inheritance in partial files of StorageFIle a154e0d
    • storage: Fix invalid refactor 9094f58
    • storage: Fix issues raised by unit tests 0d0d85e
    • storage: Fix test not passing for Buffer e46b17c
    • storage: Fix the FileShare for File<In|Out>Stream 09d2395
    • storage: Fix WinUI build 635714c
    • storage: Fix WiteableBitmap Buffer usage 4224570
    • storage: Make the AsyncOperation ID really unique c65e55e
    • xLoad: Adjust x:Load behavior to not require visibility binding d3600b9