Uno Platform v2.0.528 Release Notes

Release Date: 2019-12-20 // over 4 years ago
  • πŸš€ This release is bits that were announced at UnoConf in September, and it's a big one! It contains lots of new features, improvements, and bug fixes.

    πŸš€ This release is now a community effort, thanks to Hacktoberfest, an also to community contributors such as @MartinZikmund, @pkar70, @kakone, @pdecostervgls, @gevart and all the Uno Team people!

    πŸš€ > Note: To install the latest Visual Studio Extension to use XAML Hot Reload, you'll need to do it from the release files below for the next few days, as the release there is still 1.45. We're discussing publication issues with the Microsoft VS Marketplace team about that, we'll update the release notes accordingly.

    XAML Hot Reload for iOS, Android and WebAssembly

    ⚑️ XAML Hot Reload is now supported, giving ability to design the UI of a running application directly from Visual Studio. Best of all, it can update multiple platforms at once!

    Head to this guide to get started.

    πŸ‘ Dark mode support

    ⚑️ ThemeResources support to enable Dark Theme has been included, with automatic detection on iOS, Android and WebAssembly. It's not yet supporting live update from one theme to another, but this is coming soon!

    🏁 You can view the results of this support in the Uno Calculator (WebAssembly, App Store and Play Store), in the Xaml Controls Gallery WebAssembly App, and the Windows Communit Toolkit WebAssembly App.

    Pointer and Manipulation events

    πŸš€ This release adds extensive support for Pointer events and Manipulation events, paving the way for more advanced controls support such as data grids, and other interactive controls.

    πŸ‘ GitPod WebAssembly development support

    πŸ’» GitPod enables very interesting scenarios for friction-less development with Uno, as well as contributing to Uno. Because there is nothing to install, and that everything runs in your browser, it lowers the barrier to entry for developing, as there's no step of "setting up the environment" that can take such a long time on some cases.

    πŸ— GitPod also enables live PR validations, with the pre-build features, allowing to test the live bits of a PR inside of a running VS Code instance, simply by clicking on the "review in GitPod" button in every PR.

    Get started [here with this guide].(https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-gitpod.md).

    Visual Studio 4 Mac compatibility for iOS and Android

    πŸš€ Building an app for iOS and Android in Visual Studio for mac is now supported, with initial support for XAML intellisense, in release 8.4.

    Uno Platform WebAssembly Renderers for Xamarin.Forms

    πŸš€ This release also enables the support for WebAssembly Renderers for Xamarin Forms 4.3.

    Other additions

    • Large improvements in UIElement clipping behavior
    • πŸ‘Œ Support for hardware APIs such as Windows.Devices.Lights.Lamp, Geolocator, Gyrometer, Magnetometer, Accelerometer, VibrationDevice, Barometer
    • πŸ‘Œ Support for system apis JumpList, PhoneCallManager, DisplayInformation
    • πŸ‘ PathGeometry and PolyLine support for WebAssembly
    • XAML type conversions through CreateFromStringAttribute
    • πŸ‘Œ Support for ContentDialog, PersonPicture, TooltipService, ToggleButton.IsThreeState and TextBox.IsReadonly (WebAssembly)
    • πŸ‘ VisualState setters support for static, theme resources and template bound values

    βœ… Lots of work has been done to make Uno more reliable, with the inclusion of UI and on-device unit testing for iOS, Android and WebAssembly as part of the PR process. Each PR is now validated by running an extensive set of tests through the uno.uitest cross-platform UI Testing library.

    πŸš€ This release also includes updates that enable support for ReactiveUI (samples) and VLC

    Here's the full list:

    πŸ”‹ Features

    • πŸ‘ #2029 Support for MenuFlyoutItem.Click
    • πŸ‘Œ support /[file]/[name] format in ResourceLoader.GetForCurrentView().GetString()
    • πŸ‘ [#2039] Added support for Xaml type conversions using CreateFromStringAttribute.
    • 🏁 [#] Support for Windows.Devices.Lights.Lamp on iOS, Android.
    • πŸ“ˆ #1970 Added support for AnalyticsInfo properties on iOS, Android and WASM
    • πŸ“¦ [#1207] Implemented some PackageId properties
    • πŸ‘ #1919 Support for PathGeometry on WASM.
    • πŸ‘Œ Support for Geolocator on WASM, improvements for support on Android, iOS
    • πŸ‘ #1813 - Added polyline support for WASM and samples for all shapes
    • #1743 - Added a change to make the MarkupExtensionReturnType optional
    • βž• Added Dark and HighContrast theme resources, reacts to Dark/Light theme on iOS, Android and WASM automatically during the startup of the app if RequestedTheme is not set in App.xaml
    • πŸ‘Œ Support for Gyrometer on Android, iOS and WASM
      • ReadingChanged
      • ReportInterval
    • πŸ‘Œ Support for Launcher.QueryUriSupportAsync method on Android and iOS
    • ⚑️ #1493 - Implemented the Windows.Input.PointerUpdateKind Enum.
    • πŸ‘ #1428 - Add support for horizontal progressbars to BindableProgressBar on Android.
    • βž• Add support for Windows.Devices.Sensors.Magnetometer APIs on iOS, Android and WASM
      • ReadingChanged
      • ReportInterval
    • βž• Add support for Windows.UI.StartScreen.JumpList APIs on Android and iOS
      • Includes Logo, DisplayName and Arguments
      • The activation proceeds through the OnLaunched method same as on UWP
    • πŸ”¨ Refactored DrawableHelper to the Uno project
    • βž• Add full implementation of Windows.UI.Xaml.Input.InputScopeNameValue on all platforms.
    • βž• Add support for Windows.Devices.Sensors.Accelerometer APIs on iOS, Android and WASM
      • ReadingChanged
      • Shaken
      • ReportInterval
    • Align ApplicationData.Current.LocalSettings.Add behavior with UWP for null and repeated adds
    • βž• Add support for Windows.ApplicationModel.Calls.PhoneCallManager
    • βž• Add support for Windows.Phone.Devices.Notification.VibrationDevice API on iOS, Android and WASM
    • 🏁 Basic support for Windows.Devices.Sensors.Barometer
    • πŸ‘Œ Support setting Style inline (e.g. <TextBlock><TextBlock.Style><Style TargetType="TextBlock"><Setter>...)
    • πŸ‘ [Wasm] Add support for DisplayInformation properties LogicalDpi, ResolutionScale, ScreenWidthInRawPixels, RawPixelsPerViewPixel , and ScreenHeightInRawPixelsΒΈ
    • Permit DependencyProperty to be set reentrantly. E.g. this permits TextBox.TextChanged to modify the Text property (previously this could only be achieved using Dispatcher.RunAsync()).
    • βž• Add support for filtered solutions development for Uno.UI contributions.
    • πŸ‘ 132984 [Android] Notch support on Android
    • βž• Add support for Android UI Tests in PRs for improved regression testing
    • Add static support for ThemeResources : Application.Current.RequestedTheme is supported

      • Dark and Light are supported.
      • Custom Themes are supported. This let you specify HighContrast or any other custom themes.
        πŸ‘ (this is a feature not supported in UWP)

      // Put that somewhere during app initialization...Uno.UI.ApplicationHelper.RequestedCustomTheme = "MyCustomTheme";

      • FrameworkElement.RequestedTheme is ignored for now.
      • Should be set when the application is starting (before first request to a static resource).
    • Prevent possible crash with MediaPlayerElement (tentative)

    • βž• Add support for ContentDialog, including Closing and Closed events

    • Permit DependencyProperty to be set reentrantly. E.g. this permits TextBox.TextChanging to modify the Text property (previously this could only be achieved using Dispatcher.RunAsync()).

    • ⚑️ Implement TextBox.TextChanging and TextBox.BeforeTextChanging. As on UWP, this allows the text to be intercepted and modified before the UI is updated. Previously on Android using the TextChanged event would lead to laggy response and dropped characters when typing rapidly; this is no longer the case with TextChanging.

    • [WASM] ComboBox's dropdown list (CarouselPanel) is now virtualized (#1012)

    • πŸ‘Œ Improve Screenshot comparer tool, CI test results now contain Screenshots compare data

    • ⚑️ Updated Xamarin.GooglePlayServices.* packages to 60.1142.1 for Target MonoAndroid80

    • ⚑️ Updated Xamarin.GooglePlayServices.* packages to 71.1600.0 for Target MonoAndroid90

    • <ContentPresenter> will now - as a fallback when not set - automatically bind to
      TemplatedParent's Content when this one is a ContentControl.
      You can deactivate this behavior like this:

      FeatureConfiguration.ContentPresenter.UseImplicitContentFromTemplatedParent = false;

    • βž• Add support for Selector.IsSynchronizedWithCurrentItem

    • βž• Add support for CoreApplication.MainView and CoreApplication.Views

    • βž• Add support for resolution of merged and theme resources from ResourceDictionary in code

    • βž• Add non-failing StatusBar BackgroundOpacity and BackgroundColor getters

    • 😌 Relax DependencyProperty owner validation for non-FrameworkElement

    • ToolTip & ToolTipService are now implemented.

    • πŸ‘ #1352 Add support for ThemeResources with different types (e.g.: mixing SolidColorBrush and LinearGradientBrush)

    • βž• Add support for BitmapSource.PixelWidth and Height

    • πŸ‘ Preliminary support for ColumnDefinition.ActualWidth and RowDefinition.ActualHeight.

    • ⚑️ Updated VisualTree of an app with Visibility for each items.

    • βž• Add support for CompositionTarget.Rendering event.

    • βž• Add support for IObservableVector<T> in ItemsControl

    • [#1559] [#1167] Wasm: make the IsEnabled property inheritable.

    • πŸ“š Full support of pointer events cf. routed events documentation

    • βž• Add support of manipulation events cf. routed events documentation

    • πŸ’… Update CheckBox style to 10.0.17763

    • βž• Adds the support for AutomationProperties.AutomationId

    • #1328 Basic ProgressRing implementation for WASM

    • βž• Add support for Windows.UI.Xaml.Controls.Primitives.LayoutInformation.GetAvailableSize

    • βž• Add support for Runtime Tests that require UI integration

    • βœ… Enable iOS UI Tests

    • βž• Add support for PersonPicture

    • βž• Add support for VisualState Setter data binding, static resources and complex objects

    • Clipping to bounds of control is now more similar to UWP

    • πŸ”‹ The feature flag FeatureConfiguration.UseLegacyClipping is now deprecated and not used anymore

    • 🏁 XAML Hot Reload support for iOS, Android and Windows

    • βž• Add support for GitPod Workspace and prebuilds

    • #880 Added added implicit conversion for double to Thickness

    • βž• Add Android support for CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar to programatically draw under the status bar

    • πŸ‘ [WASM] ScrollViewer.ChangeView is now supported

    • [Wasm] Add the ability to focus a TextBox by clicking its header

    • βž• Add support for ToggleButton.IsThreeState and ToggleButton.Indeterminate

    • πŸ‘ [Wasm] Add support for TextBox.IsReadonly

    πŸ’₯ Breaking changes

    • TextBox no longer raises TextChanged when its template is applied, in line with UWP.
    • ⚑️ TextBox.TextChanged is now called asynchronously after the UI is updated, in line with UWP. For most uses TextChanging should be preferred.
    • πŸ‘€ [Android] TextBox.IsSpellCheckEnabled = false is now enforced in a way that may cause issues in certain use cases (see https://stackoverflow.com/a/5188119/1902058). The old behavior can be restored by setting ShouldForceDisableSpellCheck = false, per TextBox.
    • πŸ‘» TextBox.Text = null will now throw an exception, as on UWP. Pushing null via a binding is still valid.
    • Projects targeting Android 8 must now use Xamarin.GooglePlayServices.* 60.1142.1 (60.1142.0 has been unlisted)
    • Projects targeting Android 9 must now use Xamarin.GooglePlayServices.* 71.1600.0
    • πŸ“š [iOS] UIWebView is deprecated and replaced with WKWebView (ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.)
    • πŸ“š [iOS] If you set the ManipulationMode to something else than System or All, the DelaysContentTouches is going to be disabled on all parent ScrollViewer
    • [#1237] Static resources defined in App.xaml were not processed and registered properly

    🚚 > This change might break the compilation for projects that define duplicate resources in other globally accessible resource dictionaries. Adjustments to remove duplicate resources may be necessary.

    • [WASM] The tranform returned by UIElement.TransformToVisual is now including scale, rotation or any custom transformation that was declard on a parent element (transform was only including translate components)

    πŸ› Bug fixes

    • #2093 Fix missing measurement option for polyline and polygon
    • Font size, used for ComboBoxItems, are same as in ComboBox content (not smaller)
    • πŸ‘» #2023 Android WebView.NavigateToString doesn't throw exception even when string is very long.
    • #2020 ContentControl no longer display the datacontext type when ContentTemplate and content are empty
    • ⚠ #1987 Missing XML comment warnings are disabled on generated code
    • #1939 Handles nullables types in XAML file generator
    • #1741 On Android, ApplicationData.Current.[LocalFolder|RoamingFolder] can now be used in the ctor of App.xaml.cs

    🏁 > This change introduces a new constructor in Windows.UI.Xaml.NativeApplication that requests a delegate. In the Visual Studio Templates for Uno Platform, the Main.cs for the Android, the constructor now provides () => new App() instead of new App(), you can do the same in your existing application. See this file for an example.

    • [#1767] Invalid this keyword generated for Storyboard.SetTarget
    • 0️⃣ [#1781] WASM Images are no longer draggable and selectable by default to match UWP
    • πŸ— #1771 Fix ".Uno" in project names resulted in build errors.
    • #1531 Fix an issue with VirtualizePanelAdaptater by adding a cache where the ItemSources length change and created a OutOfRangeException
    • [WASM] #1518 Fix Navigation Issue Where SystemNavigationManager.enable() is called twice and clear the stack history
    • #1278 the XAML sourcegenerator now always uses the fully qualified type name to prevent type conflicts.
    • #1392 Resolved exceptions while changing cursor color on Android P.
    • 🍱 #1383 resolve Android compilation errors related to Assets filenames: "Invalid file name: It must contain only"
    • #1380 iOS head generated by Uno Solution Template now specifies MinimumOSVersion, in line with XF so first compile is successful.
    • #1276 retrieving non-existent setting via indexer should not throw and ApplicationDataContainer allowed clearing value by calling Add(null) which was not consistent with UWP.
    • πŸ›  [iOS] Area of view outside Clip rect now allows touch to pass through, this fixes NavigationView not allowing touches to children (#1018)
    • ComboBox drop down is now placed following a logic which is closer to UWP and it longer flickers when it appears (especilly on WASM)
    • πŸ’… #854 BasedOn on a <Style> in App.Xaml were not resolving properly
    • #706 x:Name in App.Xaml's resources were crashing the compilation.
    • #846 x:Name on non-DependencyObject resources were crashing the compilation
    • πŸ’» [Android/iOS] Fixed generated x:uid setter not globalized for Uno.UI.Helpers.MarkupHelper.SetXUid and Uno.UI.FrameworkElementHelper.SetRenderPhase
    • πŸ›  Fix invalid XAML x:Uid parsing with resource file name and prefix (#1130, #228)
    • πŸ›  Fixed an issue where a Two-Way binding would sometimes not update values back to source correctly
    • Adjust the behavior of DisplayInformation.LogicalDpi to match UWP's behavior
    • [Android] Ensure TextBox spell-check is properly enabled/disabled on all devices.
    • πŸ›  Fix ComboBox disappearing items when items are views (#1078)
    • [iOS] TextBox with AcceptsReturn=True crashes ListView
    • πŸ›  [Android/iOS] Fixed Arc command in paths
    • 0️⃣ Changing the DataContext of an element to a new value were pushing the properties default
      value on data bound properties before setting the new value.
    • [Android] .Click on a ButtonBase were not raising events properly
    • #1350 Vertical Slider was inverting value when tapped
    • TemplateReuse not called when dataContext is set
    • [WASM] #1167 Apply IsEnabled correctly to TextBox (inner TextBoxView is now correctly disabled)
    • [Android/WASM] Fix MaxLength not respected or overwriting text
    • Settings collection-based properties on root node in XAML were leading to C# compilation errors
    • Properties on root node in XAML were not applied when there was no content (sub-elements)
    • [Android] GroupedListviewHeaders were causing scrolling lag, missing flag
    • 0️⃣ Flyout that are than anchor but fit in page were defaulting to full placement.
    • πŸ›  [iOS]Fixed DatePickerFlyout & TimePickerFlyout not being placed at the bottom
    • 🌐 [Android] Animated content is cut off/glitchy when RenderTransform translation is applied (#1333)
    • πŸ‘ #1409 Provide a better error-message on Page-Navigation-Errors
    • πŸ›  Fix NRE when using custom Pivot templates.
    • πŸ›  Fix iOS CompositionTarget handler race condition
    • πŸ“œ [Wasm] Fix TextBoxView SelectionStart/SelectionEnd value parsing
    • [Wasm] Don't fail on FrameworkElement.Dispose()
    • [Android] ScrollViewer were no more clipping the scrollable area.
    • ComboBox's ControlTemplate was requiring a binding to TemplatedParent for the x:Name="ContentPresenter" control. Now aligned with UWP by making this binding in the control itself.
    • πŸ›  #1352 ThemeResource bugfixes:
      • StaticResource not working inside ResourceDictionary.ThemeDictionaries
      • Using a ThemeResource on the wrong property type shouldn't raise compile-time error (to align with UWP)
    • πŸ›  Fix layout bug in Image control.
    • [#1387] ComboBox: Fix DataContext was propagated to <ContentPresenter> when there was no selected item, causing strange display behavior.
    • πŸ›  #1354 fixed Recycler.State desync issue
    • #1533 [Wasm] Fix measure caching for zero sized measure
    • [iOS(iPad)] ComboBox : the combobox wasn't fully expanding vertically on first opening.
    • Popup & ComboBox (and other controls using Popup) were not behaving properly when IsLightDismissable were set to true.
    • [Wasm] Fix unloaded UIElements are made visible if measured and arranged
    • [Android] Fix java NRE handing touch events on detached view
    • πŸ‘ [Pivot] Add support for non PivotItem items
    • #1557 Fix local DataContext on ContentDialog is overwritten
    • [WASM] Fix display for multiple popups (e.g. ComboBox inside of ContentDialog)
    • [Android] Fix invalid ImageBrush stack overflow with delayed image reuse
    • πŸ›  CommandBar fixes (AppBarToggleButton, AppBarButton)
    • πŸ›  Fix Symbols rendering in sample app
    • πŸ›  Fix multiple invocations of OnLoaded when hosting a control in ItemsControl
    • [Android] Fix glitchy animations inside ListView with transformed ancestor.
    • πŸ’… Adjust AppBar and CommandBar styles.
    • Adjust the Stretch mode of BitmapIcon content
    • πŸ›  Fix invalid Image size constraint
    • [Android] MenuFlyout was misplaced if view was in a hierarchy with a RenderTransform
    • πŸ›  Fix color refresh of BitmapIcon monochrome Foreground
    • [IOS] DatePickerFlyout min and max year were resetting to FallbackNullValue
    • [Android] Fix bug in ListView when using an ObservableCollection as its source and using Header and Footer.
    • #1924 Fix Android ListView.HeaderTemplate (and .FooterTemplate) binding bug when changing Header and Footer.
    • πŸ›  164480 [Android] fixed a text wrapping issue caused by layout height desync
    • [Wasm] Fix unable to reset Image.Source property
    • #2014 Fix iOS Picker for ComboBox not selecting the correct item.
    • πŸ‘» [iOS] #977 Fix exception when setting MediaPlayerElement.Stretch in XAML.
    • #1708 Fix initial Flyout placement and window resize placement
    • [Android] #2007 ComboBox does not take Window.VisibleBounds to position its popup
    • πŸ›  [Wasm] Fixes the measure of a TextBoxView #2034 #2095
    • [Android] [Wasm] Recent clipping improvements were incompleted. Fixed a case where a control was allowed to draw itself to use more than available place in the arrange phase.
    • [iOS] Fix negative result value of TimePicker. Now value range is limited from 0 to 1 day
    • ⚑️ #2129 WebAssembly Bootstrapper update to remove the implicit .NET 4.6.2 dependency, and support for long file paths on Windows.
    • #2147 Fix NRE in android-specific TextBox.ImeOptions
    • #2146 [iOS] ListView doesn't take extra space when items are added to collection