Uno Platform 5.5 - Automated App Packaging, .NET 9 RC2, OpenGL, WebView2 and more
Each release, we don’t just improve—we aim to revolutionize your development experience. For this release, we focused on drastically reducing the time and complexity required to package and distribute your cross-platform applications, in addition to a plethora of other productivity and performance features.
Our new App Packaging automates the process of bundling binaries, assets and dependencies into platform-specific installers for Linux, macOS and Windows on desktop. And, yes, that’s in addition to the seamless support we already provide for Mobile and Web packaging. It removes hours of frustration and dozens of manual steps which are typically needed when preparing your app for publishing, with just a few commands or clicks.
In addition to app packaging improvements, we are adding support for .NET 9 RC2 with WebAssembly, OpenGL Support, WebView2, New Skia Canvas, Combo Box and Templated Parent. It’s a big release, grab a coffee and read through our blog post.
At a glance, here are some of the new features:
- Linux Snap, macOS
.app
and ClickOnce packaging support GLCanvasElement
for DesktopSkiaVisual
/SKCanvas
supportWebView2
support on WebAssembly- .NET 9 RC2 support
- .NET 9 WebAssembly bootstrapper support
- Support for
ComboBox.IsEditable
,ComboBox.TextSubmitted
,ComboBox.SelectionChangedTrigger
- Many
TemplatedParent
propagation fixes - Support for
ColorHelper
andKnownColors
- In-App rating support on iOS
- Various DependencyObject performance improvements and memory usage reductions
You can find out the changelog below.
Features
- add a SkiaVisual that allows external use of SkiaSharp (5ff75bd)
- Add ability to configure timeout for file update to work on slow CI (7ab30cc)
- Add ability to send null old content to overwrite file (2cd7ad4)
- Add contract for to allow user interaction in IDE from the dev-server (fc7312c)
- Add discovery of dev-server add-ins (d73066d)
- Add extensiblity support in dev-server (753965d)
- Add message for to add a menu in the IDE (0433d09)
- Add Microsoft.NET.Sdk.WebAssembly support (d3312b2)
- Add more info (86dfaca)
- Allow disabling generated Application.UnhandledException handler (307acc1)
- Allow selecting custom values on Selector (8b6a5d3)
- Allow usage of HR indicator from external tool (2cf2f71)
- Bump Uno.Fonts to 2.4.5 (84a5e72)
- ComboBox.IsEditable (f491c97)
- ComboBox.TextSubmitted (a22f88c)
- Correctly indicate support for DesktopAcrylicController and MicaController (c4ee18a)
- Create IIdeChannel services and register it into DI to be usable by add-ins (2099883)
- Define constants for packaged vs. unpackaged WinAppSDK (2ad6248)
- GlCanvasElement on MacOS (363b8df)
- hr: Add ability to safely handle exceptions in UpdateFile (e5974da)
- hr: Add UpdateFile API (bcabbd2)
- Implement
ColorHelper
(73e0d61) - Implement
KnownColors
(0d604a0) - Implement GetColorNameResourceId (d494270)
- In-app rating request on iOS (672148d)
- InputPropertyAttribute (493ede4)
- introduce the ability to draw using raw OpenGL on skia (ff6e501)
- ios: add webview2 inspectable feature (f8c6ac7)
- iOS: validate for device version (918f34b)
- Make breaking on unhandled exceptions opt-in (48d42f6)
- New DependencyPropertyHelper class (844b8e2)
- Reduce allocations when using AsyncLock (+ remove all dependencies) (6a52019)
- Simulate preview key events for tests (61c80df)
- Support for ComboBox.SelectionChangedTrigger (0d016e2)
- Throw ArgumentNullException if XamlRoot is not provided to VisualTreeHelper (c53c785)
- Update API surface to WinAppSDK 1.6 (abb3fca)
- Update Sync generator to WinAppSDK 1.6 (49ecdae)
- wasm: Remove dependency on js invocation internal calls (c9f9377)
- WebView and WebView2 on WebAssembly (be3a0fb)
- webview2: add feature configuration for ios inspectable (15ed6af)
Bug Fixes
- ActionAppNotificationSettings
Launcher
missing package reference (7b7cb35) - Adjust AddIn path (54da54f)
- Adjust ContentPresenter automatic propagation (8ad591f)
- Adjust IsFocusable on Popup (228d4a1)
- Adjust ScrollContentPresenter measure to prevent infinite available size when necessary (565dd04)
- Adjust the target SDK version of Samples app on Android (dc9da22)
- Adjust TreeHelper to correctly handle native elements (06e9137)
- adjust workaround for android popuppanel layout (72ce4eb)
- android: Restore inheritance workaround for android (0222291)
- Avoid error on SamplesApp.UITests (0641657)
- Avoid infinite layout loop in MediaTransportControls (dbca1b0)
- Button: Command binding resetting on CanExecution exception (82846ba)
- codegen: Adjust mvvm toolkit properties discovery (e94127f)
- Compare the right font in OnFontLoaded when FontFamily contains '#' (3843646)
- Correcly await async RunOnUIThread calls (7866edc)
- desktop will always build as WinEXE (30437b8)
- Do not destroy the singleton Window for single-window targets (334c910)
- Don't fail on disposed color changes (1c5621e)
- Don't reload projects when moving to all TFMs but wasm (a3d8370)
- Enable AllowUnsafeBlocks for winappsdk (9e244aa)
- Ensure AffectsMeasure and AffectsArrange are aligned with WinUI3 (0774906)
- Ensure each test ends with non-keyboard input device (c60e172)
- Ensure that MauiVersion override is always applied (3d786ca)
- Ensure wwwroot assets are copied properly (b206247)
- fb: Ensure that FB has a Window to render to (57a5b19)
- Fix default immutable array (+ docs + namespace update) (8904cbd)
- Fix lock contention in XAML generator during compilation (640ebba)
- Fix pointer events timestamp being in ms instead of ticks on X11 (0d37d5a)
- Fix ulong not supported in Tnterlocked in older versions (22e82f8)
- Fix UpdateFileAsync requesting HR before VS detects file change (380535e)
- Fix wrong target name (2f85fb7)
- GetCharacterIndexAtPoint throws if layout manager is null (97d9c7d)
- hyperlink foreground logic to make TestRespectHyperlinkForeground work (354ee29)
- hyperlink: clicking wasn't working on WASM (0d3060f)
- IDE0055 (94cba80)
- Improve HR message to imrpove user experience (feb0949)
- iOS: null pointer exception when calculating panel offset (34d22fb)
- Make AutomationProperties bindable (23a5743)
- Make GetMetadata aware of IsTabStop default value (7804d75)
- Make KeyboardHelper use async consistently (908025e)
- Make UpdateFileAsync API accesible on all platforms (d5a30b0)
- NRE in TextBlock (aef9aa3)
- popup: transfer RenderTransform and Translation to the Child (8c77d47)
- Port "non-clipping subtree" logic from WinUI (22f24c5)
- Prefix type in x:Bind codegen with global:: (00091e7)
- reg: Workaround Gallery measure issue on Android (6c1e90e)
- SizeInt32 and PointInt32 are marked as ErrorType (25d1c64)
- textbox: BeforeTextChanging crashing ing in specific cases (819ccc2)
- Track modifiers throughout key sequence (69a7287)
- Tracking assembly resolve location by load context (951dbe5)
- Uno specific workaround for invalid assert in ComboBox (b6fd348)
- Use FallbackColor for unsupported brushes (ed9db19)
- Use generated serializers for net9 wasm (eb817af)
- Use LogicalParentOverride for PopupPanel everywhere (784a589)
- Use Rgba8888 for Skia/macOS/metal (0dfe51e)
Performance Improvements
- Avoid boxing resources enumerators when entering/leaving visual tree (8a601d4)
- Avoid unnecessary boxing enumeration in ResetRenderOrder (c8d2ecc)
- Refactor DependencyPropertyDetails (8ce4d21)
- Refactor inherited DPs retrieval for less memory during app startup (69f9ef4)
- Remove no-longer-used fields (fd8f212)
- Remove ObjectId from DependencyObjectStore (cb16b0d)