4.5.9
The fifth release of 2022 brings innovation across all pillars of Uno Platform: UI, Toolkit, Extensions and Tooling.
In the process of this release, we implemented 230 features and bug fixes, as well as welcomed 4 new contributors to our open-source project. Thank you! For those of you who just want to jump into it, please update your Uno Platform NuGet package to the latest.
It’s a massive release, so for those who are in the rush, here is the TL;DR version: We added:
- A major new feature - Uno Islands to help you modernize apps
- Increased the breadth of our existing Linux support
- Six new or refactored WinUI controls and brand new pull-to-refresh
- Super easy way to Authenticate users with MSAL, OIDC, Web and Custom authentication providers via Uno.Extensions
- Boosted Reactive extension
- Added SafeArea, Input, Status Bar, Input, Control,
TabBarItem
Extensions and Badge support as part of Uno Toolkit - Released Preview 3 of our Uno Platform for Figma add-in with more customization options and performance updates.
Community Shout Out!
We wouldn’t be able to do what we do without the help from our great community – filing bugs and issues, and also helping with the core project by submitting Pull Requests. Our contributor community is now over 230 developers strong, and we just passed 7,000 stars on Git Hub, and passed 2,000,000 downloads on NuGet. Thank You.
Special Shout out for 4.5 release goes to Giuseppe Lippolis (AKA @workgroupengineering) for contributing a fix for RenderTargetBitmap, InMemoryRandomAccessStream, and a variety of quality of life updates.
Thank you to all the other contributors:
- Support for testing generators with diagnostics, compatibility with other source generators (@HavenDV)
- Documentation updates (@Rarisma, @linkdotnet, @MiYanni, @DavidPerikala)
DataWriter.StoreAsync
(@rafaelrmoukc)
For more details about this release, head to our blog post.
Full release notes
Features
- (iOS) Add enable corewindows events 7e98596
- (iOS) Add expose Raise Events 384a94b
- (iOS) Add KeyEvents Support MacCatalyst c6a8db8
- (iOS) Add VirtualKey mapper 036f856
- (maccatalyst) add keyup event support d63624b
- (maccatalyst) bubble up key events to focused element 9ca702b
- Add DataWriter.StoreAsync 331b8a9
- Add GetPatternCore support for ButtonAutomationPeer 24f2d76
- Add missing Acrylic brushes without WinUI 2.6 styles 6c3aa64
- Add missing StaticResourceExtensions for VS intellisense 3af3e11
- Add refresh indication support for non-mobile platforms 7aeee51
- Add support for FrameBuffer DPI and scale computation e59df85
- Add support for StaticResource loading inside a ResourceDictiomary e05bd32
- Add the ability to define #pragma warning disable in generated code 9323607
- Add the ability to disable
_knownMissingTypes
validation a783600 - Add Windows.UI.Xaml.Hosting API contract 530c15f
- Allow Android native visualizer theming d7494e5
- Allow iOS native visualizer theming c3f46c1
- Basic RefreshContainer on Android 78f88df
- Basic RefreshContainer on iOS 9641599
- Basic support for DesktopWindowXamlSource c8ce703
- BitmapEncoder a194583
- Find associated VisualTree and XamlRoot for multiple roots 6c09f4b
- Handling full uri as callbackuri for ios/macos f6deb9e
- Implement analyzer for deprecated WasmHttpHandler a211ce3
- Improve automatic OpenGL/ES detection f614a88
- Include repository path in Samples app title bar e5076f8
- InMemoryRandomAccessStream e7743ab
- Marking additional Markup interfaces as implemented 2dd5612
- Port RefreshInfoProviderAdapter 4e7c22c
- RefreshInfoProviders d513257
- RefreshVisualizer 50d2f75
- RenderTargetBitmap ba33ee0
- Resolve managed path and use weak reference pooling for FontFamily.Loader.wasm f3ed46a
- Skia WPF Runtime Tests and Snapshot Tests ecbac16
- SoftwareBitmap 69a824c
- Support for multiple XamlRoots 09764b2
- Text input support in Uno Islands 786017b
- Uno.UI.XamlHost deead11
- UnoXamlHost for Uno Islands 12dffe8
- Update InfoBar to latest MUX e9c6f29
- Update Skia slnf with Xaml Islands projects c0304a3
- Use dotnet SDK linker when available c20e368
- Use NameProperty in Skia and WASM b33cda1
- droid: ListView smooth scrolling 762c5e2
- FrameBuffer: Add RGB565 color depth support e6e79e8
- InMemoryRandomAccessStream: Implemented ReadAsync, WriteAsync, GetInputStreamAt, GetOutputStreamAt da2699c
- mobile: use animation for LVB.ScrollIntoView a352416
- IRefreshInfoProviderAdapter support b42106c
- Targets with constants moved to an earlier stage. c73cb49
- Updating WAB for Android CustomTabs 09102ea
- Use in-app screenshots for android cdaeda4
- WASM Font Preloading Support e869192
- xaml: add support for raw numerical enum values 8723bed
- XamlReader: Add support for ThemeResources and MergedDictionaries 7785828
- WinUI Breadcrumb f379841
- WinUI BreadcrumbBar 272a1d3
- WinUI PipsPager 99305a4
- WinUI RefreshContainer e88ca39
- WinUI Slider / RangeBase / Thumb / TickBar 40e236f
- Android: Allows for images to be read using GetFileFromApplicationUri. 5f76bc2
- TextBlock: [Skia] Add hyperlink hit testing b0cac68
- TextBlock: [Skia] Add support for TextAlignment.Justify and CharacterSpacing 80ca410
- Xaml Island root 601a208
BREAKING CHANGES
-
Changing Time of TimePickerFlyout from UI doesn't preserve existing days, seconds, and milliseconds. To get the legacy behavior back, set FeatureConfiguration.TimePickerFlyout.UseLegacyTimeSetting to true.
-
On iOS, when running under the iOS Simulator, the
MtouchExtraArgs
property must include--registrar=static
or the runtime will fail with the following message:Don't know how to marshal a return value of type 'System.IntPtr'.
This validation can be disabled by setting the MSBuild property:
<PropertyGroup> <UnoDisableValidateIOSStaticRegistrar>true</UnoDisableValidateIOSStaticRegistrar> </PropertyGroup>
See #9430 for more details.
-
Native popups on Android were frequently causing problems with more complex controls like AutoSuggestBox and MenuBar. To aleviate these problems we are switching to use the unified managed popups everywhere instead. This may be breaking apps which depend on the native popups logic or layout.
-
This update adjust the name of android drawables, in order to have full path disambiguation. This also means that actual resource names now will be separated by "_" in place of the folder hierarchy. This is generally not a problem is the files are read using
ImageSource
.
Performance Improvements
-
Avoid Regex for indentation when possible 693c085
-
Enable CA1821 (Remove empty finalizers) 3669fee
-
Enable LINQ-related performance analyzers 6ae0751
-
Enable NetAnalyzers performance analyzers 5ebb6d9
-
Use
.ContainsKey
instead of.Keys.Contains
(CA1841) 708d286 -
iOSmacOS: calls getter too many times 9891407
-
iOSmacOS: Reduce nfloat / float / double conversions 4c2e8c2
-
iOSmacOS: Simplify MeasureOverride and ArrangeOverride 707c5db
-
macOS: Avoid calling
NSView.Layer
getter more than once / method 3ced78d -
macOS: Call Bounds propety only once inside FrameworkElement.Layout 02e629e
-
feat!: Implement TimePicker's SelectedTime/TimeChanged/SelectedTimeChanged 1563a5b
-
feat!: Stop using Android native popups by default d7dee36
-
fix(android)!: Retarget Android assets with path names d4308f1
Bug Fixes
- AutoSuggestBox: Close suggestion list on losing focus 0da0671
- gtk: [Linux] Ensure that missing libGLESv2.so does not break the runtime 5c61eeb
- GtkHost: move window title assignment after App is initialized. 1e5fa80
- pointers: Do not simulte enter/exit for "touch as mouse" on skia 7a3a090
- pointers: Fix touch support on some specific skia devices (e.g. RPI) ace611f
- SamplesApp: warning XA4216: AndroidManifest.xml //uses-sdk/@android:minSdkVersion '16' is less than API-19 1b1a2d1
- skia: Fail safe on invariant culture c08b512
- ToggleSwitch: add workaround for visual states 9078f8b
- WaitForUnlockedFile: Break if we can acquire exclusive lock on file d026090
- wasm: Expose
FontFamilyHelper
through Uno.UI.Runtime.WebAssembly 7ed2ae9 - wasm: Invalidate TextBlock measure cache when a font successfully loaded f49af2a
- Allow setting Selector.SelectedIndex value before it is valid when items are empty 232651d
- Apply review c8ca870
- Avoid refreshing Android RefreshContainer when not on top cc5fb7d
- case-insensitive linker ref paths 8c5b0a6
- Clip desired size to MaxWidth and MaxHeight ae2076f
- ContentPresenter content alignment 5bf7a3c
- Disable merging in uno debug builds, exclude Java.Interop for linking issues 4bf84f5
- Don't fail on missing _AndroidApiLevel for min API level validation 2c26ef8
- Ensure static registrar is enabled when the iOS simulator is used 5a76347
- Ensure unloading and reloading RefreshContainer retains refresh-ability 3d7ffa5
- Fix
FontWeights.SemiLight
and minor refactoring 2900ba4 - Fix
NotImplemented
forIsTextSelectionEnabled
in Wasm 8830db7 - Fix DependencyObjectGenerator for global namespaces and WPF head 0b533b8
- Fix parsing literals in Span, Paragraph, .. 703c073
- Fix TextBox visibility not taking effect 166f976
- Fix Uno.Analyzers assembly version by moving to SDK-style 8845cc8
- Generate csharp suppressions in GlobalStaticResources.cs fcffa49
- IndexOutOfRangeException ExpectedPixels.Pixels(_Bitmap) 7ba0bd9
- Mark 'ExperimentalAttribute' as implemented 0b06782
- NETSDK1080 A PackageReference to Microsoft.AspNetCore.App is not necessary when targeting .NET Core 3.0 or higher. 153fb0f
- Warning NETSDK1023 A PackageReference for 'Microsoft.NETFramework.ReferenceAssemblies' was included in your project. This package is implicitly referenced by the .NET SDK 9d2faf5
- Warnings SYSLIB0012 8e6d887
- InMemoryRandomAccessStream: Address review e562016
- InMemoryRandomAccessStream: Address review 326a597
- timepicker: [iOS] Ensure proper native picker readability when the system theme is overriden 7f76a10
- Remove duplicate analyzers 2e7de84
- Remove NotImplemented attribute from DataPackageOperation enum members 2899f50
- pointers: Fix possible invalid capture when bubbling event in managed code f1aaa9f
- pointers: Fix support of clipping in pointer event dispatch bd5c836
- pointers: Fix tests randomly failing on CI 9485cd9
- pointers: Make sure to update manipulation first before raising pointer released event 9a750a4
- Viewbox: alignment f77a56c
- vsix: Change templates ordering in VS project creation dialog 729ebdf
- vsix: Ensure mobile and windows targets are deployable by default 39f71b2
- vsix: Include UWP/Xamarin library template 1c6ea0b
- vsix: Restore default startup project and configuration for UWP cbdc792
- xaml: binding trailing space error message ecc52cc
- xaml: Use fully qualified xClass type for base type resolution 6018ccc
- Add NumberBox updates from WinUI back bc47072
- Adding LaunchBrowserCore to diffignore f146bae
- Adding more error handling to exception 5da4943
- adding Xamarin.AndroidX.Browser to nuspec 791c9f5
- Adjust DataWriter.StoreAsync test e3237d4
- Adjust samples for lottie support 9d335d2
- Align with latest MAUI's ProjectCapability items 384d12b
- Allow setting of XamlRoot for unset elements 78a6653
- AutoSuggestBox.QuerySubmitted ChosenSuggestion should not be null 56c2925
- AutoSuggestBox.QuerySubmitted ChosenSuggestion should not be null 19e43fe
- Avoid NRE when querying VisualTree too early for Uno Island ea76b11
- create a fallback to seleted item c98b2e8
- Enable await for DataWriterStoreOperation 559533d
- Ensure initial FocusState setting for TextBox does not cause exception on WPF 7f84d5b
- Fixed bug with visibility of constants for generators. 2af41ae
- FlipView theme template c81ce74
- Frame.Navigated should occur before NavigatedFrom and NavigatedTo a6ee454
- Generate ILLink.Substitutions.xml for FluentThemes/Toolkit 0be46e5
- Getting WAB sample to work 185d96f
- Initiate runtime tests from the UI thread 1fc24cb
- namespace 0fd41f4
- null annotations 4571d0d
- Only use actual MemoryStream length instead of buffer length 7d6cc27
- Removed unused fields and properties df12422
- Updated workaround for iOS 16
UITextInput.SelectedTextRange
crashes 00392d5 - Framebuffer: Add support for
Application.Exit
, change default app to use F12 to exit 90b9435 - Handling cancellation of authentication 45cadc0
- Move AssertIssue8356 to be a runtime test 02f7a4a
- droid: FlipView not displaying items correctly 4f323cd
- ios: border + corner rendering 213027b
- RenderTargetBitmap: Compilation error after merge PR #8612 0a927e1, closes #8612
- SamplesApp: [Skia] missing Package.appxmanifest 8f4da16
- SamplesApp: move assertion after initialization is completed. 7df8686
- skia: Restores opacity feature on UIElement 39abe47
- TextBlock: [Skia] Fix hyperlink foreground color 7f535d8
- TextBox: [iOS] Add temporary workaround for iOS 16 on selection with UITextField b6764fc
- [iOS][Android] fix FlipView first load selecteditem above limit 0ea7e7a
- [macOS] follow system colors changes 85fed70
- Add Automation namespace to avoid fuzzy matching issue in single-project WPF c1a3b59
- Add code-behind for InlineTextInSpan to avoid build warning for WASM 1a30a08
- Add missing samples 757a921
- addressing pr feedback c8a5b17
- Adjust for proper lottie file encoding on net6 mobile 5214048
- Allow D&D for GridView b66e229
- apply review 514c401
- Bump to WinAppSDK 1.1.0 638d177
- Enable full-window runtime tests on Windows e010394
- Fix LinearGradientBrush not working properly on TextBlock 7ac769a
- Leftover pointer issues in PointerManager d8a9927
- make event call syncronous 49dbcdf
- Move json.net package ref to directory.build.props 5e33df1
- null annotations 4a63dfe
- Properly detect the device is running on a foldable even if not spanned 59d1011
- re-use of native path instances and further optimizations ba689d3
- re-use of native path instances and further optimizations, accepted review suggestion 8d6c5fd
- Renaming android only file 77c4abc
- Rewrite symbols while merging ILLink.Substitutions.xml 31b4e7a
- Successful build on first attempt for sampleapp.ios as it will build the uitests and generator projects 2565229
- droid: FlipView showing empty pages with templateselector 2cd7468
- framebuffer: Fix invalid 32bits pixel format 3dab877
- framebuffer: Mark dispatcher thread properly 9268b6f
- framebuffer: Use scanline copy to adjust for padding when required ff32546
- MenyFlyoutPresenter: Fix TemplatedParent propagation in MenuFlyoutPresenter bec5f12
- skia: Enable scaling on HW accelerated render surface 249c821
- Uno.UI-Windows-only.slnf build dependencies 277012e
- Wrong CLI cmmand for exlcuding mobile in get started 3d871ef
- iOS: Fire the native SizeChanged event upon init of Window a70b9c6
- iOSmacOS: Correct computation for LogicalToPhysicalPixels 31d5b66
- Lottie: Fix invalid background reset af10b1f
- macOS: Remove dupe ObjCRuntime namespace 0a28c0d
- PasswordBox: Avoid the content of PasswordBox being cleared on iOS 2ea8fae
- Restore Com.Airbnb.Android.Lottie for monoandroid ae8c637
- Rewrite lib reference paths for Skia/WASM c69b1ba
- Suppress obsolete warning b63d96c
- WASM root element loading logic 7957d01
- rc: Adjust for faulted connections 661ee8d
- rc: Adjust socket selection for non-faulted connections on net6 mobile c31e72d
- reg: Add missing WindowsAppSDKWinUI visibility for roslyn 1195fa0
- SamplesApp: WinUI Activation Kind condition 266bdbb
- skottie: Adjust for transparent iOS render surface caa4910
- TextBlock: [Skia] Fix RTL segment ordering d743a48
- TextBox: [Android] restores AcceptsReturn ability to display text on multiple lines 1a0f341