Skip to content

Migrate to Uno.Sdk and Uno Platform 7.0 - #319

Open
MartinZikmund wants to merge 30 commits into
CommunityToolkit:mainfrom
MartinZikmund:mzikmund/uno7-sdk
Open

MartinZikmund wants to merge 30 commits into
CommunityToolkit:mainfrom
MartinZikmund:mzikmund/uno7-sdk

Conversation

@MartinZikmund

Copy link
Copy Markdown
Contributor

No description provided.

MartinZikmund and others added 10 commits October 27, 2026 06:07
Squashed recreation of CommunityToolkit#305 on top of CommunityToolkit#315.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno.Sdk 7.0.0-dev.51 / Uno.WinUI 7.0.0-dev.1656, which require .NET 10.
WinUI 2 (Uno.UI 5.x) stays on .NET 9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
The versions pinned by Uno.Sdk 7.0.0-dev still reference pre-7.0 Uno assemblies (unoplatform/uno#24297).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
TextBlock has no Background in WinUI, and Uno 7 removed it for parity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno 7 supports RichTextBlock, so the Uno WinUI 3 heads get the same ColorCode-highlighted
source viewer as Windows. ColorCode.WinUI is Windows-only, so its formatter is ported onto ColorCode.Core.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno 7 supports RichTextBlock, so the Uno WinUI 3 heads can use the Labs MarkdownTextBlock
instead of showing raw Markdown. Opt-in through LabsMarkdownTextBlockVersion until Labs
publishes a build with Uno targets. Links now open through the same handler as on Windows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
FontWeights lives in Microsoft.UI.Text on WinUI 3, and the Labs default inline code size (10) is too small next to 14px body text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Bump Uno.WinUI to 7.0.0-dev.2428 to match the Core version pinned by the SDK.
Drop the Uno.WinUI.Lottie reference: Lottie is now built into Uno.WinUI and the
standalone package stopped at 7.0.0-dev.1663, which would pull in an older Uno.WinUI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
MartinZikmund and others added 9 commits October 27, 2026 06:23
dotnet build reads -r as --runtime, so on Linux the following -m became the
RuntimeIdentifier (NETSDK1083). It also restores implicitly, scoped to -f,
while an explicit -restore restores the whole graph with the head's TFM.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
3.0.3 is built against Uno.WinUI 5, so EventTriggerBehavior wasn't a WinUI 3
DependencyObject on Uno 7 (CS1503). 4.0.0-dev.10 targets Uno.WinUI 7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
…ects

It's part of the shared framework from .NET 10, so the explicit reference fails with
NU1510 under warnings-as-errors on the Uno 7 (net10.0) sample builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
The Uno.Sdk heads referenced the published 8.2.250402 Toolkit packages, which are built
against Uno 5 and fail to compile on Uno 7 (CS0012). They now use the same logic as the
other heads: the local component projects when the repository provides them, packages otherwise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
…I jobs

The published Converters, SettingsControls, Extensions and Triggers packages are built
against Uno 5 and fail to compile in the Uno 7 heads (CS0012). Until Uno 7 builds are
published, the uno-linux and new-experiment (Uno.Sdk head) jobs check those components
out of CommunityToolkit/Windows at a pinned commit that ports them to Uno 7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
win:Background is read as an attached property by the UWP and WinAppSDK XAML
compilers (WMC0011), and the Uno TextBlock fallback has no Background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Uno 7 sets SupportedOSPlatformVersion to 24, which conflicts with the hardcoded
minSdkVersion 21 in the manifest (XA1036).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The Uno.Sdk head runs on Uno 7 (Uno.WinUI). In WinUI 2 solutions it pulled the
Uno 5 Uno.UI components in next to it (UNOB0001) and built them for net10.0-ios
against net9.0-ios restore graphs (NETSDK1005).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
…aths

project-template builds the Uno.Sdk head too, so it hits the same CS0012 as the
gallery jobs with the Uno 5 Toolkit packages. Long paths are needed for the
wwwroot/package_<hash>/ files Uno's wasm runtime deploys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Copilot AI balanced review requested due to automatic review settings November 3, 2026 15:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved dependency and target-framework incompatibilities break supported builds, while unchecked native build failures can cause CI to report success.

7 open issues
What changed in this PR

Migrates the Toolkit’s sample apps and gallery to Uno.Sdk and Uno Platform 7, adding unified .NET 10 heads while retaining separate WinUI 2 dependency paths.

Changes:

  • Adds unified Uno heads with desktop, WebAssembly, Android and iOS startup code and assets.
  • Updates platform mappings, solution generation, build scripts and CI for the new heads.
  • Adapts shared documentation and source-code rendering for Uno 7.
File Description
ToolkitComponent.SampleProject.props Omits the explicit immutable-collections package on .NET 10.
ProjectTemplate/​src/​MultiTarget.props Updates the template’s desktop targets.
ProjectHeads/​Tasks/​CheckMultiTarget.props Supports matching multiple head targets.
ProjectHeads/​Targets/​AddMultiTargetCompatibleSampleDocs.targets Filters documentation for requested desktop platforms.
ProjectHeads/​SingleComponent/​Wasm/​Program.cs Adds Uno host-builder startup for WinUI 3.
ProjectHeads/​SingleComponent/​Uno/​ProjectTemplate.Uno.csproj Adds the unified single-component Uno head.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​WebAssembly/​WasmScripts/​AppManifest.js Defines the browser app display name.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​WebAssembly/​Program.cs Adds WebAssembly startup.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​WebAssembly/​manifest.webmanifest Adds web app metadata.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​WebAssembly/​LinkerConfig.xml Preserves the sample app assembly.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​iOS/​PrivacyInfo.xcprivacy Declares iOS privacy API usage.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​iOS/​Media.xcassets/​LaunchImages.launchimage/​Contents.json Adds launch-image catalog metadata.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​iOS/​Main.iOS.cs Adds UIKit host startup.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​iOS/​Info.plist Defines iOS app configuration.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​iOS/​Entitlements.plist Adds an empty entitlements manifest.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Desktop/​Program.cs Registers supported desktop backends.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​Resources/​values/​Styles.xml Defines Android app and splash themes.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​Resources/​values/​Strings.xml Defines the Android app name.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​MainActivity.Android.cs Adds the Android launcher activity.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​Main.Android.cs Initializes the Android application.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​environment.conf Configures Mono garbage collection.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​Assets/​AboutAssets.txt Documents Android asset inclusion.
ProjectHeads/​SingleComponent/​Uno/​Platforms/​Android/​AndroidManifest.xml Defines Android manifest settings.
ProjectHeads/​SingleComponent/​Uno/​Assets/​Splash/​splash_screen.svg Adds splash artwork.
ProjectHeads/​SingleComponent/​Uno/​Assets/​SharedAssets.md Documents shared asset conventions.
ProjectHeads/​SingleComponent/​Uno/​Assets/​Icons/​icon.svg Adds the icon background.
ProjectHeads/​SingleComponent/​Uno/​Assets/​Icons/​icon_foreground.svg Adds the icon foreground.
ProjectHeads/​GenerateSingleSampleHeads.ps1 Accepts the revised desktop targets.
ProjectHeads/​App.Head.Wasm.props Updates output-path and logging dependency settings.
ProjectHeads/​App.Head.Uno.WinUI.Dependencies.props Updates Uno dependencies and adds optional Markdown support.
ProjectHeads/​App.Head.Uno.UI.Dependencies.props Removes trailing blank lines only.
ProjectHeads/​App.Head.Uno.props Selects dependencies by WinUI version.
ProjectHeads/​App.Head.ToolkitDependencies.props Extracts shared Toolkit dependency selection.
ProjectHeads/​App.Head.props Imports the extracted Toolkit dependencies.
ProjectHeads/​App.Head.Android.props Disables Android ahead-of-time compilation.
ProjectHeads/​AllComponents/​Wasm/​Program.cs Adds Uno host-builder startup for WinUI 3.
ProjectHeads/​AllComponents/​Wasm/​CommunityToolkit.App.Wasm.csproj Loads the WinUI version before framework selection.
ProjectHeads/​AllComponents/​Uno/​Platforms/​WebAssembly/​WasmScripts/​AppManifest.js Defines the gallery’s browser display name.
ProjectHeads/​AllComponents/​Uno/​Platforms/​WebAssembly/​Program.cs Adds gallery WebAssembly startup.
ProjectHeads/​AllComponents/​Uno/​Platforms/​WebAssembly/​manifest.webmanifest Adds gallery web app metadata.
ProjectHeads/​AllComponents/​Uno/​Platforms/​WebAssembly/​LinkerConfig.xml Preserves the gallery assembly.
ProjectHeads/​AllComponents/​Uno/​Platforms/​iOS/​PrivacyInfo.xcprivacy Declares gallery iOS privacy API usage.
ProjectHeads/​AllComponents/​Uno/​Platforms/​iOS/​Media.xcassets/​LaunchImages.launchimage/​Contents.json Adds launch-image catalog metadata.
ProjectHeads/​AllComponents/​Uno/​Platforms/​iOS/​Main.iOS.cs Adds gallery UIKit startup.
ProjectHeads/​AllComponents/​Uno/​Platforms/​iOS/​Info.plist Defines gallery iOS configuration.
ProjectHeads/​AllComponents/​Uno/​Platforms/​iOS/​Entitlements.plist Adds an empty entitlements manifest.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Desktop/​Program.cs Registers gallery desktop backends.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​Resources/​values/​Styles.xml Defines gallery Android themes.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​Resources/​values/​Strings.xml Defines the gallery’s Android name.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​MainActivity.Android.cs Adds the gallery launcher activity.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​Main.Android.cs Initializes the gallery’s Android application.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​environment.conf Configures Mono garbage collection.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​Assets/​AboutAssets.txt Documents Android asset inclusion.
ProjectHeads/​AllComponents/​Uno/​Platforms/​Android/​AndroidManifest.xml Defines gallery Android manifest settings.
ProjectHeads/​AllComponents/​Uno/​CommunityToolkit.App.Uno.csproj Adds the unified Uno gallery head.
ProjectHeads/​AllComponents/​Uno/​Assets/​Splash/​splash_screen.svg Adds gallery splash artwork.
ProjectHeads/​AllComponents/​Uno/​Assets/​SharedAssets.md Documents shared asset conventions.
ProjectHeads/​AllComponents/​Uno/​Assets/​Icons/​icon.svg Adds the gallery icon background.
ProjectHeads/​AllComponents/​Uno/​Assets/​Icons/​icon_foreground.svg Adds the gallery icon foreground.
MultiTarget/​UseUnoWinUI.ps1 Removes broad Uno package-name substitutions.
MultiTarget/​UseTargetFrameworks.ps1 Accepts win32 and renamed linux targets.
MultiTarget/​Test-Component-Support.ps1 Updates platform support by WinUI version.
MultiTarget/​ReadMe.md Documents framework and platform mappings.
MultiTarget/​PackageReferences/​Uno.props Separates Uno 5 and Uno 7 dependencies.
MultiTarget/​MultiTargetIdentifiers.props Adds Win32 and revised Linux identification.
MultiTarget/​MultiTargetAwareSharedProjectImport.props.template Renames the Linux platform condition.
MultiTarget/​MultiTargetAwareProjectReference.props.template Adds Win32 and revised Linux reference conditions.
MultiTarget/​Library.props Reorders version imports and corrects .NET framework inference.
MultiTarget/​GenerateMultiTargetAwareProjectReferenceProps.ps1 Generates references for updated platform identifiers.
MultiTarget/​GenerateAllProjectReferences.ps1 Updates supported reference-generation targets.
MultiTarget/​Filter-Supported-Components.ps1 Updates component-filter target names.
MultiTarget/​EnabledTargetFrameworks.props Selects shared desktop and version-specific macOS frameworks.
MultiTarget/​DefinedConstants.props Adds desktop and .NET 10 compilation constants.
MultiTarget/​Defaults.props Updates default platform targets.
MultiTarget/​AvailableTargetFrameworks.props Selects Uno framework versions by WinUI version.
global.json Pins Uno.Sdk.
GenerateVSCodeLaunchConfig.ps1 Adds Uno launch configurations.
GenerateSingleSolution.ps1 Selects the unified head for component solutions.
GenerateAllSolution.ps1 Selects the unified gallery head and updates defaults.
CommunityToolkit.App.Shared/​Renderers/​ToolkitSampleRenderer.xaml.cs Adds rich-text source rendering on Uno 7.
CommunityToolkit.App.Shared/​Renderers/​ToolkitSampleRenderer.xaml Adds hosts for platform-specific code renderers.
CommunityToolkit.App.Shared/​Renderers/​ToolkitDocumentationRenderer.xaml.cs Handles links from the optional Markdown control.
CommunityToolkit.App.Shared/​Renderers/​ToolkitDocumentationRenderer.xaml Removes the shared background assignment.
CommunityToolkit.App.Shared/​Renderers/​Markdown/​MarkdownTextBlock.cs Adds optional Labs Markdown support and Uno fallbacks.
CommunityToolkit.App.Shared/​Polyfills/​ColorCode/​RichTextBlockFormatter.cs Adds an Uno-compatible syntax-highlighting formatter.
CommunityToolkit.App.Shared/​CommunityToolkit.App.Shared.projitems Includes the new formatter.
Build-Toolkit-Gallery.ps1 Builds Uno frameworks individually and supports Unix builds.
Build-Toolkit-Components.ps1 Accepts updated component platform targets.
.github/​workflows/​config/​Directory.Build.props Locates local Toolkit dependency projects for CI.
.github/​workflows/​build.yml Adds Uno workloads, source dependencies and revised build jobs.

Review effort: Balanced

Comment thread Build-Toolkit-Gallery.ps1 Resolved
Comment thread GenerateSingleSolution.ps1 Resolved
Comment thread GenerateVSCodeLaunchConfig.ps1 Resolved
MartinZikmund and others added 6 commits November 3, 2026 17:03
Setting LongPathsEnabled mid-job doesn't take effect on the hosted runners, so the
wasm builds still hit MAX_PATH (MSB3021) by a character or two. Building from a
drive letter mapped to the workspace keeps the paths well under it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The wasdk/uwp test packages are registered by the AppX deployment service, which
can't resolve a per-user subst drive (DEP0700, AppxManifest.xml not found).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Uno 7 moved NativeApplication and ApplicationActivity to Uno.UI.Runtime.Android
(CS0234), and NativeApplication now builds the app through CreateHost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On WinUI 3 macos maps to the shared net10.0 build, but only wasm/wpf/win32/linux
marked that build as Uno. A component targeting macos without those got a bare
net10.0 build with no WinUI references or constants (CS0246 on Windows.UI.Xaml).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On WinUI 2 macos is Mac Catalyst, but it also enabled the shared net9.0 build,
which a component targeting macos without wasm/wpf/linux got as a bare net9.0
library with no Uno or WinUI references (CS0246 on Windows.UI.Xaml).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Picks up unoplatform/uno#25841, which drops [DynamicallyAccessedMembers] from
DependencyProperty.Register.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
MartinZikmund and others added 5 commits November 11, 2026 09:21
Building the Uno.Sdk head one TFM at a time let a later successful build overwrite $LASTEXITCODE, so CI passed with a failed desktop build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
Mirrors GenerateAllSolution.ps1: WinUI 2 with wasm plus an Uno.Sdk MultiTarget dropped the classic Wasm head for the Uno 7 head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
dotnet run can't pick a framework of a multi-targeted project on its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
They skip App.Head.props' AddAssemblyAttributes, so the docs renderer hid its Source code / Package info panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants