From 3a38f70523362e0c604ea4120531473438ed68e2 Mon Sep 17 00:00:00 2001 From: ahall Date: Fri, 10 Jul 2026 13:48:38 +0100 Subject: [PATCH] fix: resolve TodoApp.Uno Skia build failures and bump Uno Platform 5 -> 6 Removes the dead EventTriggerBehavior/InvokeCommandAction Interaction.Behaviors block in Views/TodoListPage.xaml that caused UXAML0001 (Microsoft.Xaml.Interactions.Core could not be found) on every Skia-based head (android, ios, maccatalyst, browserwasm, desktop). The Uno port of XAML Behaviors (unoplatform/Uno.XamlBehaviors) only ships Microsoft.Xaml.Interactivity, never a Microsoft.Xaml.Interactions.Core equivalent, in any version - confirmed via NuGet, so pinning a different package version could never fix this. The behavior was already dead code per its own comment ("the event is not triggered. Handling in code behind for now") - TodoListPage.xaml.cs's DataContextChangedHandler already invokes ViewModel.LoadPageCommand directly. (#525) Also bumps Uno.Sdk from 5.6.54 to 6.5.36 (-> Uno.WinUI 6.5.237) (#524), which: - Resolves the outstanding NU1903 Tmds.DBus 0.16.0 advisory on the desktop head for free (Uno.WinUI.Runtime.Skia.X11 switches to patched Tmds.DBus.Protocol starting at 6.0.465). - Lifts the Uno.Wasm.Bootstrap net9.0+ TargetFramework guard that was blocking the browserwasm head once the EventTriggerBehavior fix above let restore/build get far enough to hit it (Uno.Sdk 6.x resolves Uno.Wasm.Bootstrap 10.0.96 instead of the 5.x line's 8.0.23). Required manual migration per https://platform.uno/docs/articles/migrating-to-uno-6.html: - Platforms/Desktop/Program.cs: Uno.UI.Runtime.Skia -> Uno.UI.Hosting, SkiaHostBuilder -> UnoPlatformHostBuilder, UseWindows() -> UseWin32(). - Platforms/Android/Main.Android.cs: removed the UniversalImageLoader configuration, which Uno 6 now handles internally via Skia rendering. Re-enables the todoapp-uno CI job in build-samples.yml (all 5 heads: android, ios-maccatalyst, windows, browserwasm, desktop), removing the stale disabled-pending-fix comments in both workflow files. Verified locally: - desktop: restore + build clean (no workload required). - browserwasm: restore + build clean, after installing the wasm-tools workload into a separate user-writable .NET SDK (system-wide /usr/local/share/dotnet is root-owned in this environment). - Root Datasync.Toolkit.sln (main library, unaffected by this change) still restores and builds clean. Not verified locally (relying on CI, same limitation the issue reporter noted): - android: workload installs, but the Android SDK (platform-tools/build-tools) isn't provisioned in this environment, so the build fails before reaching any application code. - ios / maccatalyst: require a full Xcode install (only Command Line Tools are available here). - windows: requires a Windows runner. --- .../workflows/build-samples-todoapp-uno.yml | 30 ------------------- .github/workflows/build-samples.yml | 17 ++--------- .../Platforms/Android/Main.Android.cs | 18 ++--------- .../TodoApp.Uno/Platforms/Desktop/Program.cs | 6 ++-- .../TodoApp.Uno/Views/TodoListPage.xaml | 8 ----- samples/todoapp/TodoApp.Uno/global.json | 20 ++++++++----- 6 files changed, 21 insertions(+), 78 deletions(-) diff --git a/.github/workflows/build-samples-todoapp-uno.yml b/.github/workflows/build-samples-todoapp-uno.yml index 54ea20dd..e8b1f1e9 100644 --- a/.github/workflows/build-samples-todoapp-uno.yml +++ b/.github/workflows/build-samples-todoapp-uno.yml @@ -1,14 +1,5 @@ name: Build Sample - TodoApp Uno -# NOTE: This workflow is NOT currently wired into build-samples.yml. #506 fixed the NU1605 -# restore blocker that used to affect every head (see samples/todoapp/TodoApp.Uno/global.json), -# so restore now succeeds everywhere. However, build now fails on every Skia-based head (android, -# ios, maccatalyst, browserwasm, desktop) with UXAML0001/CS1061 (EventTriggerBehavior could not -# be found) - see the `desktop` job below for details and -# https://github.com/CommunityToolkit/Datasync/issues/506 for background. Re-add the -# `todoapp-uno` job to build-samples.yml (and to all-samples-built's `needs`) once that build -# failure is resolved and every head restores AND builds cleanly. - on: workflow_call: @@ -145,27 +136,6 @@ jobs: --no-restore desktop: - # NOTE: this head (along with every other Skia-based head in this file - android, - # ios-maccatalyst, browserwasm) currently fails to BUILD (not restore) with: - # error UXAML0001: The type {using:Microsoft.Xaml.Interactions.Core}EventTriggerBehavior - # could not be found - # CommunityToolkit.WinUI.Behaviors 8.2.250402 resolves - # Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI 3.0.0-dev.17.g7c09b9114d on Skia heads - # (confirmed via project.assets.json for desktop and browserwasm), which appears to lack the - # Microsoft.Xaml.Interactions.Core types used in Views/TodoListPage.xaml. The `windows` job - # below is unaffected - it resolves the real Microsoft.Xaml.Behaviors.WinUI.Managed 3.0.0 - # package instead. This is a separate, pre-existing bug from the NU1903 Tmds.DBus finding - # below and from the NU1605 restore blocker #506 originally hit (now fixed - see - # samples/todoapp/TodoApp.Uno/global.json) - it was never surfaced before because restore - # always failed first. Tracked as a #506 follow-up issue. - # - # Restore also emits a NU1903 warning for 'Tmds.DBus' 0.16.0 (GHSA-xrw6-gwf8-vvr9 / - # CVE-2026-39959), floated transitively via Uno.WinUI.Runtime.Skia.X11. This is harmless as a - # CI matter today (this repo does not configure NuGet audit to fail on warnings) but is not - # yet resolved - Uno only switches Uno.WinUI.Runtime.Skia.X11 to the patched - # Tmds.DBus.Protocol starting at Uno.WinUI 6.0.465, which requires a major-version bump of - # Uno.Sdk. See https://github.com/CommunityToolkit/Datasync/issues/506 for background and the - # tracked major-version-bump follow-up issue. runs-on: ubuntu-latest steps: - name: Checkout Repository diff --git a/.github/workflows/build-samples.yml b/.github/workflows/build-samples.yml index 3b19ca8c..1fb39ae0 100644 --- a/.github/workflows/build-samples.yml +++ b/.github/workflows/build-samples.yml @@ -37,20 +37,8 @@ jobs: todoapp-maui: uses: ./.github/workflows/build-samples-todoapp-maui.yml - # NOTE: todoapp-uno (build-samples-todoapp-uno.yml) is intentionally NOT wired in here yet. - # #506 fixed the NU1605 restore blocker that used to affect every head (bumped Uno.Sdk in - # samples/todoapp/TodoApp.Uno/global.json from 5.4.5 to 5.6.54), so TodoApp.Uno.csproj now - # restores cleanly. However, restoring cleanly surfaced a separate, pre-existing bug: on every - # Skia-based head (android, ios, maccatalyst, browserwasm, desktop - confirmed for desktop and - # browserwasm; android/ios/maccatalyst require workloads not available where this was - # verified), CommunityToolkit.WinUI.Behaviors 8.2.250402 resolves - # Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI 3.0.0-dev.17.g7c09b9114d instead of the real - # Microsoft.Xaml.Behaviors.WinUI.Managed package (which the windows head still gets), and that - # substitute is missing the Microsoft.Xaml.Interactions.Core types used in - # Views/TodoListPage.xaml, so build fails with UXAML0001/CS1061 (EventTriggerBehavior could not - # be found). This was never surfaced before because restore always failed first. See the - # tracking issue for this build failure (filed as a #506 follow-up) - re-add this job once - # that's resolved and every head restores AND builds cleanly. + todoapp-uno: + uses: ./.github/workflows/build-samples-todoapp-uno.yml # Single aggregation point so branch protection only needs to require one check, # regardless of how many sample workflows are added over time. @@ -66,6 +54,7 @@ jobs: - todoapp-avalonia - todoapp-windows - todoapp-maui + - todoapp-uno runs-on: ubuntu-latest steps: - name: Check sample build results diff --git a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Android/Main.Android.cs b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Android/Main.Android.cs index 8fc5119a..fe602390 100644 --- a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Android/Main.Android.cs +++ b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Android/Main.Android.cs @@ -8,8 +8,6 @@ using Android.Runtime; using Android.Views; using Android.Widget; -using Com.Nostra13.Universalimageloader.Core; -using Microsoft.UI.Xaml.Media; namespace TodoApp.Uno.Droid; [global::Android.App.ApplicationAttribute( @@ -25,19 +23,9 @@ public class Application : Microsoft.UI.Xaml.NativeApplication public Application(IntPtr javaReference, JniHandleOwnership transfer) : base(() => new App(), javaReference, transfer) { - ConfigureUniversalImageLoader(); - } - - private static void ConfigureUniversalImageLoader() - { - // Create global configuration and initialize ImageLoader with this config - ImageLoaderConfiguration config = new ImageLoaderConfiguration - .Builder(Context) - .Build(); - - ImageLoader.Instance.Init(config); - - ImageSource.DefaultImageLoader = ImageLoader.Instance.LoadImageAsync; + // Uno Platform 6.0 handles image loading entirely with the Skia Rendering mode, so the + // UniversalImageLoader configuration previously required here has been removed. + // See https://platform.uno/docs/articles/migrating-to-uno-6.html. } } diff --git a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Desktop/Program.cs b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Desktop/Program.cs index 648eb542..5d435dbb 100644 --- a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Desktop/Program.cs +++ b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Platforms/Desktop/Program.cs @@ -1,4 +1,4 @@ -using Uno.UI.Runtime.Skia; +using Uno.UI.Hosting; namespace TodoApp.Uno; public class Program @@ -6,12 +6,12 @@ public class Program [STAThread] public static void Main(string[] args) { - var host = SkiaHostBuilder.Create() + var host = UnoPlatformHostBuilder.Create() .App(() => new App()) .UseX11() .UseLinuxFrameBuffer() .UseMacOS() - .UseWindows() + .UseWin32() .Build(); host.Run(); diff --git a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Views/TodoListPage.xaml b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Views/TodoListPage.xaml index 807f4e94..6ca8c580 100644 --- a/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Views/TodoListPage.xaml +++ b/samples/todoapp/TodoApp.Uno/TodoApp.Uno/Views/TodoListPage.xaml @@ -9,7 +9,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewmodels="using:TodoApp.Uno.ViewModels" xmlns:controls="using:Microsoft.UI.Xaml.Controls" - xmlns:interactions="using:Microsoft.Xaml.Interactions.Core" xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:uen="using:Uno.Extensions.Navigation.UI" xmlns:utu="using:Uno.Toolkit.UI" @@ -17,13 +16,6 @@ Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" mc:Ignorable="d"> - - - - - - - diff --git a/samples/todoapp/TodoApp.Uno/global.json b/samples/todoapp/TodoApp.Uno/global.json index 7cef2161..a4fc6b1c 100644 --- a/samples/todoapp/TodoApp.Uno/global.json +++ b/samples/todoapp/TodoApp.Uno/global.json @@ -1,14 +1,18 @@ { // To update the version of Uno please update the version of the Uno.Sdk here. See https://aka.platform.uno/upgrade-uno-packages for more information. - // Bumped from 5.4.5 (-> Uno.WinUI 5.4.22) to 5.6.54 (-> Uno.WinUI 5.6.99) to resolve NU1605: - // CommunityToolkit.WinUI.Behaviors 8.2.250402 floors Uno.WinUI at >= 5.5.87, which is higher - // than what Uno.Sdk 5.4.5 resolves, causing a package-downgrade restore error on every head. - // This does NOT resolve the separate NU1903 (Tmds.DBus 0.16.0) advisory on the desktop head - - // Uno.WinUI.Runtime.Skia.X11 keeps floating vulnerable Tmds.DBus 0.16.0 through the entire - // 5.x line and only switches to the patched Tmds.DBus.Protocol starting at Uno.WinUI 6.0.465. - // See https://github.com/CommunityToolkit/Datasync/issues/506. + // Bumped from 5.6.54 (-> Uno.WinUI 5.6.99) to 6.5.36 (-> Uno.WinUI 6.5.237). See #524: + // this major-version bump resolves the NU1903 (Tmds.DBus 0.16.0, GHSA-xrw6-gwf8-vvr9) advisory + // on the desktop head for free - Uno.WinUI.Runtime.Skia.X11 switches to the patched + // Tmds.DBus.Protocol dependency starting at Uno.WinUI 6.0.465, and 6.5.237 resolves well above + // that floor. It also lifts the Uno.Wasm.Bootstrap net9.0+ TargetFramework guard blocking the + // browserwasm head (Uno.Sdk 6.x implicitly resolves Uno.Wasm.Bootstrap 10.0.96 instead of the + // 5.x line's 8.0.23). See https://platform.uno/docs/articles/migrating-to-uno-6.html for the + // accompanying manual code changes required across heads (Platforms/Desktop/Program.cs, + // Platforms/Android/Main.Android.cs). + // See https://github.com/CommunityToolkit/Datasync/issues/506 and + // https://github.com/CommunityToolkit/Datasync/issues/524. "msbuild-sdks": { - "Uno.Sdk": "5.6.54" + "Uno.Sdk": "6.5.36" }, "sdk":{ "allowPrerelease": false