Visitar URL original
Native drop by MartinZikmund · Pull Request #23470 · unoplatform/uno · GitHub
Skip to content

Native drop - #23470

Merged
MartinZikmund merged 36 commits into
feature/breakingchangesfrom
dev/mazi/dropnativetest
Jun 24, 2026
Merged

MartinZikmund merged 36 commits into
feature/breakingchangesfrom
dev/mazi/dropnativetest

Conversation

@MartinZikmund

@MartinZikmund MartinZikmund commented Jun 16, 2026 •

Copy link
Copy Markdown
Member

GitHub Issue: Part of epic unoplatform/uno-private#2049 — 🦋 Drop native targets. Closes sub-issues unoplatform/uno-private#2095, unoplatform/uno-private#2096, unoplatform/uno-private#2097 and unoplatform/uno-private#2104 (full breakdown under Issue coverage).

PR Type:

🔄 Refactoring · 🏗️ Build · 💬 Breaking change (feat!/refactor!)

What changed? 🚀

This PR is the source/project deletion + dead-#if-cleanup + sync-generator half of the native-targets drop (epic unoplatform/uno-private#2049). With the build/CI/packaging/SDK work already on the feature/breakingchanges base (see Already landed in base), this PR physically removes the now-dead native UI code and the orphaned native/DOM project heads so Skia is the only UI renderer in Uno.UI and above.

Scope: Uno.UI, Uno.UI.Composition, the mixin source generators, the WinAppSDK sync generator, and the native/DOM project files + solutions. It does not touch the actively-maintained platform APIs in Uno.UWP/Uno.Foundation/Uno.UI.Dispatching (still consumed by Skia-on-mobile and Skia-on-browser).

Removed 🗑️

  • Native UI rendering layers — 559 per-suffix native UI source files in Uno.UI/Uno.UI.Composition (208 *.Android.cs, 131 *.UIKit.cs, 68 *.Apple.cs, 17 *.iOS.cs, 116 *.wasm.cs), native composition backing, native mixin generators, and orphaned fully-native files.
  • Native project heads (netcoremobile) — 14 dead *.netcoremobile.csproj heads: Uno.UI, Composition, Toolkit, XamlHost, FluentTheme(.v1/.v2), RemoteControl, RuntimeTests, Lottie, Svg, Maps, Graphics2DSK, plus the native SamplesApp.netcoremobile.
  • DOM-WASM project heads — Uno.UI.Wasm + the Composition/Toolkit/XamlHost/FluentTheme(.v1/.v2)/RemoteControl .Wasm heads; the DOM add-in heads Lottie.Wasm/MSAL.Wasm; the DOM test heads (Uno.UI.Wasm.Tests, RuntimeTests.Wasm); and the DOM samples app (SamplesApp.Wasm).
  • Uno.UI.MediaPlayer.WebAssembly — the old <video> DOM media engine; the browser media player is now BrowserMediaPlayerExtension in Uno.UI.Runtime.Skia.WebAssembly.Browser.
  • Two native-only solution filters — Uno.UI-Wasm-only.slnf, Uno.UI-netcoremobile-only.slnf.

Changed ✏️

  • Stripped dead native #if blocks across ~270 shared Uno.UI files in 8 validated batches (Skia-only logic retained; !__SKIA__/Reference/Tests branches preserved).
  • WinAppSDK sync generator — now sources native/WASM symbols from the kept platform heads (Uno.UWP + Uno.UI.Dispatching, which are siblings on Uno.Foundation) instead of the deleted Uno.UI native heads, via a multi-compilation lookup. Uno.UI.Dispatching is correctly treated as a per-platform-shipping library (its generated stubs keep native defines), fixing a regression that had stripped them.
  • Solutions/build pruned — Directory.Build.props _AdjustedOutputProjects, Uno.UI.slnx, Uno.UI/Uno.UI.sln, Uno.UI-Skia-only.slnf, Uno.UI-RemoteControl-Only.slnf (also dropped a stale Lottie.Tests.csproj ref so the Skia solution loads clean).

Kept (deliberately) ✅

  • Platform/service heads the Skia hosts consume: Uno.UWP, Uno.Foundation, Uno.UI.Dispatching (netcoremobile + Wasm), MSAL, Foldable, GooglePlay, BindingHelper.Android, Foundation.Runtime.WebAssembly, and the SamplesApp.Skia.netcoremobile / SamplesApp.Skia.WebAssembly.Browser heads.
  • The 5 platform-API files the Skia browser runtime linked from Uno.UI.Runtime.WebAssembly are now relocated into it; the old DOM runtime dir is gone.

Added ➕

  • Uno 7.0 native-rendering migration guide (doc/articles/migrating-to-uno-7.md, native-views.md) and the specs/043-drop-native-rendering/ plan.

Issue coverage 🎯

Closed by this PR

Sub-issue Title Notes
unoplatform/uno-private#2095 Delete native-UI source files from Uno.UI and higher Full C# native UI layer removed (Android/UIKit/Apple/iOS + WASM-DOM C#). Tail: WASM .ts DOM removal (W4-ts).
unoplatform/uno-private#2096 Strip dead native #if blocks ~270 shared files, 8 validated batches.
unoplatform/uno-private#2097 Delete native project files and prune solutions/.slnf 14 netcoremobile + the DOM-WASM heads deleted; Directory.Build.props, .slnx, .sln and .slnf filters pruned; all solutions load clean. Uno.UI.Runtime.WebAssembly removed entirely (5 shared platform-API files relocated into the Skia browser runtime).
unoplatform/uno-private#2104 Update the WinAppSDK sync generator for the native drop Generator no longer loads the deleted Uno.UI native/WASM heads; sources native symbols from the kept Uno.UWP/Uno.UI.Dispatching heads; Dispatching native defines restored.

Already landed in base (feature/breakingchanges)

Completed by earlier PRs merged into this PR's base (so absent from this diff) — linked for the full epic picture:

Sub-issue Title Where
unoplatform/uno-private#2058 Stop producing native UI NuGet packages #23484
unoplatform/uno-private#2059 Stop building native targets for Uno.UI and higher #23484
unoplatform/uno-private#2060 Remove native-only CI steps #23484
unoplatform/uno-private#2061 Remove native targeting from Uno.Sdk #23482
unoplatform/uno-private#2062 Make SkiaRenderer no-op #23484/#23482

Breaking changes ❗

Yes — deliberate for Uno Platform 7.0. Native UI renderers (Android Views, iOS/UIKit, WASM-DOM) are removed; Skia is the only UI renderer. Migration: doc/articles/migrating-to-uno-7.md.

Validation 🧪

Remaining native-drop work (out of scope here)

Tracked in specs/043-drop-native-rendering/progress.md: WASM .ts DOM removal (W4-ts), media engine relocation (W9), safe-area/keyboard (W10), FeatureConfiguration native flags (W8), and the sync-generator full regeneration once everything lands.

PR Checklist ✅

  • 📚 Docs added/updated (Uno 7.0 migration guide + native-views article)
  • 🧪 Runtime/UI tests — N/A (deletion/cleanup; covered by existing Skia suites + host/CI builds)
  • 🖼️ Validated PR Screenshots Compare Test Run results.
  • ❗ Contains NO breaking changes — this PR intentionally contains breaking changes (7.0 native drop)
  • 👀 Reviewed 2 other open pull requests

MartinZikmund and others added 24 commits June 15, 2026 17:15
Drop the native (Android/iOS-UIKit/WASM-DOM) Composition.Visual backing
that bridged the Skia compositor to native view trees, leaving the Skia
scene graph as the only backing:

- Delete Visual/VisualCollection .Android/.UIKit/.wasm.cs, ContainerVisual/
  SpriteVisual .UIKit.cs, ScalarKeyFrameAnimation.UIKit.cs, CoreAnimation.Apple.cs,
  CompositorThread.Android.cs, ICompositionRoot.Android.cs.
- Remove the CompositionConfiguration.Options.UseCompositorThread flag and
  getter (Android RenderNode compositor thread).

Part of spec 043 (drop native rendering, Uno 7.0). Validated: Skia +
Reference + Tests compile clean. ApplicationActivity.Android.cs still
references the removed types; untangled in W2 (unmaintained netcoremobile).

BREAKING CHANGE: Uno.CompositionConfiguration.Options.UseCompositorThread
is removed; native composition backing types are removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete the native Apple (iOS/tvOS/macCatalyst, UIKit) UI-rendering backend
from Uno.UI: BindableUIView, UIElement/.FrameworkElement.UIKit/.Apple, the
native ListViewBase/UICollectionView set, native Picker/DatePicker/TimePicker,
CoreAnimation animators, native window/host/frame, CoreGraphics/UIKit helper
extensions, and the native MediaPlayerPresenter.Apple. 210 files.

Kept (host-linked platform services consumed by Uno.UI.Runtime.Skia.AppleUIKit):
native WebView (WKWebView) bridge, TextBox IME input helpers, NativeWindowHelpers.

Part of spec 043 (drop native rendering, Uno 7.0). Validated: Skia +
Reference + Tests + Skia.AppleUIKit/Android hosts compile clean.

BREAKING CHANGE: native Apple UIView-per-element rendering, native Apple
control wrappers, and native Apple base classes are removed; Apple targets
render via Skia only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete the native Android (Android.Views.View-based) UI-rendering backend
from Uno.UI: BindableView and the Bindable* widget wrappers, UIElement/
FrameworkElement/Layouter .Android, native pointer/MotionEvent input, native
brushes/border/shadow renderers, NativeListViewBase/RecyclerView, native
Frame/Popup/CommandBar/Pivot, native TextBlock/TextBox/IME, native focus/
visual-tree/automation, Application/ApplicationActivity.Android, and the
CoreGraphics/Android helper extensions. 204 files.

Kept (host-linked platform services consumed by Uno.UI.Runtime.Skia.Android):
Activity/Application lifecycle infra, native WebView, native Date/Time picker
flyouts, IME input-type helper, NativeWindowWrapper. Also kept (spec-explicit,
shared with Skia-on-Android): ViewHelper.Android.cs, InsetsExtensions.Android.cs.

Part of spec 043 (drop native rendering, Uno 7.0). Validated: Skia +
Reference + Tests + Skia.Android/AppleUIKit hosts compile clean. The Java/JNI
BindingHelper.Android project (17 .java) is removed with the project in W1.

BREAKING CHANGE: native Android View-per-element rendering, native Android
control wrappers, and native Android base classes (BindableView et al.) are
removed; Android targets render via Skia only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete the native WASM DOM UI-rendering backend C# from Uno.UI: per-element
DOM control .wasm.cs (Control/Border/Image/TextBlock/TextBox/ScrollViewer/
shapes/brushes/ContentPresenter/...), Application(.Interop).wasm, native
DOM input (BrowserPointerInputSource.wasm), NativeRenderTransformAdapter.wasm,
BrowserHtmlElement.wasm native element hosting, and the native WASM WebView
CoreWebView2/HtmlWebViewElement bridges. 114 files.

Kept (host-linked, consumed by Uno.UI.Runtime.Skia.WebAssembly.Browser):
NativeWebView(.Interop).wasm (HTML overlay WebView), TextBox IME input helpers.

Part of spec 043 (drop native rendering, Uno 7.0). Validated: Skia +
Reference + Tests + WebAssembly.Browser host lib compile clean. The TypeScript
DOM renderer (WindowManager.ts/WasmCSS) and the Uno.UI.Runtime.WebAssembly
package are removed separately (W4-ts / W1).

BREAKING CHANGE: native WASM per-element DOM rendering is removed; WASM
renders via Skia canvas only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete the source generators that synthesized IFrameworkElement onto
native-View-based controls, now unnecessary since controls inherit the
managed FrameworkElement:
- FrameworkElementAndroidMixinGenerator (~1000 lines)
- FrameworkElementUIKitMixinGenerator (~1300 lines)
- BaseActivityCallbacksGenerator (~300 lines)
- prune their cases from Given_MixinGenerators tests.

Their emitted output was always gated to #if UNO_MIXIN_GENERATION &&
__ANDROID__/__APPLE_UIKIT__, so Skia compilations are unaffected.

KEPT (deferred): DependencyPropertyMixinGenerator and MixinGeneration.targets
/UNO_MIXIN_GENERATION — they still emit cross-platform DPs consumed by Skia
(Control.HorizontalContentAlignment, Popup.IsOpen, ListViewBase.*, ...);
migrating those to [GeneratedDependencyProperty] is follow-up work.

Part of spec 043 (drop native rendering, Uno 7.0). Validated: SourceGenerators
.Internal + .Tests + Uno.UI.Skia compile clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add the consumer 7.0 migration guide (Skia-only rendering): packaging,
  removed public API, removed FeatureConfiguration flags, behavioral changes,
  templates, and a migration checklist (spec 043 section 8).
- Convert the dedicated native-rendering docs to "removed in 7.0" stubs that
  preserve their uids (uno.features.renderer.native, Uno.Development.NativeViews)
  so existing xrefs keep resolving, pointing to the migration guide.
- Add the migration guide to the TOC.

Part of spec 043 (W12). AGENTS.md / .claude/rules and the deeper architecture
docs (how-uno-works, performance, xf-migration) are intentionally deferred:
they describe the contributor-facing current tree, which is mid-migration
(native projects/TFMs and DependencyObject-as-interface still present).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Capture validated milestone (native rendering C# removed across all four
backends + native mixin generators, ~533 files) and a precise handoff for
the remaining workstreams (W1/W4-ts/W5/W8/W9/W10/W11 + deep docs), including
the dependency entanglements found and the validation gaps (browserwasm /
on-device runtime) that require a CI/device environment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
IShadowChildrenProvider/ChildrenShadow existed only to enumerate a native
view's children without JNI marshalling (the whole file was #if XAMARIN).
With native view trees gone, all children are UIElements enumerated via
GetChildren(); remove the interface and its two dead native branches
(FrameworkElement.GetFirstChild #elif XAMARIN, VisualTreeHelper.ClearChildren
#elif __APPLE_UIKIT__).

Part of spec 043 W5 (core shared-abstraction cleanup). Validated: Skia +
Reference compile clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The W6 (generator removal) and W5a (IShadowChildrenProvider removal) commits
staged only deletions and the progress tracker; the accompanying source edits
were left unstaged (the working tree built green, but HEAD did not capture
them). This commits them:
- Given_MixinGenerators.cs: drop the deleted native mixin generators' test cases.
- FrameworkElement.GetFirstChild / VisualTreeHelper.ClearChildren: drop the dead
  native (#elif XAMARIN / #elif __APPLE_UIKIT__) IShadowChildrenProvider branches.

Validated: Skia + Reference compile clean (working-tree state, now committed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete shared files whose entire body was native-only (#if __ANDROID__/
__APPLE_UIKIT__/__IOS__) and which referenced now-deleted native types:
native pull-to-refresh (NativeRefreshVisualizer, NativeRefreshInfoProviderAdapter,
RefreshContainer.native), NativeFramePresenterUIGestureRecognizerDelegate (its
NativeFramePresenter was removed in W3), and the native FlipView/ItemsPresenter
partials (ItemsPresenter referenced the removed NativeListViewBase).

Part of spec 043 W5. Validated: Uno.UI-Skia-only.slnf (Skia + Reference + Tests
+ Android/AppleUIKit/WebAssembly.Browser host libs) compiles clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove now-dead native preprocessor branches (#if __ANDROID__/__APPLE_UIKIT__/
__IOS__/__WASM__/XAMARIN) from 18 shared control files, keeping the Skia/
Reference/Tests branches: AppBar, AutoSuggestBox, Border, BorderLayerState,
CalendarView (+items/chrome/panel), Canvas, ComboBox, CommandBar,
ContentControl, FauxGradientBorderPresenter. ~373 dead lines removed; mixed
conditions simplified (e.g. drop native disjuncts, keep IS_UNIT_TESTS /
__NETSTD_REFERENCE__).

Part of spec 043 W5 (#if-forest cleanup, contributor simplification #12).
Validated: Uno.UI-Skia-only.slnf (Skia + Reference + Tests + Android/AppleUIKit/
WebAssembly.Browser host libs) compiles clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(W5 batch 2)

Remove now-dead native preprocessor branches (#if __ANDROID__/__APPLE_UIKIT__/
__IOS__/__WASM__/XAMARIN) from 43 shared files (DataBinding, Extensions, Media,
Automation, Application, Control, ContentControl/Presenter, Flyout, Grid,
DatePicker, etc.), keeping the Skia/Reference/Tests branches. Files whose entire
body was native-only are deleted (TextBoxBehavior, ButtonTitleBindingAdapter,
ListViewHelper, NativeDatePickerFlyoutPresenter, FlyoutPopupPanel.iOSAndroid).

Host-linked files (GlobalUsings, native pickers/WebView, NativeApplication) and
FeatureConfiguration were intentionally excluded (their native branches are live
in Skia host builds / need deliberate W8 handling).

Part of spec 043 W5. Validated: direct build of Uno.UI.Skia (full recompile,
0 errors) + Uno.UI.Reference (0 errors). Note: Uno.UI-Skia-only.slnf bails early
on the env's missing wasm-tools-net9 workload, so direct project builds are the
reliable gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…h 2)

These files' entire bodies were native-only (#if XAMARIN/__APPLE_UIKIT__/
__ANDROID__) and became empty after the batch-2 cleanup; remove them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The WinAppSDK sync generator emitted #if guards and [NotImplemented]
attribute arguments for all platforms (__ANDROID__/__IOS__/__TVOS__/__WASM__/
IS_UNIT_TESTS/__SKIA__/__NETSTD_REFERENCE__) in every Generated/ stub. After
7.0 only Uno.UWP and Uno.Foundation still ship per-platform binaries; Uno.UI,
Uno.UI.Composition and Uno.UI.Dispatching render through Skia on every target.

Thread an `emitNativeDefines` flag through PlatformSymbols (set from
ShouldEmitNativeDefines, which keys off the target Generated path): for
non-UWP/Foundation libraries the native defines (__ANDROID__/__IOS__/__TVOS__/
__WASM__) are dropped, leaving only IS_UNIT_TESTS/__SKIA__/__NETSTD_REFERENCE__
in the generated #if guards, [NotImplemented(...)] lists, HasUndefined and the
attribute-dedup #if. Uno.UWP/Uno.Foundation output is unchanged (native order
preserved).

Part of spec 043 (drop native rendering, Uno 7.0). Validated: the generator
compiles. NOTE: regenerating the Generated/ folders is deferred — the
generator's Build() currently loads the Uno.UI .netcoremobile/.Wasm
compilations (broken by the native-file removal) for transitive UWP/Foundation
symbols; W1 must rewire Build() to load Uno.UWP/Uno.Foundation native
compilations directly before a regeneration can run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

^ Conflicts:
^	src/Uno.WinAppSDKSyncGenerator/Generator.cs
^	src/Uno.WinAppSDKSyncGenerator/SyncGenerator.cs
…s (W5 batch 3)

Remove now-dead native preprocessor branches (#if __ANDROID__/__APPLE_UIKIT__/
__IOS__/__WASM__, incl. negated/mixed forms) from 45 shared layout & control
files: Layouter/VirtualizingPanelLayout/ItemsStackPanel/ItemsWrapGrid/
ManagedVirtualizingPanelLayout, ListViewBase, Panel, Selector/SelectorItem,
Image, Popup/PopupPanel, Pivot, MediaPlayerElement/Presenter, NavigationViewItem,
Page, ButtonBase, ProgressBar/ProgressRing, etc. Mixed conditions simplified
to their Skia/Reference disjuncts; negated-native (#if !__APPLE_UIKIT__) bodies
promoted unconditionally; #if !__SKIA__ (Reference) branches preserved.

Part of spec 043 W5. Validated: direct build of Uno.UI.Skia + Uno.UI.Reference
+ Uno.UI.Tests, all 0 errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…atch 4)

Remove/simplify now-dead native preprocessor branches across 43 shared files
(ScrollContentPresenter/ScrollViewer, PullToRefresh, RelativePanel, Repeater,
Slider, SplitView/SplitButton, StackPanel, TabView, TextBlock, TextBox.Uno,
TimePicker, ToggleSwitch, ToolTipService, Viewbox, WrapPanel, Binding/
TemplateBinding/DataTemplate, MediaPlayerPresenter.Others, etc.), including
negated-native (#if !__ANDROID__ && !__APPLE_UIKIT__ -> drop native conjuncts,
keep preserved guards). Files emptied of all content removed
(ScrollContentPresenter.Native, NativeTimePickerFlyoutPresenter). Agents left
genuinely-ambiguous cases (Control.cs, PivotItem.cs, InputPane.others.cs)
untouched — harmless dead blocks.

Part of spec 043 W5. Validated: direct build of Uno.UI.Skia + Reference + Tests
(0 errors) AND the Skia.Android host (net9.0-android, 0 errors) — the latter
also retroactively confirms the W2/W3/W4 native-deletion keep-list and the W5
host-linked exclusions are correct at compile time.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…batch 5)

Remove dead positive native preprocessor branches and unwrap always-true
negated-native guards (e.g. #if !__WASM__ with no #else) across core XAML files:
DependencyProperty/DependencyPropertyChangedEventArgs/Descriptor, Documents
(TextElement/Inline/Run/Span/Hyperlink/InlineCollection/Underline), Framework
Template(Pool), ElementCompositionPreview, ContentDialog, Image.Properties,
FocusProperties, VisualTree, ContentManager, AcrylicBrush, etc.

Genuinely-ambiguous cases left untouched by design: #if !__WASM__ ... #else
(WASM-only #else), #if false-nested native, and reference-fallback conjunctions
(#if !__ANDROID__ && !__SKIA__ && ...) — these are live/cross-flavor guards, not
dead native branches.

Part of spec 043 W5. Validated: direct Uno.UI.Skia + Reference + Tests, 0 errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nt/Media/Shapes/UIElement (W5 batch 6)

Remove dead positive native preprocessor branches across 43 core files:
FrameworkElement, UIElement.* partials (Layout/Properties/FocusMixins/
Pointers.Managed/debugging), Media (Brush/Geometry/Transform/SolidColorBrush/
ImageBrush/RectangleGeometry/animation), Shapes (Shape/Rectangle/Ellipse/
Polygon/Polyline), VisualTreeHelper, ResourceDictionary, FrameworkTemplate(Pool),
ElementCompositionPreview, ImageSourceHelper, etc. Mixed conditions simplified
to Skia/Reference disjuncts; native [NotImplemented] attribute guards reduced to
IS_UNIT_TESTS/__SKIA__/__NETSTD_REFERENCE__.

UIElement.MuxInternal.cs and UIElement.RoutedEvents.cs were reverted: their
#if !__CROSSRUNTIME__ blocks are LIVE for the unit-Tests flavor (IS_UNIT_TESTS
is not __CROSSRUNTIME__) and must not be removed. The build-gated validation
caught this; the workflow rule was corrected to never touch negated
(!__CROSSRUNTIME__/!__SKIA__/!__NETSTD_REFERENCE__) conditions.

Part of spec 043 W5. Validated: direct Uno.UI.Skia + Reference + Tests, 0 errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… + window (W5 batch 7)

Remove dead positive native preprocessor branches across large/core files:
NavigationView, ItemsControl, ItemsView, Grid, TextBox, FlipView.managed,
VisualStateManager, Window + native window wrappers (INativeWindowWrapper/
NativeWindowWrapperBase/BaseWindowImplementation), TemplateManager. Mixed
conditions simplified to their Skia disjunct (e.g. #if __WASM__ || __SKIA__
-> #if __SKIA__); negated/Reference/Tests guards (#if !__SKIA__) preserved.

Part of spec 043 W5. Validated: direct Uno.UI.Skia + Reference + Tests, 0 errors.
(A concurrent workflow run was partially rate-limited server-side; the 8
remaining large files — ScrollViewer, DatePicker, DependencyObjectStore,
XamlObjectBuilder, UIElement(.Pointers), MediaTransportControls, LoopingSelector
— were left untouched and are handled next.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… batch 8)

Remove dead positive native preprocessor branches from the largest core files:
UIElement, UIElement.Pointers, DependencyObjectStore, ScrollViewer, DatePicker,
XamlObjectBuilder, MediaTransportControls, LoopingSelector_Partial. Using-alias
chains collapsed to the managed (UIElement) alias; mixed #if __WASM__ || __SKIA__
reduced to #if __SKIA__; native [NotImplemented] guards trimmed. Negated forms
(#if !__WASM__/!__CROSSRUNTIME__) and derived symbols (SUPPORTS_NATIVE_DATEPICKER)
preserved.

Completes the W5 positive-native #if-forest cleanup across the compile-validatable
Uno.UI surface. Validated: direct Uno.UI.Skia + Reference + Tests, 0 errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 16, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 7m 20s —— View job


PR Review

  • Gather PR context and understand the changes
  • Review documentation changes
  • Review source code deletions and modifications
  • Review spec files
  • Post inline comments for specific findings
  • Post summary

Overall Verdict

This is a large, architecturally significant PR that removes the native Android, iOS/UIKit, WASM DOM, and native Composition rendering backends from Uno Platform, making Skia the single universal rendering engine. The scope is impressive: ~79k lines deleted across ~100 files in a single coherent branch, with detailed specs, a migration guide, and a structured workstream approach. The changes that landed are well-reasoned and the progression is sensible.

2 medium findings, 2 low/nit findings, 3 cross-cutting notes.


Findings by severity

Medium

  1. FauxGradientBorderPresenter.cs — stale class doc + unused imports (2 inline comments): The <summary> and <remarks> still describe the removed WASM/iOS native behavior ("cases which are unsupported by WebAssembly, iOS and macOS"). The body now does nothing (OnBorderChanged() is empty). Three imports (System.Collections.Generic, System.Linq, Uno.Foundation.Logging) are now unused and will produce analyzer warnings on CI.

  2. Uno.UI.SourceGenerators.props — stale CustomUiAutomationMemberMapping entries: The TextBoxBehavior.cs deleted by this PR is still referenced at src/SourceGenerators/Uno.UI.SourceGenerators/Content/Uno.UI.SourceGenerators.props line 258 (Uno.UI.Behaviors.TextBoxBehavior.Text). Similarly, Uno.UI.Controls.BindableListView (line 235) and Uno.UI.Controls.BindableGridView (line 240) whose source files were deleted in this PR are also still listed as accessibility mappings. These are dead references that should be removed from the props file. Fix this →

Low / Nit

  1. CompositionConfiguration.cs — [SKIA ONLY] annotation (inline comment): UseBrushAntialiasing is tagged [SKIA ONLY] but Skia is now the only backend everywhere, so the qualifier is meaningless. Minor doc clarity issue.

  2. doc/articles/migrating-to-uno-7.md (inline comment): The opening paragraphs repeat the same "Skia is the only renderer" fact twice. Minor prose nit.


Cross-cutting notes

  • PR title / template: "Native drop" doesn't follow the Conventional Commits format required by AGENTS.md (e.g. refactor!: remove native rendering backends). The PR body also has **GitHub Issue:** closes # with no issue number — AGENTS.md requires every non-documentation PR to reference an associated issue.

  • DependencyPropertyMixinGenerator still emits PartialNative methods: The generator still produces On{Prop}ChangedPartialNative(...) partial method stubs, and Popup.WithPopupRoot.cs / Popup.cs still implement them for Skia. The naming is now misleading (they're the only implementation path, not a "native" override), but this is a pre-existing naming concern not introduced by this PR. Worth a follow-up rename, but not a blocker.

  • Incomplete workstreams (by design): Progress.md correctly documents that W1 (build/TFMs), W4-ts (TypeScript DOM removal), W8 (FeatureConfiguration flags), W9 (media), W10 (safe-area/keyboard), and W11 (CI/templates) are still open. The PR targets feature/breakingchanges so this is an in-progress branch, not a release candidate. The progress notes are appropriately honest about what still needs CI/device validation.

Comment thread doc/articles/migrating-to-uno-7.md Resolved
@github-actions

Copy link
Copy Markdown
Contributor

WinAppSDK sync generator drift detected on d368984

The Uno.WinAppSDKSyncGenerator produced changes that are not committed on this PR.

To apply automatically (PRs from branches in this repo only): comment /apply-sync-gen on this PR and a bot will push chore: Sync generator run to the head branch.

To apply manually (required for PRs from forks):

  1. Download the sync-generator-patch artifact from this run.
  2. In your local checkout of the PR branch:
    git apply sync-generator.patch
    git add -A
    git commit -m "chore: Sync generator run"
    git push
    

Or re-run the generator locally on Windows via build\run-api-sync-tool.cmd.

…M runtime dir

The Skia browser runtime linked 5 platform-API files (Storage/Pickers/
FileSystemAccessApiInformation, Web/Http/Cookie*) from the now-removed
Uno.UI.Runtime.WebAssembly DOM project. Relocate them into
Uno.UI.Runtime.Skia.WebAssembly.Browser (picked up by the default compile glob),
drop the cross-project <Compile Include> links, and delete the dead
Uno.UI.Runtime.WebAssembly directory entirely.

Validated: Uno.UI.Runtime.Skia.WebAssembly.Browser builds clean (net9.0 + net10.0,
0 errors). The UNOB0017 "no DOM-runtime dependency" guard is retained.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QgAgDgH9aucWKC3ewivX1X
@MartinZikmund
MartinZikmund force-pushed the dev/mazi/dropnativetest branch from c23a912 to 8a5eb96 Compare June 22, 2026 09:33
@github-actions

github-actions Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 4m 12s —— View job


PR Review

  • Gather context on new commits since last review
  • Check if prior findings have been addressed
  • Review sync generator output
  • Examine AGENTS.md stale references
  • Examine FauxGradientBorderPresenter.cs
  • Examine Uno.UI.SourceGenerators.props
  • Post inline comments for findings
  • Post summary

Overall Verdict

Four new commits since the June 22 review:

  • refactor(sync-generator): load native heads for Uno.UI.Dispatching — restores native #if guards on Dispatching stubs
  • refactor(build): Delete native netcoremobile project heads
  • refactor(build): Delete native WASM-DOM project heads — also removes Uno.UI.Runtime.WebAssembly.csproj
  • refactor(wasm): Move shared source into Skia browser runtime, drop DOM runtime dir — resolves the W4-ts workstream: 5 platform-API files moved from the now-deleted Uno.UI.Runtime.WebAssembly directory into Uno.UI.Runtime.Skia.WebAssembly.Browser; remaining <Compile Include> links (InputReturnTypeExtensions.wasm.cs, InputScopeExtensions.wasm.cs, NativeWebView.Interop.wasm.cs, NativeWebView.wasm.cs) all still resolve

All four new commits are mechanically sound. The W4-ts source separation workstream item (previously flagged as "follow-up") is now complete — Uno.UI.Runtime.WebAssembly directory is fully deleted.

4 prior findings remain open (3 medium, 1 low). No new code issues introduced.


Still-Open Findings

Medium — 4th+ pass open

src/Uno.UI/Controls/FauxGradientBorderPresenter.cs (inline comments from June 16 still stand):

  • <summary>/<remarks> (lines 14–22) still describe removed WASM/iOS/macOS native behavior — the class is now a permanent no-op that sets Visibility.Collapsed.
  • Unused imports System.Collections.Generic, System.Linq, and Uno.Foundation.Logging (lines 3–5) will fire EnforceCodeStyleInBuild warnings on CI.

src/SourceGenerators/Uno.UI.SourceGenerators/Content/Uno.UI.SourceGenerators.props (not in PR diff — no inline comment possible):

  • CustomUiAutomationMemberMapping entries for Uno.UI.Controls.BindableListView (lines 235–239) and Uno.UI.Controls.BindableGridView (lines 240–244) reference source files deleted by this PR.
  • Uno.UI.Behaviors.TextBoxBehavior.Text at line 258 (inside the TextBox entry) also references a deleted file. Fix this →

AGENTS.md — multiple stale architecture sections (not in PR diff — no inline comment possible):

  • Lines 121/123: Uno.UI-Wasm-only.slnf and Uno.UI-netcore-mobile-only.slnf still listed in the solution filter table; both were deleted by commit 4024b8cf. Any developer following the build guide will get "file not found".
  • Line 143: "Platform-specific runtimes (Skia, WebAssembly, Native)" — Native backend no longer exists.
  • Line 148: "Native: Platform controls (UIKit, Android Views, DOM elements)" — lists a removed rendering engine as active.
  • Lines 150–152: "Development scope" still says native targets are maintenance-only ("don't break them") rather than removed.
  • Lines 160–162: Platform Base Classes table lists Android native, iOS native, and WebAssembly native inheritance chains for backends that no longer exist. Fix this →

Low — still open

src/Uno.UI.Composition/Composition/Uno/CompositionConfiguration.cs:27 (inline comment from June 16): [SKIA ONLY] on UseBrushAntialiasing is a tautology — Skia is the only backend everywhere now.


Resolved Since Last Pass

  • W4-ts source separation: Uno.UI.Runtime.WebAssembly directory fully deleted; 5 platform-API files now physically live in Uno.UI.Runtime.Skia.WebAssembly.Browser. No longer flagged.
  • doc/articles/migrating-to-uno-7.md prose duplication: Resolved in the June 22 merge rewrite. No longer flagged.

Cross-cutting Notes

  • PR title / template: "Native drop" does not follow Conventional Commits (refactor!: / feat!: per AGENTS.md). **GitHub Issue:** closes # has no issue number — AGENTS.md requires every non-documentation PR to reference an associated issue.
  • Incomplete workstreams (by design): W8, W9, W10, W11 remain open per progress.md. Appropriate for a WIP branch targeting feature/breakingchanges.

@unodevops

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-23470/wasm-skia-net9/index.html

@nventive-devops

Copy link
Copy Markdown
Contributor

The build 219250 did not find any UI Test snapshots differences.

@unodevops

Copy link
Copy Markdown
Contributor

⚠️⚠️ The build 219250 has failed on Uno.UI - CI.

Two W5 #if-cleanup leftovers that UnoFastDevBuild skipped locally but CI's
EnforceCodeStyleInBuild flags:
- Application.cs: re-indent Package.SetEntryAssembly inside #if __SKIA__ to
  match the enclosing 4-tab block.
- ManagedWeakReference.cs: drop trailing whitespace on a blank line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QgAgDgH9aucWKC3ewivX1X
@github-actions

github-actions Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 2m 3s —— View job


PR Review

  • Gather context on new commits since last review
  • Check if prior findings have been addressed
  • Review new formatting commit
  • Post inline comments for findings
  • Post summary

Overall Verdict

One new commit since the June 22 09:33 review: 5583b52c6 style: Fix IDE0055 formatting in Uno.UI. This is a two-line whitespace fix (indentation in Application.cs, trailing whitespace removal in ManagedWeakReference.cs) that CI's EnforceCodeStyleInBuild flagged as leftovers from the W5 #if-cleanup batches. The fix is correct and introduces no new issues.

4 prior findings remain open (2 medium, 1 expanded medium, 1 low). No new code issues introduced by this commit.


Still-Open Findings

Medium — 5th+ pass open

src/Uno.UI/Controls/FauxGradientBorderPresenter.cs (inline comments from June 16 still stand):

  • <summary>/<remarks> (lines 14–22) still describe removed WASM/iOS/macOS native behavior — the class is now a permanent no-op.
  • Unused imports System.Collections.Generic (line 3), System.Linq (line 4), and Uno.Foundation.Logging (line 5) are dead and will fire EnforceCodeStyleInBuild warnings on CI — the same class of issue as the commit just pushed.

src/SourceGenerators/Uno.UI.SourceGenerators/Content/Uno.UI.SourceGenerators.props (not in PR diff — no inline comment possible):

  • CustomUiAutomationMemberMapping entries for Uno.UI.Controls.BindableListView (lines 235–244) and Uno.UI.Controls.BindableGridView (lines 240–244) reference source files deleted by this PR.
  • Uno.UI.Behaviors.TextBoxBehavior.Text at line 258 (inside the TextBox entry) also references a deleted file. Fix this →

AGENTS.md — multiple stale architecture sections (not in PR diff — no inline comment possible):

  • Lines 121/123: still lists deleted Uno.UI-Wasm-only.slnf and Uno.UI-netcore-mobile-only.slnf in the solution filter table; any developer following the build guide will get "file not found".
  • Line 143: "Native" still listed as an active runtime.
  • Line 148: "Native: Platform controls (UIKit, Android Views, DOM elements)" lists a removed rendering engine as active.
  • Lines 152–154: Development scope still says native targets are maintenance-only ("don't break them") — they've been removed.
  • Lines 160–162: Platform Base Classes table lists Android native, iOS native, and WebAssembly native rows for deleted backends. Fix this →

Low — still open

src/Uno.UI.Composition/Composition/Uno/CompositionConfiguration.cs:27 (inline comment from June 16): [SKIA ONLY] on UseBrushAntialiasing is a tautology — Skia is the only backend now.


Resolved Since Last Pass

  • Formatting CI failures: 5583b52c6 correctly fixes the two IDE0055 style violations left by W5 #if cleanup — indentation in Application.cs and trailing whitespace in ManagedWeakReference.cs.

Cross-cutting Notes

  • PR title / template: "Native drop" still does not follow Conventional Commits (refactor!: per AGENTS.md). **GitHub Issue:** closes # still has no issue number — AGENTS.md requires every non-documentation PR to reference an associated issue.
  • Incomplete workstreams (by design): W8, W9, W10, W11 remain open per progress.md. Appropriate for this WIP branch targeting feature/breakingchanges.

@unodevops

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-23470/wasm-skia-net9/index.html

…ds (#2104)

build/filters/Uno.UI-top-projects-for-sync-gen.slnf still listed the deleted
Uno.UI.netcoremobile / Uno.UI.Wasm heads, breaking the sync-gen CI restore with
MSB4025 (projects absent from Uno.UI.slnx). Point it at the heads the generator
now loads: Uno.UI.Skia/Reference plus the kept Uno.UWP and Uno.UI.Dispatching
native + wasm heads (which carry the per-platform UWP/Foundation/Dispatching
symbols the generator needs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QgAgDgH9aucWKC3ewivX1X
@github-actions

github-actions Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 7m 41s —— View job


PR Review

  • Gather context on new commits since last review
  • Check if prior findings have been addressed
  • Review new sync generator fix commit
  • Check remaining open findings in code
  • Post inline comments for findings
  • Post summary

Overall Verdict

One new commit since the June 22 11:31 review: 22861eeca fix(sync-generator): Point top-projects filter at the kept native heads. This commit partially resolves the "High" finding from the June 22 09:28 pass: the sync-gen slnf filter no longer lists the deleted Uno.UI.netcoremobile.csproj / Uno.UI.Wasm.csproj project heads and the dotnet restore step will now succeed. However, the second half of that finding — the expectedRefs check in LoadProject (line 2366) — is still incompatible with the new Uno.UWP/Dispatching heads and will throw on the next full sync-gen run.

1 partially-resolved High (now Medium) finding. 3 prior Medium/Low findings still open.


Findings

Medium — new inline comment posted (6th pass)

src/Uno.WinAppSDKSyncGenerator/Generator.cs:190 (inline comment posted):

The expectedRefs check at line 2366 still asserts all of ["Uno.Foundation", "Uno", "Uno.UI.Composition", "Uno.UI.Dispatching"] are in every project's ExternalReferences. The new heads loaded here fail:

  • Uno.netcoremobile.csproj (Uno.UWP, assembly "Uno") — "Uno" is the own assembly, never in ExternalReferences; "Uno.UI.Composition" is not a transitive dep.
  • Uno.UI.Dispatching.netcoremobile.csproj — same: own assembly name absent, "Uno" is not a dep, "Uno.UI.Composition" is not a dep.

The slnf fix (22861eeca) enables the restore step; the generator still throws at runtime on the first new-head load.

Medium — still open (6th pass)

src/Uno.UI/Controls/FauxGradientBorderPresenter.cs (inline comments from June 16 + June 22 still stand):

  • <summary>/<remarks> (lines 14–22) still describe removed WASM/iOS/macOS behavior.
  • Unused imports System.Collections.Generic, System.Linq, and Uno.Foundation.Logging (lines 3–5) will fire EnforceCodeStyleInBuild warnings on CI — same class of issue as 5583b52c6 that was just pushed to fix IDE0055.

src/SourceGenerators/Uno.UI.SourceGenerators/Content/Uno.UI.SourceGenerators.props (not in PR diff):

  • CustomUiAutomationMemberMapping entries for Uno.UI.Controls.BindableListView (lines 235–239) and Uno.UI.Controls.BindableGridView (lines 240–244) reference source files deleted by this PR.
  • Uno.UI.Behaviors.TextBoxBehavior.Text at line 258 (inside the TextBox entry) also references a deleted file.

Fix this →

AGENTS.md (not in PR diff — W12 per progress.md):

  • Lines 121/123: still lists deleted Uno.UI-Wasm-only.slnf and Uno.UI-netcore-mobile-only.slnf.
  • Line 143: "Native" still listed as an active runtime.
  • Line 148: "Native: Platform controls (UIKit, Android Views, DOM elements)" lists a removed engine as active.
  • Lines 150–154: Development scope still says native targets are maintenance-only rather than removed.
  • Lines 160–162: Platform Base Classes table still lists Android/iOS/WebAssembly native inheritance chains.

Low — still open

src/Uno.UI.Composition/Composition/Uno/CompositionConfiguration.cs:27 (inline from June 16): [SKIA ONLY] on UseBrushAntialiasing is a tautology — Skia is the only backend now.


Resolved Since Last Pass

  • Sync-gen slnf restore step: 22861eeca correctly replaces the deleted Uno.UI.netcoremobile.csproj / Uno.UI.Wasm.csproj entries with Uno.UWP\Uno.netcoremobile.csproj, Uno.UWP\Uno.Wasm.csproj, Uno.UI.Dispatching\Uno.UI.Dispatching.netcoremobile.csproj, and Uno.UI.Dispatching\Uno.UI.Dispatching.Wasm.csproj. The dotnet restore step in run-api-sync-tool.cmd will now succeed.

Cross-cutting Notes

  • PR title / template: "Native drop" still does not follow Conventional Commits (refactor!: per AGENTS.md). **GitHub Issue:** closes # still has no issue number — AGENTS.md requires every non-documentation PR to reference an associated issue.
  • Incomplete workstreams (by design): W8, W9, W10, W11 remain open per progress.md. Appropriate for a WIP branch targeting feature/breakingchanges.

@unodevops

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-23470/wasm-skia-net9/index.html

Generator.Build() loaded the now-deleted Uno.UI native/WASM heads. After repointing
to the kept platform heads, two runtime crashes surfaced (only caught at run time, not
compile time):

- LoadProject's expectedRefs assertion required every loaded project to reference
  Foundation/Uno/Composition/Dispatching. That holds for the Uno.UI heads but not for
  the Uno.UWP head now used for native symbols, so base.Build() threw on first load
  (rethrown by DocGenerator in Release -> 0xE0434352). Make the assertion conditional:
  full graph for the Uno.UI heads, just Uno.Foundation for the platform head.
- DocGenerator dereferenced view.AndroidSymbol, which is null for view types after the
  drop (Uno.UWP has no view types). Source the cross-platform [Obsolete] marking from
  the Skia/Reference symbol instead.

Simplify the loading: Uno.UWP references Uno.UI.Dispatching and Uno.Foundation, so a
single Uno.UWP head transitively resolves all native/WASM symbols. Drop the redundant
Dispatching load and the multi-compilation helper (also halves the heavy project loads).

Validated: Uno.WinAppSDKSyncGenerator.exe doc runs to completion (exit 0), loading
Uno.UWP for the native TFMs, with no expectedRefs failure and no NRE.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QgAgDgH9aucWKC3ewivX1X
@github-actions

github-actions Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 2m 51s —— View job


PR Review

  • Gather context on new commits since last review
  • Check if expectedRefs fix landed in Generator.cs
  • Check if other open findings were addressed
  • Review new changes for issues
  • Post inline comments for findings
  • Post summary

Overall Verdict

One new commit since the June 22 12:22 review: bdcc19f59 fix(sync-generator): Fix generator crash after native drop. This commit fully resolves the "High → Medium" finding that has been open since June 22 09:28 — both parts of it. The change is mechanically sound and validated end-to-end (generator runs to completion, exit 0). 3 medium + 1 low findings from earlier passes remain unresolved.


Resolved This Pass

bdcc19f59 — both parts of the sync-generator runtime failure fixed:

  1. expectedRefs check (Generator.cs:2334–2337) — the assertion that caused LoadProject to throw when loading the new Uno.UWP/Dispatching heads is now conditional: top Uno.UI project heads (Skia/Reference) still require all four refs; the platform head (Uno.netcoremobile.csproj) only requires Uno.Foundation, which correctly reflects its actual transitive graph.

  2. DocGenerator NRE (DocGenerator.cs:127) — view.AndroidSymbol was null for all UI view types after the native drop. The fix uses SkiaSymbol ?? NetStdReferenceSymbol ?? AndroidSymbol ?? … so the [Obsolete] attribute is sourced from the compilations that still carry view types. (Inline note posted confirming correctness.)

  3. Simplification — multi-element Compilation[] arrays replaced with single Compilation fields since a single Uno.UWP head now covers all native/WASM symbols transitively. Correct.


Still-Open Findings (7th pass)

Medium

src/Uno.UI/Controls/FauxGradientBorderPresenter.cs (inline comments from June 16 + June 22 still stand, 6+ passes):

  • <summary>/<remarks> (lines 14–22) still describe removed WASM/iOS/macOS behavior.
  • Unused imports System.Collections.Generic (line 3), System.Linq (line 4), and Uno.Foundation.Logging (line 5) will fire EnforceCodeStyleInBuild warnings on CI — same category as the IDE0055 fix in 5583b52c6.

src/SourceGenerators/Uno.UI.SourceGenerators/Content/Uno.UI.SourceGenerators.props (not in PR diff):

  • CustomUiAutomationMemberMapping entries for Uno.UI.Controls.BindableListView (lines 235–239) and Uno.UI.Controls.BindableGridView (lines 240–244) reference source files deleted by this PR.
  • Uno.UI.Behaviors.TextBoxBehavior.Text at line 258 (inside the TextBox entry) also references a deleted file. Fix this →

AGENTS.md (not in PR diff — W12 per progress.md):

  • Lines 121/123: still lists deleted Uno.UI-Wasm-only.slnf and Uno.UI-netcore-mobile-only.slnf; "file not found" for any developer following the build guide.
  • Line 143: "Native" still listed as an active runtime.
  • Line 148: "Native: Platform controls (UIKit, Android Views, DOM elements)" lists a removed rendering engine.
  • Lines 150–154: Development scope still says native targets are maintenance-only rather than removed.
  • Lines 160–162: Platform Base Classes table lists Android/iOS/WebAssembly native rows for deleted backends. Fix this →

Low

src/Uno.UI.Composition/Composition/Uno/CompositionConfiguration.cs:27 (inline from June 16): [SKIA ONLY] on UseBrushAntialiasing is a tautology — Skia is the only backend everywhere.


Cross-cutting Notes

  • PR title / template: "Native drop" still does not follow Conventional Commits (refactor!: per AGENTS.md). **GitHub Issue:** closes # has no issue number — AGENTS.md requires every non-documentation PR to reference an associated issue.
  • Incomplete workstreams (by design): W8, W9, W10, W11 remain open per progress.md. Appropriate for a WIP branch targeting feature/breakingchanges.

@unodevops

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-23470/wasm-skia-net9/index.html

@nventive-devops

Copy link
Copy Markdown
Contributor

The build 219283 did not find any UI Test snapshots differences.

@unodevops

Copy link
Copy Markdown
Contributor

⚠️⚠️ The build 219283 has failed on Uno.UI - CI.

@MartinZikmund
MartinZikmund enabled auto-merge June 24, 2026 08:03
@MartinZikmund
MartinZikmund merged commit d39c5b8 into feature/breakingchanges Jun 24, 2026
67 checks passed
@MartinZikmund
MartinZikmund deleted the dev/mazi/dropnativetest branch June 24, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/automation Categorizes an issue or PR as relevant to project automation area/build Categorizes an issue or PR as relevant to build infrastructure area/code-generation Categorizes an issue or PR as relevant to code generation kind/documentation platform/android 🤖 Categorizes an issue or PR as relevant to the Android platform platform/ios 🍎 Categorizes an issue or PR as relevant to the iOS platform platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants