Skip to content

4.2.6

Compare
Choose a tag to compare
@jeromelaban jeromelaban released this 21 Apr 13:10

Uno Platform 4.2 – .NET 6 Mobile RC1, Performance

As of last week’s release of .NET 6 Mobile RC1, Uno Platform is now following the updates to ensure that you have access to the latest features provided by the .NET runtime.

You can read the full post here.

As per Microsoft’s announcement, the .NET 6 Mobile APIs are now considered stable for iOS, Android, and Mac Catalyst. This enables applications and libraries to be developed without having to deal with any breaking changes in future .NET Mobile releases. As Uno Platform takes a dependency on dotnet runtime, this is important as we can stabilize our own support for iOS, Android and mac Catalyst targets.

Since our previous release about six weeks ago, we also made a batch of changes to fix the support for localization of iOS, macOS and Catalyst apps, based on the new behaviors of .NET 6. In total there were over 190 new features and fixes completed, around Geolocation, focus and keyboard management, Android/Skia/WebAssembly performance, and more. For those who like stats – that’s about 6 closed PRs per business day; we are definitely picking up velocity even more.

As always, to upgrade to the latest bits and use .NET 6 Uno Platform app templates, you’ll need to use uno-check.

You can find up-to-date information about uno-check in our docs.

To install Uno-check:

dotnet tool install -g uno.check

To update Uno-check if you had it installed already

dotnet tool update -g uno.check

You can then run it with:

uno-check --pre

Important note:
If you were already using Uno 4.1.x, had run uno-check and were using VS 17.2 preview 3 or earlier, upgrading to 17.2 Preview 4 or later will cause mobile workloads to become desynchronized. To fix your environment, you’ll need to run the following command:

dotnet workload install ios android maccatalyst macos --from-rollback-file https://aka.ms/dotnet/maui/rc.1.json --source https://aka.ms/dotnet6/nuget/index.json --source https://api.nuget.org/v3/index.json

Community Contributions

We'd also like to thank the community contributors for this release:


Full change log:

Features

  • Add basic support for entered/leaving background deferral 3eb2562
  • Add support for overriding the MessageDialog style 95ada29
  • Add support x:Bind to static event handlers 1e30a7d
  • Android FileOpenPicker MIME types eca4cc1
  • Basic ListView keyboard navigation b092f72
  • BringIntoViewRequested handling on ScrollContentPresenter 3d09430
  • cascade down update to Presenter 760906e
  • Change Release package defaults for Android app template 0c4eefc
  • CloseRequested event on Skia 9f25358
  • ContentDialog-based MessageDialog fbc932d
  • CoreApplication EnteredBackground and LeavingBackground events e461b69
  • Deferral.Dispose completes the deferral b510d0b
  • ElevatedView on Skia 2180e23
  • Enable focus states on SelectorItem 73d176d
  • Focus support in managed FlipView 58ea2f8
  • Implemented feature SelectedText on TextBox 0775781
  • more detailed ClassLib info for VB (recreated) a9de33e
  • Pass arguments to LaunchActivatedEventArgs on macOS 21e664b
  • Support for BringIntoViewOptions 5c45fc0
  • Support for UIElement.BringIntoViewRequested routed event d46a2e7
  • Update API surface to match Windows 11 22000 SDK efe34fb
  • Update Sync generator to 22000 9305aa0
  • arrange_dirty_path: First working version of arrange dirty path on Skia & Wasm 56b69c7
  • DecimalFormatter: Implement FormatDouble and ParseDouble 3e103af
  • dirty_measure_ios: Fixed the broken build for iOS. Not actual implementation of DIRTY_MEASURE_PATH for iOS. ab86102
  • FolderPicker: [Skia][WPF] Added support at SuggestedStartLocation and CommitButtonText 3d8bf64
  • ListView: incremental loading support for skia/wasm 1410316
  • updated Geolocator for Android 280a006
  • gtk: Add OpenGL acceleration e89870d
  • macOS: Add SelectedRange on TextBox fcaccd6
  • measure_dirty_path: Implemented the Dirty_Measure_Path on Android. Should bring significant perf improvements on this platform. 44bc0ed
  • PercentFormatter: Implement FormatDouble and ParseDouble e41759f
  • xaml: support named params in MarkupExtension 428b08c
  • Support WUX ProgressRing everywhere eb13011
  • PermilleFormatter: Implement FormatDouble and ParseDouble 0169c51
  • Support Enter, Space and Escape on ComboBox fb52456
  • Support Up & Down and keyboard item selection on ComboBox d61ce66
  • Use theme-aware WASM splash screen by default 7c63800
  • textbox: Update IsEnabled 6025109
  • fix!: Launch arguments should be separated by space 19ef842
  • feat!: Bump UWP version to 18362 9f41fd4
  • feat!: Bump to net6 preview 13.2 dee6870

Performance Improvements

  • Adjust resource resolver to avoid ICU based comparisons on net6+ 1244199
  • Disable logging in release builds 26137e2
  • Don't materialize x:Name-marked styles eargerly inside of uno 39a7e70
  • Fix regression in SpecializedResourceDictionary 44a49f9
  • android: Don't refresh memory statistics too often 259e365
  • Scavenge TextPaintPool storage 0d4c160

BREAKING CHANGES

  • In UWP/WinAppSDK the launch arguments are separated by space only, whereas Skia targets used semicolon before.
  • Bumps the target UWP version from 17763 to 18362
  • This update contains binary breaking changes to follow
    .NET 6 Mobile iOS/macOS/Catalyst API changes. It requires Visual Studio
    2022 17.2 Preview 1 or later and cannot work on previous VS 2022 releases.

Bug Fixes

  • gtk: Fix OpenGL render surface flickering dd529f4
  • net6: Auto include BundleResources, show excluded compile items 42c6eba
  • net6: Remove unused InvariantGlobalization configuration 6c1f1d3
  • Adjust MonoAndroidAssetsPrefix to use Assets from shared project eb5d0aa
  • Adjust default plist values for net6 mobile targets 8fd4390
  • Adjust flyout position in visible bounds 2103533
  • Adjust resources generation for net6.0-ios new targets eed7596
  • Adjust ScrollContentPresenter.ViewportWidth/Height on WASM 9a4e884
  • Adjust template for .NET 6 RC1 preview SDL 9567af1
  • Adjust VisualParent property to return Selector for SelectorItems bdfc675
  • Apply Review 635f43f
  • Apply Review 1d233de
  • Apply zoom and content offset simultaneously on iOS e92379f
  • BorderThicknessProperty warning on skia/wasm 96a46d4
  • CI for not used variable 7c94ce5
  • Clamp Popup placement in visible bounds 09a2c58
  • Decrease default TreeViewItem glyph size e821bed
  • Enable XAML Intellisense in VS 2022 for non-WinUI/UWP projects 050b537
  • Ensure that TextVisual does not render when size is empty 82aabd6
  • FlipView: Flipping on WASM and Skia 811266b
  • net6: [iOS] Ensure current culture is set at Application startup ac58dce
  • ContentDialog does not show up on startup on WPF 5bff961
  • convert-sourcetree-to-winui.cmd 79115b5
  • deobsoleting DisplayInformation (Android) 569935f
  • Do not apply ScrollOffsets if the source element is the scroll port b115cb4
  • Don't throw if DTE SolutionBuild is not available 1bdaa10
  • Ensure compatible numeric types are compared to avoid exceptions in Verify bf96acc
  • Ensure DeferralManager.CompletedSynchronously is set correctly before Completed execution 00f5f23
  • field not available for target 155f2d9
  • fixed error loading ms-appx asset files with spaces - all platforms 44d391f
  • Generate specific platforms for NotImplemented types bd95a0d
  • Generating API sync for Composition & Dispatching in UWP mode c7a6185
  • NativeFrame runtime tests failing without outer scroller a43b0e2
  • NavigationView selection indicator unreliable for minimal display mode 25e99af
  • Samples app local debugging 0296ab1, closes /github.com/xamarin/xamarin-android/issues/6697#issuecomment-1034784286
  • SelectionModel and SelectedItems enumeration 6652358
  • Set iOS Window background to Clear instead of White 568d988
  • Use native MessageDialog on Android, iOS and macOS eb7ee3e
  • WASM ScrollContentPresenter offsets are immediately set after scroll request without animation d149662
  • catalyst: Force enable globalization and static registrar, disable interpreter 1e252d5
  • catalyst: Include ios XAML for catalyst 00144d4
  • catalyst: Move to newer Preview 14 API breaking changes 89e70c1
  • CommandBar: Remove 1px "shadow" from iOS native CommandBar 0a4eb04
  • DependencyObject: Fix possible infinite loop on ancestor lookup acfb5ae
  • FolderPicker: [Skia][WPF] Applied Codacy suggestions bc4db1e
  • getparent: Never call .GetParent() in an element while it's being finalized. fb10dc8
  • itemscontrol: Fixed problem with internal assignment of indexes to elements in ItemsControl 4b63312
  • keyboard: [Android] Improve keyboard size info on 30+ 607992d
  • layout_update: Fixed a potiential "Layout cycle detected." exception 8d6075d
  • listview: Fix flickering when reordering items on Android 4614b38
  • NameScope: Ensure NameScope is not overriden for XAML backed controls b2c8a47
  • pointers: Fix gesture recognizer not completing drag manipulations internally. a605c4e
  • textblock: Text size were incorrect on MacOS 3f54b2e
  • XamlReader: collection parsing issues 0562480
  • Exclude fluent types from GlobalStaticResources automatic init 408a7c6
  • Warnings NU5048 c738b2d
  • WebAuthenticationBroker returns canonical URL with the trailing slash b57a062
  • Border: [Android] disable AntiAlias c0f4bc3
  • Border: Issue #8010 788e7f2, closes #8010
  • macOS: UpdateHitTest in some events. 73fd186, closes #6645
  • pointers: Do not allow LV.ItemClick if element allowed manipulation bb700bc
  • ScrollViewer: Content margin was not taken into consideration for Skia and WASM. 35cd99d, closes #7000
  • [WASM/Skia] Ensure ScrollViewer or Border apply margin of their Content properly d29f236
  • Ellipse with stroke alignment on Skia 7661642
  • Mobile header menu scrollable in docs section 2eab76a
  • flyout: full placement not taking entire screen edaea6e
  • net6: remove unsupported lottie support for apple targets 133a4bf
  • template: Bump bootstraper to 3.3.1 2a43343
  • Remove explicit net6.0-ios version in plist for template 005fb8d
  • Some samples using internal visibility for Commands 7b09859
  • coloranimation: filling values are not updated on theme change 2e5edd3
  • droid: color animation not setting value bd0c5c3
  • idbfs: Fix non-LocalFolder persistence 54d6103
  • listview: Make sure that indices are properly computed when remove+add the same item fd8bbd4
  • macOS: SplitView opening action 8ba6745
  • reg: Fix pointer pressed flagged as Handled still bubbling 34115f2
  • reg: Fix possible null in tests fd52bd7
  • reg: Focus was removed on any element on popup dismiss (whiel it explicitly tries to restore it) 5e9573c
  • [iOS][macOS] fixed BitmapImage needs encoding when loading from url f454834
  • Adjust AndroidSupportedAbis and add proper validation for the target list eea4842
  • Adjust net6 VS features flags a53eba1
  • Avoid disabling Paint AntiAlias when drawing rounded corners aaa7a71
  • Avoid duplicate registration of open Popups a4647e8
  • Closing poup immediately should not throw 9e01aaa
  • Remove SampleApp AndroidUseLatestPlatformSdk use 059b1da
  • UnitTestsControl crashes on UWP 6ffe6a6
  • Uno logo no longer disappears on some docs section 15cc273
  • Uno.Xaml.Tests excluded from test runner 889f086
  • ComboBox: Refresh content on popup open d149390
  • EllipseGeometry: [Skia] false message 'is not implemented in Uno' for the member EllipseGeometry.EllipseGeometry() b461cd5
  • measure_dirty: Fixed a regression caused by the refactoring on iOS for the implementations of MEASURE_DIRTY_PATH on other platforms (still not supported on iOS/macOS) 313e992
  • pointers: [iOS] Make sure SCP does not stop bubbling of native pointer events 36385c7
  • pointers: Do not consider event has "handled" when reaching the root of the visual tree b3b9056
  • pointers: Fix possible enumeration of a modified collection 430c279
  • pointers: Make sure to raise the exit event even if redispatched on non-hoverred element (e.g. implicit capture) 3f49fde
  • pointers: Multiple fixed regarding pointerExit 5365bb6
  • reg: Fix support of manipulations in SV on WASM 4d3d7b5
  • wasm_scroll: Disabling animation on scroll for WASM were not working. dffc5a6
  • Directional focus can be evaluated indefinitely 3c81917
  • WASM geoposition watch never stopped ddfc724
  • frame: [Android] When using stacking mode, previous pages are not collapsed 6315243
  • ListView: Reduce the number of materialized items on large scrolls 8305965
  • pointers: Fix enter/exit when moving from container to nested element f4f9802
  • Point users to MUX version of ColorPicker 850e0c5
  • Remove framework override for Skia.Gtk 41eaf33
  • Use VisualTreeHelper for Frame navigation focus movement 88210fd
  • VisualTreeHelper.GetParent should be able to reach ItemsControl from item containers 479cdae
  • When_ScrollViewer_Resized test failing without outer Scroller a6d681e
  • docs: Revert the resizing and update the menu look fb4735d
  • pointers: Fix SelectorItem might invoke ItemClick even if it didn't get PointerPressed 5000a71
  • pointers: WASM make sure to release captures even if pointer up event has been handled 11882f5
  • storage: [wasm] Fix invalid IBFS initialization 8400eae
  • templatepool: template not being applied on recycled item c657741
  • ToggleButton: Fix invalid visual state property 6b66a91
  • wasm_freeze: Fixed problematic .Content on ContentControl sometimes freezing the app. 7520a02
  • wasm_freeze: Fixed sometimes the UI froze when recycling elements. ccf204f
  • Adjust macOS and Catalyst versions 7f21cf1
  • Invoke item only if previously pressed 7538e1b
  • Issue #8038 62294e5, closes #8038
  • Move focus properly within bounds of ScrollViewer on Android and iOS 63feedf
  • VerifyNavigationViewItemToolTipPaneDisplayMode test a4eabc6
  • docs: Changed how the navbar is removed when iframed 7dc1786
  • iOS: CommandBar Custom Image Sample 959daed
  • listview: Fix blank ListView inside ListView bf2dfb7
  • PagerControl: Fix bug where setting button visibility would be ignored 7be589b
  • pointers: [iOS] Pointer exit is now bubbling properly even if handled by a nested element. It will also be raised after the whole tree get the up (was raised per layer). 132ed5b
  • pointers: Fix broken focus fb9e724
  • pointers: Make sure to set the UpdateKind on all platforms and use it handle focus 62d5342
  • reg: Make sure to release captures even if pointer up has been handled 440f22f
  • reg: We must focus TextBox as soon as it being pressed, no matter where the pointer is released 70c9c2f
  • scrollviewer: [iOS] Ensure ScrollViewer applies margin of its Content properly 4fd1d06
  • wasm: TextBox VisualState 7895cde
  • winui: Adjust winui-net6 template startup 8869d0d
  • xBind: Fix support for nullable struct binding eac0a68
  • JobName typo for the CI 87c386d
  • Rectangle with stroke alignment on Skia d11af7e
  • TextBox test failing on iOS 15 74e0119
  • reg: Fix failling tests on CI 192a7e4
  • reg: Mouse wrongly triggers scrolling on skia on long press 1aff72c
  • WPF: Use WPF for all library targets 0b358d4
  • xaml: parsing of nested markup with multiple params 4fc5c92
  • Fix SV wrongly reports horizontal scroll enabled, preventing scroll when hosting SwipeControl c971e68