Skip to content

4.1.8

Compare
Choose a tag to compare
@jeromelaban jeromelaban released this 08 Mar 22:42
· 20 commits to release/stable/4.1 since this release
9995f80

It has been just over 3 months since our 4.0 release, and we’ve used that time to focus on performance as well as bringing the latest .NET 6 and even .NET 7 innovation to Uno Platform. By simply updating your application to the newest bits you will notice a significant boost to your app performance.

This release packs over 200 new feature requests, bugs, and issues you raised. We welcomed a few great contributions from our community which is now over 210 contributors strong! Thanks for all you bring to Uno Platform.

For more information about the release, read our blog post.

Important note about .NET 6 Mobile support

The current support for .NET 6 Mobile Preview 13 requires VS 2022 17.2 Preview 1 or later, 17.0.x and 17.1.x are not supported, and naturally Uno Platform will face the same constraints. It’s also worth noting that with .NET 6 mobile Preview 14, Microsoft will introduce an additional (and likely final) set of binary breaking changes, and we’ll publish an update to Uno nuget package to align with those changes.

Once you have 17.2 Preview 1 or later installed, use uno-check --preview to setup your environment.

Features

  • element_measure_dirth_path_disabled: Added the ability to deactivate the new InvalidateMeasureDirtyPath at element-level instead of just globally (6779b34)
  • invalidate_measure: Ensure the .MeasureOverride() is not called when not required after invalidation. (e406239)
  • max_layout_iteration: Limit the number of iterations while trying to measure elements. (23e5c90)
  • measure_dirty_path: Implemented MeasureDirtyPath on both Skia and Wasm platforms (29c5b45)
  • pointers: Add basic support of pointers injection API on Skia and macOS (fe1c9bd)
  • textbox: Update IsEnabled (6025109)
  • Add ability to configure if marhsal and/or unmarshal method should be generated when using TSMessageAttribute + generated TS messages are now in the same namespace as where they are declared in C# (6459564)
  • Add Skia memory manager support (699731b)
  • Add support for XamlRoot.RasterizationScale (8ff10bf)
  • Add support for Description property on common controls (46e0956)
  • Add support for GC awareness for internal ArrayPool (e8e63f7)
  • Add support for memory usage aware template pooling (6c98490)
  • Add Title bar test status reporting to UnitTestsControl (af84896)
  • Added DynamicDataAttribute support to RuntimeTest (c5987eb)
  • Bump to Android 12 (1e9cf32)
  • DPI scaling on GTK (a961de4)
  • FolderPicker for Skia.WPF (6f3f596)
  • Improve Skia TextBoxView overlay positioning and sizing (b8240f8)
  • Support for Canvas.ZIndex on Skia (c51e44e)
  • update to .NET Mobile Preview 12 (95fa32f)
  • flyout: Implement FlyoutBase.IsOpen (ef3cf3d)
  • frameworktemplate: Improved the logging of FrameworkTemplatePool to show the actual factory lambda (d59c30f)
  • hotreload: Support x:Bind to properties in hot reload scenarios (1f1a8a6)
  • ios: RequestedTheme will now affects KeyboardAppearance (bfacd86)
  • pointers: [PERF] [WASM] Marshal pointer events instead of serializing them (44df154)
  • wasm: Add MemoryManager support (66038f1)
  • Added single project support for windows packaging in dotnet new (81e0052)
  • EasClientDeviceInformation (fb8ba79)
  • Initial page focus on WASM using browser keyboard navigation (7975615)
  • more detailed GeoLocator UI test (744237b)
  • Per-monitor DPI scaling on Skia.WPF (13eeac8)
  • Replace Page with correct type when reloaded (64a25da)
  • Support CreateFromStringAttribute in XamlReader (5258d49)
  • NativeCtorsGenerator: Generate nested types properly (1d772b9)
  • reapply_theme: Added the ability to reapply application theme to be used when the colors are manually changed in ResourceDictionary, to force the reevaluation of the ApplicationTheme without having to toggle. (dc1a660)
  • Support LineGeometry, RectangleGeometry, and EllipseGeometry in Skia (a5244c0)

Performance Improvements

  • Dispose HashtableEx to return memory to the pool (3db5555)
  • Enumerate children in ContainerVisual via IList and for (5cca9d7)
  • Merge all system resource dictionaries to improve lookup performance (6d49af8)
  • Reduce allocations in BindingItem.SubscribeToPropertyChanged (2740c77)
  • Reduce delegates use in BindingPath property changed (b93c527)
  • Reduce interop invocations during MeasureChildOverride (19625de)
  • Reduce memory indirect allocations from the use of DispatcherConditionalDisposable (a5751f5)
  • Remove indented string builder from InvokeJSWithInterop (2a239b1)
  • Scavenge TextPaintPool storage (0d4c160)
  • Use ArrayPool<T> for Grid's CellCacheStackVector inner storage (1572d6a)
  • Use field aliasing to improve Color.GetHashCode and Color.Equals (429d367)
  • memory: Reduce ConditionalDisposable pressure (3b4bf41)
  • memory: Reduce memory pressure on shape set fill (76998f0)
  • memory: Remove delegate for UIElement GestureRecognizer (2e34584)
  • memory: Remove RegisterDefaultValueProvider delegate in favor of UIElement cast (c2d8eb9)
  • Style: Implement Style.IsSealed to allow for flattened lists caching (1970c77)
  • timeline: Remove the use of events and disposables (922bb4b)
  • fix(pointers)!: [iOS][Android] Enter will now be raised using managed bubbling only (ad80757)
  • fix!: Do not silently dismiss exception in javascript (d67229a)
  • fix(popup)!: Set IsLightDismissEnabled false by default (72fb49d)

BREAKING CHANGES

  • On iOS and Android, PointerEntered are now raised on the whole tree before the PointerPressed instead of being raise per layer.
    This follow the behavior of UWP and the same as Skia and WASM.
    The PointerReleased + PointerExited are still raised per layer.
  • [Wasm] Exceptions raised in JavasScript are now being rethown by default in managed code.
    You can disable this behavior by setting the Uno.FoundationFeatureConfiguration.Runtime.RethrowNativeExceptions config flag to false.
  • Align with WinUI by adjusting default DP value of Popup.IsLightDismissEnabled to false.

Bug Fixes

  • winui: Adjust winui-net6 template startup (8869d0d)
  • Adjust for scaling in description tests (6a968da)
  • Android 12 debugging with VS 2022 Previews (8332e6b)
  • Match XAML numeric literals parsing with UWP (5eea8b7)
  • NRE in GPUFloatValueAnimator on iOS/macOS (a01b5a1)
  • calendar_view: Fixed the "blank calendar" on Wasm (f154961)
  • contentdialog: [iOS] Fix dialog buttons obscured by soft keyboard (79691d4)
  • net6: Bump current android version in template (a9b25c2)
  • passwordbox: Fixed iOS auto-fill interfering with PasswordBox input. (d1bb9c1)
  • pointers: [Skia][MacOS] Pointer events (exit and up) might bubble too much (8c81d53)
  • pointers: [WASM] Fix enter/exit handled not supported (148a5ad)
  • pointers: Cannot get PointerReleased in LVItem when selection is not None (9377ad4)
  • pointers: Fix enter/exit events not awalys raised on skia (835b797)
  • pointers: No mouse wheel data on WinUI (ddfd717)
  • pointers: OriginalSource of gestures and manip events is now fullfiled correctly + [WASM] Raise pointerExit when element is covered by another one (Popup) (041dfde)
  • pointers): Make sure fix(pointers: Exit is now raised after the Up has been bubbled on the whole tree (593057f)
  • reg: [Android] Flag released event has handle has no effect (7353df5)
  • reg: Fix pointer sequence (8ecfc1e)
  • reg: Restore reflection extension support for fields (ef9760c)
  • shape: Stroke update not triggering re-render (de37c27)
  • theme: resources not updating due to DPO store parent not being detached (8f9a026)
  • wasm: Avoid multiple FS.syncfs causing emscripten warning (ea33cf2)
  • wasm: TextBox VisualState (7895cde)
  • Add support for ObjCRuntime.NativeHandle replacement of IntPtr (3993e64)
  • Adjust DependenciesInitializer for SourceGenerator and 6.0.200 (9070fe3)
  • Don't warn on abstract members in generated Bindable Type Providers (80f5fba)
  • Ensure focus moves when navigating between pages (36a7178)
  • Move Page navigation focus to outer elements if available (ee211c9)
  • Remove not implemented on MemoryManager.AppMemoryUsageLevel (afdc298)
  • SelectorItems may stay in pressed state when unloaded to early after state changed (a12fbd1)
  • theme: source dictionary not getting theme updated (6027e66)
  • Ambiguous match on MemoryManager initialization (285f7ea)
  • Disable exported flag for CI (ff3e52d)
  • Ensure trying to close an already closed WASM Native write stream does not fail (123747a)
  • Failsafe for NativeWriteStreamAdapter.Dispose (c8309a6)
  • move test classes to individual files (99c39e3)
  • NRE in UnitTetControl cleanup code (e4315ad)
  • animations: [WASM] Make sure to always stop rendering loop animator, including if collected by GC (7faf552)
  • listview: [iOS] Fix incorrect container reuse with Replace and ItemTemplateSelector (7ba2371)
  • listview: [WASM] [Skia] Redraw list when scroll viewport changes (8e6bcea)
  • Remove incompatible (and unused) AdditionalFiles containing binary files (645e2fd)
  • winui dotnet new template for vscode (2eb2cab)
  • winui-net6 dotnet new template for vscode (a79a063)
  • animations: Make sure animator is being disposed at the end of an animation (9574e67)
  • [iOS] Do not clear text on next key stroke after reveal (a7e98bd)
  • Added platform designators for ListView tests that won't run on iOS (c3598c0)
  • contentdialog: Fixed the ability to reopen a content dialog immediatly after its closing. (e4d5cf9)
  • scrollbar: Tentatively reactivate the ScrollBar test deactaved in issue #7331 (7eeec7a)
  • templatepool: Fixed problem with Template Pooling in ScrollViewer where is ScrollContentPresenter could keep a reference to the materialized content of the ControlTemplate. (2a712f6)
  • [WPF][Tizen] he local function 'EnqueueNative' is declared but never used (28e6342)
  • adjust frame coords for LayoutSlot in ListView/GridView (ac7948e)
  • IsTabStop handling and focus on iOS TextBox (a0bd585)
  • IsTabStop handling for TextBox on Android (276d195)
  • IsTabStop handling for TextBox on macOS (e3e2e3f)
  • IsTabStop handling for TextBox on WASM (da65107)
  • Stop propagating native focus on AllowFocusOnInteraction/IsTabStop = false on WASM (44572e7)
  • appbarbutton: icon color not changing with app theme (49cdbcd)
  • dragdrop: [iOS] Fix support of drag and drop in LV with padding (fb74b8c)
  • dragdrop: Fix DragView not updating accepted operation when moving out of a drop target (626ae3c)
  • dragdrop: Fix reordering item at the bottom of the list has no effect (but still within LV bounds) (0eb888d)
  • FileOpenPicker: Invalid FilterIndex on Skia.WPF (5909a97)
  • FileOpenPicker: Same behavior of UWP when add * file type on Skia.WPF (2b11143)
  • FileOpenPicker: System.ArgumentException Skia.WPF (6990f7b)
  • FlipView: inability to scroll & prev/next btn not updating (09d19ba)
  • framebuffer: NRE in ObserveSystemThemeChanges (9f25e72)
  • iOS: build from vs4m (c032da8)
  • iOS: Time and Date Picker (17a2e30)
  • ItemsControl: [iOS] Invalid native insert sequence in UIElementCollection (5add934)
  • ItemsControl: Don't hold a strong reference on ItemsSource INCC/VectorChanged (753a9b9)
  • listview: [Android] Fix calculations when ItemsPresenter.MinHeight set (8d4c742)
  • listview: [iOS] Fix ItemTemplateSelector called at wrong time (5a9d994)
  • NavigationBar: Move to UINavigationAppearance APIs, fix unapplied background color (b43d371)
  • pointers: Do not throw if pointer event handler is removed during finalizer (2e7f4a3)
  • pointers: Make sure to never raise pointer entered/exited on parents (d9107fb)
  • popup: not working after alt-tabbing (db6ada0)
  • reg: adjust xaml merge for stable relative path (510788d)
  • reg: Do not dispose native animator on Android (f62ec8a)
  • reg: Fix wasm external components are not hit testable, even with a Background set (3a9e825)
  • reg: Invalid StackVector location (d0fc453)
  • resources: Don't update static resources on loading (1d927dc)
  • shapes: Fix Path declared in C# are not closing (7a42617)
  • test: duplicated Ignore attribute when isManual & ignoreInSnapshotTests are both set (89f3ecb)
  • AnalyticsInfo and AnalyticsVersionInfo compatibility adjustments (4c4cd9a)
  • Avoid FocusManager usage before WASM fully initialized (cb0dfc8)
  • ButtonBase should not lose focus when Command.CanExecuteChanged becomes false (e7cbc8b)
  • Don't generate reload cookie for non-C# targets (7977f22)
  • FileSavePicker should create target file on GTK and WPF (d65b9e6)
  • Force refresh of ListViewBase when an item gets added or removed (a324aed)
  • Leak caused by ButtonBase.Command (bf6b6e1)
  • Popup without IsLightDismissEnabled should not auto-focus (7272156)
  • Remove unused configuration files in templates (c834015)
  • TextBox GTK SelectionStart and SelectionLength (a95fce9)
  • Use wss for RemoteControlClient when on https (c4a7b4c)
  • Workaround issue #7899 (5e7baef)
  • Border: Adjust layering logic when using a GradientBrush as BorderBrush (9a01cbc)
  • dragdrop: Fix drag and drop support on skia (bf7e473)
  • dragdrop: Fix support weird behavior when reordering items while more then on is selected (5ecdd1a)
  • flipview: [Android] Fix IllegalStateException from FlipView (47dc23e)
  • flyout: Use Popup for light dismiss (d2b860c)
  • iOS: Fix support for UIElementCollection item replace (caae6b8)
  • iOS: MessageDialog programatically dismissal (8b1fc1f)
  • iOS: StatusBar Foreground for Dark Theme (a8abb0f)
  • pointers: Make sure SV alters only its own manipulations (8094fae)
  • skia: Fix support for UIElementCollection item replace (bd22523)
  • Skia_Gtk: Incorrect window ActualWidth and ActualHeight values on WSL and Linux (ab6fa95)
  • wasm: Failsafe on finalization of UIElement (d662bf1)
  • Adjust framebuffer host initialization sequence (7a8ffef)
  • Align Popup light-dismiss with WinUI (040acc4)
  • Android Samples app deployment to Android 12 (cafd91a)
  • Capture the DispatcherQueue on DependencyObject creation (9d7e399)
  • Changed default option string to All files (ce6a94e)
  • Disable VisibleBoundsPadding on Windows/WinUI3 (6ea6155)
  • Ensure that AppBarToggleButton's base.OnPropertyChanged is called (70c44e9)
  • FileOpenPicker should show file extensions similar to UWP (0b50263)
  • Fix ImageBrush.Stretch on Wasm (7ca6fcf)
  • Fix PasswordBox on Android not obscuring password (b1b7b87)
  • Fix TextBox/PasswordBox Foreground and add test for obscuring password (25072b1)
  • Invalid debug-only message (08ec732)
  • Invalid static resources test (1434c7f)
  • Only check Background on specific elements when hit-testing (c42f52c)
  • Properly resolve types in XamlReader when xmlns not common (3dd31b8)
  • Remove blue tap highlight on Webkit browsers (5b1ac08)
  • TextBox positioning and selection on GTK (85f24f0)
  • InfoBadge: Port bug fix and port tests (4b55a63)
  • net6: Adjust versions for net6-winui templates (dc876ac)
  • test: disable droid TestTextBoxReleaseOutUnfocused (775e854)
  • textbox: caret cursor and click focus area on wasm (c9cc765)
  • TryReadJsFloat updated to support decimal places (759a39e)