It took some great effort from multiple people, but it's finally here! .NET 9 support for the .NET MAUI Community Toolkit!
Requirements
The following tools are now required for CommunityToolkit.Maui.:
- Download/install .NET SDK v9.0.101
- Install Xcode 16.1.0
- Read the latest .NET MAUI Release wiki to always find the latest-supported version) of Xcode for .NET MAUI
- We HIGHLY recommend using the open-source tool Xcodes to easily manage your installed Xcode versions
- Update to the latest stable version of Visual Studio (or Jet Brains Rider)
- After installing the latest stable .NET SDK, update to the latest stable version of the .NET MAUI workload:
- On macOS, open the Terminal and enter the following command:
sudo dotnet workload install maui
- On Windows, open the command prompt (or Powershell) and enter the following command:
dotnet workload install maui
- On macOS, open the Terminal and enter the following command:
- Add a
global.json
file to your application with the following parameters to ensure you're not using a unsupported preview version of .NET (example below)- The .NET MAUI Community Toolkit does not support preview releases of .NET
global.json
{
"sdk": {
"version": "9.0.101",
"rollForward": "latestFeature",
"allowPrerelease": false
}
}
Breaking Changes
Major Breaking Changes
-
All
CommunityToolkit.Maui.Behavior
s no longer automatically assignBehavior.BindingContext
for you- .NET MAUI Behaviors do not automatically inherit their parent's BindingContext (a breaking change from Xamarin.Forms)
- Going forward, the .NET MAUI Community Toolkit will follow this implementation of Behaviors
- We have updated all of our documentation to demonstrate this new functionality: https://learn.microsoft.com/dotnet/communitytoolkit/maui/behaviors/
- If your Behavior has a Binding, it must manually assign the BindingContext, like so:
-
.NET 8 no longer supported
-
Xcode 16.1 Required
-
Increase minimum supported OS versions of
CommunityToolkit.Maui.MediaElement
- Android 26.0
- iOS 15.0
- MacCatalyst 15.0
-
Increase minimum supported versions of
CommunityToolkit.Maui.Camera
to 15.0:- iOS 15.0
- MacCatalyst 15.0
Minor Breaking Changes
Expander
is not trim safe- ValidationBehaviors are not trim safe
CommunityToolkit.Maui.Maps
is not trim safe- Remove
PopupService.ShowPopop(TViewModel)
- Removes
[Obsolete]
method - Use
PopupService.ShowPopup<T>()
instead
- Removes
- Remove
PopupService.ShowPopopAsync(TViewModel, CancellationToken)
- Removes
[Obsolete]
method - Use
PopupService.ShowPopupAsync<T>()
instead
- Removes
- Remove ability to subclass
BaseConverter<TFrom, TTo>
- Subclassing from
BaseConverter<TFrom, TTo>
is not supported - Support requires documentation and complete unit tests
- Subclassing from
- Remove ability to subclass
BaseConverter<TFrom, TTo, TParam>
- Subclassing from
BaseConverter<TFrom, TTo, TParam>
is not supported - Support requires documentation and complete unit tests
- Subclassing from
ValidationFlags.ValidateOnFocusing
renamed toValidationFlags.ValidateOnFocused
ValidationFlags.ValidateOnUnfocusing
renamed toValidationFlags.ValidateOnUnfocused
- In
CommunityToolkit.Maui.Camera
, addlinker.xml
fornet9.0-android
to avoid the Linker removingXamarin.AndroidX.Camera.Core
,Xamarin.AndroidX.Camera.Lifecycle
,Xamarin.AndroidX.Camera.Video
,Xamarin.AndroidX.Camera.View
, andXamarin.AndroidX.Camera.Camera2
public static Task<bool> ShowKeyboardAsync(this ITextInput, CancellationToken)
->public static ValueTask<bool> ShowKeyboardAsync(this ITextInput, CancellationToken)
- NuGet package will not support
Microsoft.Maui.Controls
.NET 10 until .NET 10 GA
And who doesn't love some numbers?! 📈
Analyzer Benchmarks
.NET 9.0 | Mean | Error | StdDev | Median | Gen0 | Gen1 | Allocated |
---|---|---|---|---|---|---|---|
VerifyNoErrorsWhenUseMauiCommunityToolkit | 8.863 ms | 0.1748 ms | 0.3240 ms | 8.724 ms | 62.5000 | 31.2500 | 1.59 MB |
VerifyNoErrorsWhenUseMauiCommunityToolkitHasAdditionalWhitespace | 8.695 ms | 0.1654 ms | 0.4358 ms | 8.528 ms | 62.5000 | 31.2500 | 1.59 MB |
VerifyErrorsWhenMissingUseMauiCommunityToolkit | 12.071 ms | 0.3756 ms | 1.0470 ms | 11.546 ms | 66.6667 | - | 2.29 MB |
.NET 8.0 | Mean | Error | StdDev | Median | Gen0 | Allocated |
---|---|---|---|---|---|---|
VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElement | 9.763 ms | 0.1928 ms | 0.4765 ms | 9.633 ms | 31.2500 | 1.46 MB |
VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElementHasAdditonalWhitespace | 9.565 ms | 0.1862 ms | 0.4637 ms | 9.460 ms | 31.2500 | 1.46 MB |
VerifyErrorsWhenMissingUseMauiCommunityToolkitMediaElement | 15.495 ms | 0.3879 ms | 1.0814 ms | 15.058 ms | 66.6667 | 2.24 MB |
Mac Catalyst release build ILLinker failing
If you run into a build error while building your macOS/Mac Catalyst app, try opting out of the new type registrar. We did that for our sample app for the time being while this bug gets resolved. More information here: https://github.com/xamarin/xamarin-macios/wiki/.NET-9-release-notes#opting-out
What's Changed
- Fix for #2050 [DOC] Update Sample Application to demonstrate correct way to initialize Maps in MauiProgram.cs to support Maps on all platforms. by @mikelor in #2325
- Fixes PopupService scopes problem by @bdovaz in #2333
- Create locker.yml by @VladislavAntonyuk in #2348
- Version Toolkit assemblies alike the NuGet package version by @jfversluis in #2328
- Support .NET 9.0 by @bijington in #2215 as part of this PR, these issues were fixed:
- [BUG] Wrong item is registered when pressing an item in a CollectionView using TouchBehavior
- [BUG][Regression][8.0.1] TouchBevavior binding not working in a CollectionView
- [BUG] Camera View - Zoom does not work when application is built in release mode
- [BUG] Toast Faults on Windows
- ImageResourceConverter fails to display image - .NET 9
- [BUG] Warning when including a ValueConverter starting in .NET MAUI 9
- [BUG] Net 9 Android - StatusBar Color overriden on modal pages
- [BUG] .Net 9 Android MediaElement stops playing video
- [BUG] TouchBehavior crash
- [BUG] Camera view with .NET 9 is causing crash on Android
- [BUG] System.MissingMethodException No constructor found for CommunityToolkit.Maui.Behaviors.TouchBehavior+AccessibilityListener
- [BUG] Buttons not firing inside Layout that has a TouchBehavior
- [BUG] Media Element cannot be disconnected
New Contributors
Full Changelog: 9.1.1...10.0.0