Full checklist
Part of Migrating to Uno Platform 7.0. Every item links to its details. Items that don't apply to your app can be skipped.
Project and targets
- Convert the application to a single
Sdk="Uno.Sdk"project and delete the per-platform head projects. Details. - Retarget any
net9.0-*head or library tonet10.0-*: 7.0 ships nonet9.0assets. Details. - Retarget any
net*-maccatalysthead tonet10.0-desktopand deletePlatforms/MacCatalyst/. Details. - Remove any
WindowsSdkPackageVersionproperty or environment variable, or use a.87revision: theUno.Sdkpicks the Windows SDK projection, and an older one can fail the Windows build withCS1705. Details. - Raise
SupportedOSPlatformVersionto 15.0 (iOS/tvOS) and 24.0 (Android), andTargetPlatformMinVersionto 10.0.19041.0 (WinAppSDK), in any head that pins them explicitly. Details. - Replace the WASM DOM head with the Skia WebAssembly Browser head; remove any DOM/CSS customization and
HtmlElementusage. Details. - Remove any
UnoRuntimeIdentifier,UnoUIRuntimeIdentifierorUnoWinRTRuntimeIdentifierproperty from application heads, and replaceUnoRuntimeIdentifierwithUnoRuntimeVariantin cross-runtime libraries — UNOB0024 points them out. Details.
Packages and Uno Features
- Remove
<UnoFeatures>skiarenderer</UnoFeatures>(now implicit in apps) — and any native-only feature switches. Replace it withSkiainstead if the app also listsWebGpuand still draws with SkiaSharp, or in a library that usesSKCanvasElement, theSkiaExtensionsconversions or Toolkit Skia controls. Code built for Windows that draws with Skia also needs<UnoEnableSkiaOnWinAppSdk>true</UnoEnableSkiaOnWinAppSdk>. Details. - Remove references to the deleted assemblies/types and to native element hosting. Details.
- Remove manual
ConfigureUniversalImageLoader();(Android) and other native bootstrap. Details.
Libraries
- Recompile every Uno-dependent library against 7.0. Details.
- Re-test
#if __IOS__/#if __ANDROID__code andios:/android:XAML inside multi-targeted libraries — those assets are now deployed on mobile heads instead of being replaced by thenetX.0asset. Details.
Renames
- Rename
Uno.UI.Toolkitusings andxmlnsdeclarations to their newUno.UI.*namespaces. Likewise dropSkiafromUno.UI.Runtime.Skia.*/Uno.WinUI.Runtime.Skia.*usings and host package references — see Runtime host renames. Details. - Update assembly-qualified type names that reach MRT Core (
Microsoft.Windows.ApplicationModel.Resources.*) — the assembly is nowUno.WinRT, notUno.UI. Details.
App startup and platform state
- Convert the Android
Applicationclass to overrideCreateHost()instead of passing anAppBuilderdelegate to the base constructor. Derive it andMainActivityfromUno.UI.Runtime.Android.NativeApplication/Uno.UI.Runtime.Android.ApplicationActivityinstead of theMicrosoft.UI.Xamltypes. Details. - Replace every
Application.OnActivatedoverride withAppInstance.GetCurrent().GetActivatedEventArgs()read fromOnLaunched, plus anAppInstance.GetCurrent().Activatedhandler for activations that arrive while the app runs. Details. - Move
Suspending,Resuming,EnteredBackgroundandLeavingBackgroundsubscriptions fromApplicationtoCoreApplication, and save state fromWindow.Closedon desktop, where suspension is no longer reported. Details. - On iOS/tvOS, call
Uno.Storage.ApplicationDataMigrator.MigrateSettings()at startup to bring pre-7.0 application settings into theUnoApplicationDatacontainer, and update any native/interop code that read them fromNSUserDefaults.StandardUserDefaults. Details.
Code and XAML
- Convert every
xmlns:…="clr-namespace:…"declaration in your XAML to theusing:form. Details. - Delete native-only
FeatureConfigurationcalls. Details. - Replace
ItemClickCommand/CommandonListViewandGridViewwith anItemClickhandler or the Uno ToolkitCommandExtensions.Commandattached property. Details. - Retype
Window.VisibilityChangedhandlers toWindowVisibilityChangedEventArgs, and drop any explicitWindow*EventHandlerdelegate construction. Details. - Move
Backgroundreads/writes offFrameworkElement-typed references and offTextBlock/Image/Shape, and re-pointFrameworkElement.BackgroundPropertyat the declaring type. Details. - Move
.DataContextreads/writes andDataContextChangedsubscriptions off non-FrameworkElementobjects (Brush,Transform,FlyoutBase, …) onto the owning element —{Binding}on those objects still resolves. Details. - Replace
SetBindingcalls on non-FrameworkElementobjects withBindingOperations.SetBinding, and passFrameworkElement-typed references to theGridrow/column accessors. Details. - Replace Uno-only implicit conversions (
Brush brush = Colors.Red,GridLength width = "Auto", …) andThickness.Empty/CornerRadius.Nonewith explicit constructors, and collection initializers on panels,BorderandScrollViewerwithChildren = { … },Child =orContent =. Details.
Behavior and testing
- If you use
Window.SystemBackdrop, make your own rootPage/panel transparent — the framework no longer does it for you. Details. - Re-baseline visual/snapshot tests and re-test text, lists/scroll, IME, pickers, and safe-area/notch handling on devices. Details.
If you are moving from native rendering
See the Uno 6.0 migration guide for the full Android/iOS/WebAssembly Skia bootstrapping steps.
Related pages
- Errors, symptoms and code search to go from an error or symptom to its fix.
- Behavior changes to re-test for what to re-test.
- Upgrade steps to return to the main path.