4.8.15
We're excited to announce our second release for 2023, which includes over 200 fixes and product improvements, as well as support for .NET 8 Preview 2.
As promised, we've been hard at work on the improvements you requested in our 2023 Roadmap survey. One of the top requests was to make the startup experience with Uno Platform as seamless as possible. In response, we've introduced a new startup experience designed to make setting up new projects with Uno Platform easier and more flexible than ever before. The Uno Platform Templates wizard will guide you through setting up your project, allowing you to choose as many or as few pieces of Uno Platform as you desire. So, starting a new Uno Platform project is easier than ever moving forward!
As with every release we also spent significant effort in improving performance across all supported platforms. In addition to multiple in-memory and runtime performance improvements we are introducing OpenGL acceleration for Uno Islands, which are typically used in WPF modernization scenarios, showing 12x improvement over software rendering. In addition, TextBlock rendering for all Skia backends, showing 5x improvements in common scenarios.
Here are some additional noteworthy improvements:
- ThemeShadow for iOS/Catalyst/Android
- Shadows on Skia targets
- Performance and memory improvements
- Memory improvement in XAML SourceGenerator
- Runtime performance and memory improvement in DependencyObject
- Memory improvements in ItemsControl and ContentControl
- GTK+Linux fixes for Ubuntu 23.04+ and Arch distributions
As always, a big shoutout to everyone who worked closely with our core contributor team to make this release possible:
- Reliability fixes by @morning4coffe-dev
- Documentation updates by @morning4coffe-dev, @mrlacey
- Localization fixes by @igiona
- Build updates by @workgroupengineering
- VS Code updates by @kojo12228
- Skia Shadows support by @VitezslavImrysek
- Libinput fixes by @microhobby
- Wasm fix by @mmarinchenko
Head to our blog post for additional details on this release!
Full Changelog
Features
- Support for more Font properties in Skia Overlay TextBox e6976b1
- renderTargetBitmap: [Skia] Add ability to use RenderTargetBitmap as Image.Source bfe33b7
- Add feature flag for the layout cycle fix da44634
- Add support for PropertySet, StringMap and ValueSet ed99e14
- Add support for Scale property in CornerRadiusFilterConverter 089f344
- Add support for ToolTip in Uno Islands 4b1328d
- Add support for WPF OpenGL acceleration 5790368
- Added support for shadows on SkiaSharp a7647ff
- Basic implementation for HttpRequestMessage d032b36
- Bump templates to use net7.0 by default adbc6a6
- Bump UWPSyncGenerator version e39864e
- Enable XAML Trimming by default 1a998ff
- restore media player tests for winui 1f8ebfa
- Support CameraCaptureUIMode.Video on Android 40ceeda
- ThemeShadow support on Android bfaca1f
- ThemeShadow support on iOS/macOS adfc824
- Vector3 XAML conversion 54d65c5
- Lamp: Support setting Brightness on Android 13 and later dd04f75
- mediaplayer: Enable for WinUI, update to WinAppSDK 1.2 a1f25d5
- xamlgen: Add support for debugging information, refactor BaseUri location fb3a55e
- xamlparser: Adjust support for relative Uri parsing to enable contextual image loading 8b4c228
Performance Improvements
- TextBox: Avoid unnecessary allocations 2e9cec7
- Avoid calling
ToString
twice on the sameStringBuilder
c77884d - Avoid unnecessary
TrimEnd
call da8e8a4 - DependencyObjectAvailabilityGenerator: Avoid calculating property names twice 60be919
- Avoid holding into symbols 94cbbfe
- avoid intermediate calls for Colors.FromInteger 7029a8b
- Avoid unnecessary
ToDisplayString
9d8abb9 - Avoid using
GetAllTypesAttributedWith
eed1949 - Don't allocate DependencyPropertyCallbackManager on disposal daf8cd3
- Faster symbol lookup e065b53
- Optimize LOH string allocations in Xaml generator 8d161db
- do: Reduce CallbackManager allocations when no callbacks are registered 9aa78b5
- dp: Reduce property search allocations 30fa159
- Improve xaml generator performance cfe3418
- Reduce allocations during inherited properties propagation b4e9159
- Remove DisplayClass in DependencyProperty.GetMetadata() 168f528
- remove reflection usage when parsing color names 89bda71
- memory: Fix datacontext propagation on precedence level change 4f7300a
- Remove string allocations from method Colors.FromArbg 5f28dde
- WindowManager: Add SetPropertyNativeFast binding b080921
BREAKING CHANGES
- winappsdk: This PR removes unavailable types and members from the WinUI variant of Uno. Those members were present in early versions of WinAppSDK, and are not implemented in Uno.
- assets: The ms-appx:/// specifier for libraries introduced in Uno Platform 4.6 was incorrectly lower-casing the library name. This change now uses the original name used by the library, which is the AssemblyName property of the library hosting the assets.
Bug Fixes
- Add missing CSS class for GTK TextBoxView 3cfdafd
- Avoid setting intial PasswordRevealState for plain TextBox 9344aed
- AdaptiveTrigger: AdaptiveTriggers precedence 05041e2
- android: Rely on actual string comparison and not string reference 0d74cb3
- ItemsControl: ContentControl at the DataTemplate root should keep bindings 6542c27
- ItemsControl: Don't clear content on IsContainerFromTemplateRoot 7c9c6c2
- ItemsControl: Ensure Content property is cleared when is not own container e9b3372
- listView: Fix add/remove not able to re-use container 4e978a6
- pointers: Pointers are not bubbling through list view on iOS f111ba3
- targetBitmap: RenderTargetBitmap cannot be re-rendered on canvas on iOS and macOS 5298e1d
- xamlreader: Ensure adding properties on an explicit property reports an error 83e5279
- XamlReader: Apply static resources before evaluating element names 3481229
- XamlReader: parsing of Rect type property f6adcb5
- Add missing PRIResource in default library template 0068ec5
- Add missing PRIResource in default template e8c03c2
- Adjust support for single-instance generator 864a27e
- Correctly default to "all files" in WPF FileOpenPicker 783c7b8
- enable feature only for Android c9fccbe
- Enable support for ContentDialog in Uno Islands 693c244
- Failing Lamp PR 283bdd1
- Fallback to fuzzy matching properly d9f53df
- Fix case sensitivity of FontWeight 0beeb75
- Fix ObjectDisposedException crash in Geolocator on Android 2af054e
- Fix possible collection changed while enumerating in EVP propagation 5bc413a
- Fix x:Bind code generation for statics 21d59b4
- Fix XamlType lookup to correctly consider PreferredXamlNamespace 2b5fba8
- GetCulturesHierarchy loop on invalid CultureInfo d3942bb
- GTK TextBox selection 5efdac4
- Handle UnoXamlHostBase end of app lifecycle gracefully 6a3b198
- Properly check Lamp support f6d08bd
- CameraCaptureUI: Fix crash on net6.0+ 239cc51
- midi: Tentative for android recursion issue 643c498
- tooltip: Adjust initial propagation of the DataContext 55c9d48
- Add workaround for net7.0-android issue 2c8f90e
- Address review 2a5c571
- Avoid processing GTK events before dispatching 293c310
- Avoid text modification after TextChanged is raised f5729d9, closes #6289
- better comments e3d9e47
- bump minimum macOS version for SampleApp c506cde
- Disallow ComboBox popup under translucent status bar 391ae8e
- Don't set UnoRemoteControlHost when running inside VS Windows 9851312
- Ensure TextChanging is raised repeatedly when TextChanged handler modifies 7e4775c
- Include System.Memory fix for Xamarin.iOS projects e203684
- Position the AutoSuggestBox popup while taking the keyboard into account e1fbbe1
- refresh Panel layout when size changes db521c7
- Remove GuardBand on GTK HW renderers to avoid visual glitches around clipping b748563
- Show an actionable error message on SDK mismatch ce24b5a
- Use culture invariant float parsing 019bd9d
- android: Ensure that DependencyObject.Parent is set when adding a control to its parent 5126310
- appxaml: Adjust ability for arbitrary app class name bf06dd5
- Binding: Adjust binding to indexer based on expression parameter 38e63af
- ContentPresenter: Reset DataContext override on null Content 1e66781
- deque: Fix memory leak on clear 2dda57b
- gtk: Ensure that harfbuzz is eagerly loaded to avoid system versions interference 84b3ad6
- ios: LVI layouting 16293bb
- ItemsControl: Ensure containers are properly cleaned up in ItemsControl and ListView 528c4a1
- ListView: ios lv snap rubber-banding e0b48e1
- localization: avoid using deprecated property 94159ac
- skia: Correctly handle SolidColorBrush opacity in inlines 8b05a85
- templates: Update
Microsoft.WindowsAppSDK
in templates e3bb671 - templates: Use UTF8 for template files a802808
- VirtualizingPanel: Adjust for nullability constraints ac0858d
- XamlGenerator: Ignore surrounding whitespace for
LineBreak
0ddd93b - xamlhost: Ensure proper render surface initialization 0405a16
- RecordAllTestsCommand 4f12c88
- Remove DependenciesInitializer 37f8dbd
- Restore ElevatedView support for WinAppSDK 1e1a003
- Show error message when incompatible winappsdk to net7.0 with uno is found b0d55de
- XamlReader: Ignore surrounding whitespace for
LineBreak
2b40f26 - restore midi enumeration sample 0f7e275
- xaml: Ensure generator indempotence dcafe81
- skia.gtk launch config to use .NET 7 f787bd4
- wasm debug launch config to use
chrome
type 9a3ff9e - android: Workaround IntPtr.Size intrinsics on 32/64 bits differences 408e177
- assets: Include transitive and nuget assets in publish output abec48d
- assets: Use orginal library name casing for ms-appx:/// uri 73e0145
- CalendarDatePicker: Correctly display the CalendarView 2af250d
- css: Minor adjustment to make browser DevTools happier 613b7fe
- dragdrop: [WASM] Fix support of D&D multiple files. 508a2b4
- fonts: [Android] Adjust backward compatibilty for explicit AndroidAssets-included fonts 98acad0
- fonts: [Wasm] Remove unused fonts sections 7ebe777
- image: Fail with a descriptive error on relative Uri loading 30ffcda
- iOS: Multiline TextBox with external keyboard f2c620f
- itemsRepeater: Fix only first item visible when IR is out of range on load 08ec92e
- NumberBox: Show full keyboard when AcceptsExpression is true f5db9a6
- reg: Adjust lookup for symbol resources 0251233
- reg: Update symbols after ms-appx:/// casing update 26ba9bb
- resources: Resources loading from separate assemblies 2f7d09c
- template: Adjust linux build support for mobile targets 2943e03
- template: Move app.xaml.cs to shared "AppBase" 8291704
- template: Move windows target to be first for intellisense 8105f98
- templates: Fix Server project d1d8060
- wasm: Implement InlineCollection.CopyTo d2f3c34
- Disable appkit template creation until fixed in .NET 549d915
- templates: reduce pre-requisites list for net7.0 c5acfa0
- templates: Remove dead import conditions 9733b25
- TextBox: Setting
TextBox.Text
tonull
should only throw in UWP da0d99e - WebView: Fix 'WebView.Source' being null when 'Navigate' is called 1a4c0fa
- winappsdk: Run package diff on winui build 8e2bca0
- [iOS] Possible layout cycle when a sub-child invalidate its layout while being arranged 8dafad7
- Adjust not implemented error info in analyzers e3f5933
- Mark
LocalizationResources
as auto-generated 8ef6a9b - System.IO.DirectoryNotFoundException looking for /dev/input 4b5ef3c
- xamltrim: Adjust for best performance of XAML Trimming ba68450