Skip to content

[iOS/MacCatalyst] Controls.Core: Enable MemoryAnalyzers - #36312

Merged
kubaflo merged 28 commits into
dotnet:inflight/currentfrom
kubaflo:revive/memoryanalyzers-controls
Jul 24, 2026
Merged

[iOS/MacCatalyst] Controls.Core: Enable MemoryAnalyzers#36312
kubaflo merged 28 commits into
dotnet:inflight/currentfrom
kubaflo:revive/memoryanalyzers-controls

Conversation

@kubaflo

@kubaflo kubaflo commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Important

🤖 AI-generated PR. This PR was drafted with the assistance of an AI agent (GitHub Copilot CLI) and reviewed by a human maintainer (@kubaflo). Please review carefully.

Description of Change

This revives @jonathanpeppers' #18318 and enables the deterministic MemoryAnalyzers Roslyn analyzer for Controls.Core at error severity.

The analyzer is already used by Microsoft.Maui.Core. It detects unsafe ownership patterns in Apple NSObject subclasses:

  • MEM0001 — public events can retain subscribers.
  • MEM0002 — strong-reference members can participate in native/managed retain cycles.
  • MEM0003 — instance event subscriptions require deterministic teardown.

The large legacy compatibility surface needs a fix-first, suppression-second approach. This PR therefore combines specific justified suppressions with targeted lifecycle fixes.

Root Cause and Key Fixes

  • ShellSectionRenderer's UIKit navigation and gesture delegates strongly referenced their owning renderer, creating a real retain cycle. They now use WeakReference<ShellSectionRenderer> and ignore callbacks after disposal.
  • ShellRenderer cleanup now runs through the normal IElementHandler.DisconnectHandler() path as well as Dispose(bool), clears the Shell-to-handler reference, prevents in-flight current-item transitions from recreating or retaining renderers after teardown, cancels active native transition animations before disposal, observes late faults from custom transitions after cancellation, and detaches item-renderer views/controllers before disposing them.
  • ShellFlyoutRenderer makes both native and managed disposal paths idempotent, can be disposed safely before AttachFlyout, and tears down native views and gesture recognizers before base.Dispose(disposing).
  • ShellFlyoutContentRenderer preserves the shipped public WillAppear/WillDisappear events, clears subscribers during disposal, ignores late UIKit lifecycle callbacks after disposal, and owns/disposes asynchronous background-image service results when loads are replaced, become stale, or complete after teardown, and detaches its child table-controller view before disposing the controller.
  • ShellSectionRootRenderer ignores late UIKit layout callbacks after disposal instead of dereferencing its released container view, and now calls base.Dispose(disposing) so its native controller resources are released deterministically.
  • TableViewModelRenderer uses a named ModelChanged handler and unsubscribes it during disposal. TableViewRenderer disposes replaced and final sources deterministically.
  • TableViewModelRenderer tracks the tap and long-press recognizers it owns, then removes and disposes them when a source is replaced.
  • ContextActionsCell removes managed subscriptions during disposal while retaining its native content cell for late UIKit layout and reuse callbacks.
  • Secondary toolbar items retain the originally-created native content control so its TouchUpInside handler is always removed even if CustomView is replaced before disposal.
  • Owned UIKit views and recognizers are removed and disposed where teardown was incomplete.
  • The internal NativeViewPropertyListener implements INotifyPropertyChanged.PropertyChanged explicitly instead of suppressing a public event.

There is no breaking public API change. PublicAPI.Unshipped.txt intentionally records three new protected Dispose(bool) overrides on public compatibility types; these are non-breaking API additions required for deterministic cleanup. Label.~Label() already exists in the merge base and is only reordered. Existing shipped compatibility events remain public.

Analyzer Findings

The analyzer surfaces roughly 226 findings across legacy compatibility renderers and modern handlers. Each is handled individually:

  • Real fixes are used where ownership or teardown can be corrected safely.
  • Suppressions are retained only where the reference is intentionally owned for the renderer lifetime or the public member is shipped compatibility API.
  • Every suppression names the concrete ownership or teardown behavior it relies on.

Regression Coverage

  • ShellSectionDelegatesDoNotRetainRenderer directly roots the native delegates and proves they no longer retain ShellSectionRenderer.
  • DisconnectShellDuringCurrentItemChangeDoesNotRecreateRenderer forces a current-item continuation to resume after disconnect and proves no renderer is recreated or retained.
  • DisconnectShellDetachesCurrentItemRendererBeforeDisposal proves the current item renderer has neither a parent controller nor a superview when disposal begins.
  • DisconnectShellCancelsActiveItemTransitionBeforeDisposal proves teardown removes live native animations, releases the transition await, and disposes both renderers exactly once.
  • DisconnectShellDisposesAllPendingItemRenderers proves every superseded renderer awaiting a transition is disconnected and disposed exactly once.
  • StaleShellFlyoutBackgroundImageIsDisposed blocks an image load, invalidates its source, resumes it, and proves the stale image-service result is disposed.
  • DisposedShellSectionRootIgnoresLateLayout disposes the native root renderer and proves a subsequent UIKit layout callback is harmless.
  • DisposedShellFlyoutContentIgnoresLateLifecycleCallbacks proves UIKit appearance and layout callbacks no longer touch released native state after disposal.
  • DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers proves final flyout teardown clears both hosted MAUI handlers and detaches their native views, including the child table-controller view; it fails without the fix and passes on iOS and MacCatalyst.
  • DisconnectingReparentedUIContainerPreservesSharedHandler proves disposing an old Shell title container does not disconnect the shared handler after UIKit reparents its platform view; it fails without the fix and passes on iOS and MacCatalyst.
  • DisposedShellTableSourceClearsScrolledSubscribers proves final flyout teardown releases every public ScrolledEvent subscriber; it fails without the fix and passes on iOS and MacCatalyst.
  • ShellFlyoutRendererDisposalIsIdempotentAfterNativeTeardown proves native-side teardown prevents later explicit disposal from rerunning managed cleanup.
  • UnattachedShellFlyoutRendererCanBeDisposed proves direct repeated Dispose(true) is safe before AttachFlyout; it fails with NullReferenceException without the guard.
  • TableViewSourceReplacementUnsubscribesPreviousSource proves source replacement swaps the ModelChanged subscriber and does not accumulate source-owned recognizers.
  • ContextActionsCellDisposalUnsubscribesCell proves disposed native context-action cells detach managed subscriptions while remaining safe for late UIKit size and reuse callbacks.
  • SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement proves property updates no longer target a replacement custom view and both managed PropertyChanged and the original native TouchUpInside subscription are removed during disposal.

The broader Shell renderer graph has a separate pre-existing lifetime issue: full-tree collection fails on both the base branch and this PR. This PR intentionally does not claim to fix that unrelated ownership chain.

What NOT to Do

  • Do not hide shipped public compatibility events behind explicit interface implementations.
  • Do not put Shell cleanup only in Dispose(bool); normal MAUI teardown uses DisconnectHandler().
  • Do not use full Shell-tree collection as a proxy for the focused UIKit delegate cycle.
  • Do not suppress event subscriptions that can instead be unsubscribed deterministically.

Verification

Controls.Core builds cleanly with zero warnings and zero errors:

dotnet build src/Controls/src/Core/Controls.Core.csproj -c Release -f net10.0-ios26.0
dotnet build src/Controls/src/Core/Controls.Core.csproj -c Release -f net10.0-maccatalyst26.0

Empirical device-test results:

  • iOS Shell: 218 passed, 0 failed
  • MacCatalyst Shell: 52 passed, 0 failed
  • Android Shell regression: 69 passed, 0 failed
  • iOS Memory: 58 passed, 0 failed, 1 ignored
  • MacCatalyst Memory: 57 passed, 0 failed, 1 ignored

Exact UI-test reproductions from the failed CI run:

  • iOS: 12 passed, 0 failedTitleViewSetOnShellWorksAfterNavigation, ShellItemItemsClearTests, Issue3276Test, GitHub1567Test, and eight ListView/context-action crash repros.
  • MacCatalyst: 1 passed, 0 failedIssue3276Test.

Focused delegate-retention comparison over 50 iterations:

  • Base branch: 0/50 passed
  • This PR: 50/50 passed on both iOS and MacCatalyst

Android has no direct analyzer or runtime behavior change; its run validates regression safety.

Current-head CI and Merge Recommendation

Fresh current-head builds target merge SHA 7085aea from head a6a6559:

  • maui-pr 1523478 succeeded.
  • Device 1523482 succeeded; all seven Helix jobs and 53/53 work items passed.
  • UI 1523481 is mechanically red only for the recurring macOS Issue20855.GroupedCollectionViewItems screenshot delta (0.54-0.55%) and the wrapper's full-suite retry exceeding the 180-minute job limit.

The exact macOS visual signature recurs on unrelated builds 1505713, 1511724, 1511860, 1514713, and 1517676. The latest actual image differs from the unrelated PR #36552 failure image in only 0.2175% of pixels, with a maximum channel delta of 3. No further product change or retry is warranted; clearing the required check needs a separate baseline/test-infrastructure fix or maintainer override.

MauiBot found no actionable issue on the current head, Copilot reviewed all 57 files without current-head comments, and all review threads are resolved. Engineering verdict: ready to merge after human approval.

Issues Fixed

Revives #18318.

Credits

Original author: @jonathanpeppers (#18318). Revived per a suggestion by @AdamEssenmacher.

Copilot AI added 2 commits July 3, 2026 00:14
…iewController)

Revives dotnet#18318. Enables the deterministic MemoryAnalyzers on Controls.Core
and demonstrates the finding-resolution pattern on one CollectionView file.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reviving dotnet#18318: with MemoryAnalyzers now enabled on Controls.Core, this
resolves the diagnostics it surfaces so the analyzer can be enforced (error)
on modern (non-Compatibility) code.

Modern handlers (Items/, Items2/, Platform/iOS, GestureManager):
- CollectionView/CarouselView controllers, cells, delegators and layouts:
  suppress MEM0002/MEM0003 with "Proven safe in test:
  MemoryTests.HandlerDoesNotLeak", matching the existing convention in
  ItemsViewController.cs / CarouselViewController.cs.
- GroupableItemsViewController2 scroll-ended callback: transient, cleared to
  null immediately after invocation.
- ControlsModalWrapper: modal handler + PropertyChanged subscription are
  released/unsubscribed in Dispose (verified).
- DragAndDropDelegate: handler reference is released in Disconnect (verified);
  local drag state is UIKit session-scoped.
- CustomPressGestureRecognizer / FakeRightClick*Interaction: strong references
  are required to keep native targets/delegates alive for the recognizer /
  interaction lifetime (by design).

Legacy Compatibility/ renderers (~390 findings) are downgraded to suggestion
via src/Controls/src/Core/Compatibility/.editorconfig for incremental adoption
and tracked for follow-up burn-down.

Verified: Controls.Core builds clean of MEM diagnostics for both
net10.0-ios26.0 and net10.0-maccatalyst26.0.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36312

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36312"

@github-actions github-actions Bot added area-controls-collectionview CollectionView, CarouselView, IndicatorView platform/ios platform/macos macOS / Mac Catalyst labels Jul 2, 2026
Copilot AI added 4 commits July 3, 2026 15:54
…rror on Compatibility

Per review feedback (@jonathanpeppers): downgrading MEM0001/2/3 to suggestion
just silences the analyzer on legacy renderers instead of enforcing it. The
findings will be handled individually (real fix where clean, else specific
justified suppression).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…renderers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…renderers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kubaflo

kubaflo commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

Note

🤖 AI-generated comment (GitHub Copilot CLI, on behalf of @kubaflo). Please verify before relying on it.

@jonathanpeppers — thanks, you were exactly right: the Compatibility/.editorconfig downgrade just silenced the analyzer on the legacy renderers instead of enforcing it. That is now removed and the analyzer is enforced at error across all of Controls.Core.

Every finding is handled individually per the README rules, fix-first:

  • MEM0003static handler where the body is stateless (e.g. ShellTableViewSource.OnViewMeasureInvalidated).
  • MEM0002WeakReference<T> for nested NSObject delegates holding a strong back-ref to their renderer (ShellSectionRenderer.GestureDelegate / NavDelegate — the retain cycle from the wiki).
  • MEM0001 → non-public / explicit-interface events (ShellFlyoutContentRenderer.WillAppear/WillDisappear).
  • Added real Dispose/-= teardown where it was missing.
  • Everything else is a specific justified [UnconditionalSuppressMessage(...)] naming the concrete teardown method — no blanket severity change.

226 findings resolved (~195 legacy + 31 modern); Controls.Core builds clean of MEM/CS/RS on both net10.0-ios26.0 and net10.0-maccatalyst26.0.

Given the volume, most legacy findings are conservative justified suppressions rather than behavioral changes — happy to convert more into real fixes wherever you'd prefer. Ready for another look when you have a moment.

@kubaflo
kubaflo marked this pull request as ready for review July 3, 2026 18:58
Copilot AI review requested due to automatic review settings July 3, 2026 18:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR enables the MemoryAnalyzers Roslyn analyzer on Microsoft.Maui.Controls.Core and addresses the resulting iOS/MacCatalyst leak diagnostics by adding targeted teardown fixes, WeakReference conversions, and justified [UnconditionalSuppressMessage] annotations across modern handlers and legacy Compatibility renderers.

Changes:

  • Enable MemoryAnalyzers on src/Controls/src/Core/Controls.Core.csproj.
  • Fix/avoid retain cycles and event-subscription leaks in several iOS Compatibility renderers (notably Shell/Nav renderers) and platform helpers.
  • Add granular MEM0001/2/3 suppressions with justifications where lifetime/ownership is intentional and teardown is verified.

Reviewed changes

Copilot reviewed 49 out of 49 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/Controls/src/Core/Platform/iOS/DragAndDropDelegate.cs Adds MEM suppressions for session-scoped handler references in drag/drop state.
src/Controls/src/Core/Platform/iOS/CustomPressGestureRecognizer.cs Adds MEM suppressions for target/event retention within recognizer lifetime.
src/Controls/src/Core/Platform/iOS/ControlsModalWrapper.cs Adds MEM suppressions and documents teardown expectations for modal wrapper subscriptions/ownership.
src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.iOS.cs Suppresses required strong delegate references to prevent GC during interaction lifetime.
src/Controls/src/Core/Handlers/Items2/iOS/TemplatedCell2.cs Suppresses handler/view strong refs with “proven safe” memory test justification.
src/Controls/src/Core/Handlers/Items2/iOS/ReorderableItemsViewController2.cs Suppresses long-press recognizer strong reference with “proven safe” justification.
src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewDelegator2.cs Suppresses layout strong reference with “proven safe” justification.
src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs Suppresses ItemsSource ref + window event subscription with “proven safe” justification.
src/Controls/src/Core/Handlers/Items2/iOS/GroupableItemsViewController2.cs Suppresses transient callback retention used for scroll animation end handling.
src/Controls/src/Core/Handlers/Items2/iOS/DefaultCell2.cs Suppresses UIKit subview/constraint ownership with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/StructuredItemsViewController.cs Suppresses header/footer native view retention with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/ReorderableItemsViewController.cs Suppresses long-press recognizer strong reference with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs Suppresses instance event subscription flagged by MEM0003 with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/ItemsViewDelegator.cs Suppresses layout ownership with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs Suppresses ItemsSource ref + window event subscription with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/GroupableItemsViewController.cs Suppresses cached measurement cells + transient callback retention.
src/Controls/src/Core/Handlers/Items/iOS/DefaultCell.cs Suppresses UIKit subview/constraint ownership with “proven safe” justification.
src/Controls/src/Core/Handlers/Items/iOS/CarouselViewController.cs Suppresses event subscription flagged by MEM0003 with “proven safe” justification.
src/Controls/src/Core/Controls.Core.csproj Adds MemoryAnalyzers package reference to enable diagnostics on Controls.Core.
src/Controls/src/Core/Compatibility/iOS/NativeViewPropertyListener.cs Adds MEM0001 suppression for a PropertyChanged event on an NSObject subclass.
src/Controls/src/Core/Compatibility/iOS/GlobalCloseContextGestureRecognizer.cs Suppresses strong UIScrollView member with documented Dispose cleanup intent.
src/Controls/src/Core/Compatibility/iOS/Extensions/ToolbarItemExtensions.cs Adds explicit teardown in Dispose and MEM suppressions for item subscriptions/UI ownership.
src/Controls/src/Core/Compatibility/Handlers/VisualElementRenderer.cs Adds suppressions for mapper/context/mapper fields and legacy public events.
src/Controls/src/Core/Compatibility/Handlers/TableView/iOS/TableViewRenderer.cs Suppresses original background view retention needed for restoration.
src/Controls/src/Core/Compatibility/Handlers/TableView/iOS/TableViewModelRenderer.cs Suppresses instance event subscription flagged by MEM0003.
src/Controls/src/Core/Compatibility/Handlers/TabbedPage/iOS/TabbedRenderer.cs Adds suppressions + additional Dispose teardown for child/page subscriptions and brushes.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerView.cs Suppresses renderer/platform ownership + documents internal event teardown ownership.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerCell.cs Adds suppressions + disconnect cleanup (nulling fields) for recycled table cells.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewSource.cs Makes measure-invalidated callback static and adds suppressions for owned refs/events.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs Adds suppressions for owned refs/callbacks and event teardown in Dispose.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs Adds suppressions + additional view removal/nulling during Dispose.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootHeader.cs Adds suppressions + additional view disposal/removal and nulling on Dispose.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRenderer.cs Reworks delegates to weak refs to break retain cycles; adds many MEM suppressions.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSearchResultsRenderer.cs Adds suppressions and clears public event in Dispose to avoid leaks.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellRenderer.cs Adds suppressions and strengthens Dispose teardown for renderers/subscriptions.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellItemRenderer.cs Adds suppressions + explicit tracker/context cleanup and event teardown documentation.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutRenderer.cs Adds suppressions + more aggressive disposal of gestures/animations/flyout controller.
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutContentRenderer.cs Converts lifecycle events to explicit-interface events and adds Dispose teardown.
src/Controls/src/Core/Compatibility/Handlers/NavigationPage/iOS/NavigationRenderer.cs Adds suppressions across owned state + documents/targets teardown points.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ViewCellRenderer.cs Adds suppression for per-cell subscriptions removed on replacement/Dispose.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs Adds many suppressions and teardown annotations for owned refs/subscriptions.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/EntryCellRenderer.cs Adds suppressions + clears public events and unsubscribes in cell Dispose.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ContextScrollViewDelegate.cs Adds suppressions + more explicit cleanup/disposal of recognizers in Dispose.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ContextActionCell.cs Adds suppressions + ensures ContentCell cleared and ownership is explicit.
src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/CellTableViewCell.cs Adds suppression and clears callback when Cell is set to null.
src/Controls/src/Core/Compatibility/Handlers/iOS/VisualElementRenderer.cs Adds suppression for SizeChanged/BatchCommitted subscriptions removed on element change.
src/Controls/src/Core/Compatibility/Handlers/iOS/ViewRenderer.cs Adds suppression for native view reference cleared during disconnect.
src/Controls/src/Core/Compatibility/Handlers/iOS/FrameRenderer.cs Adds suppressions for static mapper + owned content view.
src/Controls/src/Core/Compatibility/Handlers/FlyoutPage/iOS/PhoneFlyoutPageRenderer.cs Adds suppressions and extra event teardown in Dispose.

Comment thread src/Controls/src/Core/Compatibility/iOS/NativeViewPropertyListener.cs Outdated

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Adversarial code review — PR #36312

Methodology: this change was independently reviewed by 3 models, and single-reviewer findings were re-tested in a dispute round. Only findings that survived cross-validation are reported. This is a code-only assessment — CI status is out of scope.

This PR clears ~226 MemoryAnalyzers diagnostics on Controls.Core, mostly via [UnconditionalSuppressMessage] with a handful of behavioral fixes (WeakReference conversions, static-method conversions, added Dispose teardown). The bulk holds up well: the WeakReference self-cycle conversions in ShellSectionRenderer, the new ShellFlyoutContentRenderer.Dispose that fixes a real pre-existing Shell.PropertyChanged leak, and the "proven safe in HandlerDoesNotLeak" suppressions all check out. The items below are the exceptions.

❌ Public API break + build break — ShellFlyoutContentRenderer (already flagged inline at :47)

ShellFlyoutContentRenderer is a public class, and its WillAppear / WillDisappear events are shipped public API — both are present in PublicAPI.Shipped.txt for net-ios and net-maccatalyst. Demoting them to private + explicit-interface events removes shipped API. Beyond the source-compat break the existing review already notes, this should also fail the build with RS0017 (the PublicAPI analyzer), because no matching removal entries were added to PublicAPI.Unshipped.txt. And internally these events have zero subscribers, so the demotion buys nothing. Recommend keeping them public and suppressing MEM0001 — consistent with how every other legacy renderer event in this PR was handled.

⚠️ ContextScrollViewDelegate.Dispose — dispose without remove (inline at :228)

⚠️ TableViewModelRenderer — MEM0003 justification addresses the wrong leak vector (inline at :49)

See the inline comments for details.

💡 Minor

  • CellTableViewCell.PropertyChanged (already flagged inline at :19): worth adding that this field is effectively dead — nothing ever assigns it (the .PropertyChanged += sites are on the ViewCell model, not this field). The inaccurate "cleared in Dispose" justification is therefore harmless in practice; the cleanest resolution may be to just remove the unused field rather than justify it.
  • ShellFlyoutContentRenderer.Dispose async-callback window: the new Dispose nulls _shellContext / _bgImage before base.Dispose, while the pre-existing UpdateFlyoutBgImageAsync LoadImage callback dereferences them. Both dispute-round reviewers agreed the View is null guard plus synchronous Dispose ordering make an actual NRE unlikely, so this is defensive only — but a _shellContext is null check alongside the existing View is null guard would close the window cheaply.

Tests

No tests were added. These suppression justifications are lifetime claims that only device/memory tests (e.g. MemoryTests.HandlerDoesNotLeak) can truly validate; findings at ContextScrollViewDelegate and TableViewModelRenderer describe leak paths that wouldn't be caught without such coverage.


3 independent reviewers · adversarial consensus · comment-only (approval is a human decision).

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Adversarial re-review (fresh pass) — methodology: 3 independent reviewers + a dispute round on split findings.

This was a second, independent pass over the unchanged head. It re-confirmed the previously posted event-demotion / public-API concern in ShellFlyoutContentRenderer (already flagged — not re-posting), and surfaced one new finding, added inline:

  • ⚠️ ShellFlyoutRenderer.Dispose calls base.Dispose(disposing) before the new native-teardown block, so View?.RemoveGestureRecognizer(...) runs against an already-disposed controller and no-ops. Fix is to move base.Dispose to the end, matching the sibling ShellFlyoutContentRenderer.Dispose in this same PR.

All other new candidates raised during this pass were investigated and discarded as pre-existing/out-of-scope, mitigated by base.Dispose tearing down the view tree, or style-only. CI status is out of scope for this review.

Comment thread src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutRenderer.cs Outdated

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Expert Review — 6 findings

See inline comments for details.

Comment thread src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutRenderer.cs Outdated
Comment thread src/Controls/src/Core/Compatibility/iOS/NativeViewPropertyListener.cs Outdated
@MauiBot

This comment has been minimized.

@MauiBot MauiBot added s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Jul 5, 2026
MauiBot

This comment was marked as outdated.

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

AI-assisted review follow-up for review 4761788649: its NEEDS_CHANGES finding is already fixed in the current head.

Commit c49b7e8614a implements authoritative UIContainerView.Disconnect() teardown (detach the captured native view, clear ownership, and call DisconnectHandler()), and Dispose(bool) invokes it. ShellFlyoutContentRenderer.Dispose(bool) disposes both header and footer containers. DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers verifies both MAUI handlers become null and both native views detach.

The deterministic gate failed without this fix (214/215; retained LabelHandler) and passed with it (215/215). Current-head validation is iOS Shell 216/216 and MacCatalyst Shell 50/50. There is no unresolved review thread for this already-addressed finding.

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/review tests

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

Tests Failure Analysis

@github-actions[bot] — new AI test-failure analysis results are available based on this last commit: a6a6559.

Overall Not ready Review fixes 4 iOS 218 passing MacCatalyst 52 passing

Test Failure Review: Not ready - click to expand

Overall verdict: Not ready

No known PR-caused failure remains on a6a6559. The latest MauiBot review identified four lifecycle/test-reliability gaps; all four are fixed in a6a6559, all threads are resolved, and focused Apple validation is green. Merge readiness is pending only the replacement automated review and current-head CI.

Coverage: Fresh builds maui-pr 1523478, device 1523482, and UI 1523481 target merge SHA 7085aea from head a6a6559.

Failure Verdict On base? Evidence
Reparented Shell title handler PR-caused, fixed no Commit d54ad27 fixed the obsolete-head iOS regression. The exact CI Issue12888.TitleViewSetOnShellWorksAfterNavigation passed on the replacement head, and the ownership gate fails without the fix and passes with it.
Flyout table-controller view remains attached PR-caused, fixed no The expanded teardown regression fails without the fix; combined no-fix iOS gate was 216/218. a6a6559 removes the loaded child view before controller teardown.
Unattached ShellFlyoutRenderer.Dispose(true) PR-caused, fixed no New regression fails without the fix with NullReferenceException; a6a6559 guards observer cleanup before AttachFlyout.
Late custom transition fault PR-caused risk, fixed If cancellation wins, the original transition task is now observed asynchronously and late non-cancellation faults are logged without blocking teardown.
Delayed image test wait Test reliability, fixed The test intentionally ignores cancellation to produce a stale result, but its wait is now bounded to 30 seconds with a clear timeout failure.
Apple Shell regression suites No failures found Clean iOS run: 218/218. MacCatalyst run: 52/52. Controls.Core iOS and MacCatalyst builds: 0 warnings, 0 errors.

Recommended action

Wait for the fresh automated review and builds 1523478, 1523482, and 1523481. If they remain green or contain only failures verified against main, the PR is merge-ready.

Evidence details

Deterministic review gate:

  • Without the table-view detachment and null guard: iOS Shell 216/218.
  • Exact failures: DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers and UnattachedShellFlyoutRendererCanBeDisposed.
  • With a6a6559: iOS Shell 218/218 and MacCatalyst Shell 52/52.

Prior current-head evidence retained:

  • maui-pr 1523119 succeeded after an external JDK-download retry.
  • Device 1523131 succeeded; all seven Helix jobs and 53/53 work items passed.
  • Exact iOS Issue12888.TitleViewSetOnShellWorksAfterNavigation passed in CI.
  • Prior UI failures were classified separately against latest main and historical unrelated runs; the replacement UI build will provide the final current-head verdict.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 926cb3a5-a29d-45bd-8c25-35da659b8dfd
@kubaflo

This comment has been minimized.

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines will not run the associated pipelines, because the pull request was updated after the run command was issued. Review the pull request again and issue a new run command.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 57 out of 57 changed files in this pull request and generated 1 comment.

Comment thread src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run maui-pr-devicetests

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run maui-pr-uitests

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

1 similar comment
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/review tests

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Expert Review — 4 findings

See inline comments for details.

Comment thread src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutRenderer.cs Outdated
Comment thread src/Controls/tests/DeviceTests/Elements/Shell/ShellTests.iOS.cs Outdated
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 926cb3a5-a29d-45bd-8c25-35da659b8dfd
@kubaflo

This comment has been minimized.

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run maui-pr-devicetests

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/azp run maui-pr-uitests

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

1 similar comment
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 57 out of 57 changed files in this pull request and generated no new comments.

@kubaflo

kubaflo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/review tests

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

AI Review Summary

@kubaflo — new AI review results are available based on this last commit: a6a6559.

Gate Passed Confidence Low Platform iOS


🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix

Gate Result: ✅ PASSED

Platform: IOS · Base: main · Merge base: 657fb516

Test Without Fix (expect FAIL) With Fix (expect PASS)
📱 MemoryTests (TableViewSourceReplacementUnsubscribesPreviousSource, ContextActionsCellDisposalUnsubscribesCell, SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement) Category=Memory ✅ FAIL — 360s ✅ PASS — 199s
📱 ShellTests (ShellSectionDelegatesDoNotRetainRenderer, DisposedShellSectionRootIgnoresLateLayout, DisposedShellFlyoutContentIgnoresLateLifecycleCallbacks, DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers, DisposedShellTableSourceClearsScrolledSubscribers, DisconnectShellDuringCurrentItemChangeDoesNotRecreateRenderer, StaleShellFlyoutBackgroundImageIsDisposed, Disconnect, Complete, DisposeForTest) Category=Shell ✅ FAIL — 80s ✅ PASS — 67s
🔴 Without fix — 📱 MemoryTests (TableViewSourceReplacementUnsubscribesPreviousSource, ContextActionsCellDisposalUnsubscribesCell, SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement): FAIL ✅ · 360s

(truncated to last 15,000 chars)

Maui.Controls.DeviceTests[7127:47912]   NUNIT_SKIPPED_METHODS = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9232870] 2026-07-23 02:36:08.915952-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]   NUNIT_SKIPPED_CLASSES = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9232970] 2026-07-23 02:36:08.916013-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]   headlessrunner = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9832880] 2026-07-23 02:36:08.973381-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Runner executing:	Run everything]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9833390] 2026-07-23 02:36:08.974363-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [arm64:	iOS v26.0]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9833470] 2026-07-23 02:36:08.974577-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Device Name:	iPhone 11 Pro]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9833550] 2026-07-23 02:36:08.974755-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Device UDID:	3c49784bcead46e1ab7cc9f605076119]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9833600] 2026-07-23 02:36:08.974834-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Device Locale:	en-US]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9935360] 2026-07-23 02:36:08.983420-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Device Date/Time:	7/23/2026 2:36:08 AM]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9936010] 2026-07-23 02:36:08.983904-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [Bundle:	com.microsoft.maui.controls.devicetests]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9936570] 2026-07-23 02:36:08.984961-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Skipping categories: Category=Accessibility, Category=Application, Category=Behavior, Category=Border, Category=BoxView, Category=Button, Category=CarouselView, Category=CheckBox, Category=CollectionView, Category=Compatibility, Category=ContentView, Category=DatePicker, Category=Dispatcher, Category=Editor, Category=Element, Category=Entry, Category=FlexLayout, Category=FlyoutPage, Category=Frame, Category=Gesture, Category=HybridWebView, Category=Image, Category=Label, Category=Layout, Category=Lifecycle, Category=ListView, Category=Map, Category=MenuFlyout, Category=Mapper, Category=Modal, Category=NavigationPage, Category=Page, Category=Path, Category=Picker, Category=RadioButton, Category=RefreshView, Category=ScrollView, Category=SearchBar, Category=Shape, Category=Shell, Category=Slider, Category=SwipeView, Category=TabbedPage, Category=TextInput, Category=Toolbar, Category=TemplatedView, Category=View, Category=VisualElement, Category=VisualElementTree, Category=WebView, Category=Window, Category=WindowOverlay, Category=Xaml
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:08.9937260] 2026-07-23 02:36:08.989976-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Using reflection-based Xunit runner (threaded execution)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:09.0239020] 2026-07-23 02:36:09.015128-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Discovering: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/AF96444A-E952-4C7D-B9CB-D6B498650878/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (method display = ClassAndMethod, method display options = None)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:09.4606920] 2026-07-23 02:36:09.460314-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Discovered:  /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/AF96444A-E952-4C7D-B9CB-D6B498650878/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (found 15 of 467 test cases)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:09.4682910] 2026-07-23 02:36:09.467866-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Starting:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/AF96444A-E952-4C7D-B9CB-D6B498650878/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8922210] 2026-07-23 02:36:17.891567-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [FAIL] ContextActionsCell Disposal Unsubscribes Cell
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923090] Assert.DoesNotContain() Failure: Filter matched in collection
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923210]              ↓ (pos 0)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923270] 2026-07-23 02:36:17.891681-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Collection: [PropertyChangedEventHandler { Method = Void OnCellPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs), Target = [···] }]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923320]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.<>c.<ContextActionsCellDisposalUnsubscribesCell>b__12_0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923390]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass1_0.<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923630] 2026-07-23 02:36:17.891822-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass0_0`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923720] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923840] 2026-07-23 02:36:17.891955-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.ContextActionsCellDisposalUnsubscribesCell()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:17.8923940] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6402450] 2026-07-23 02:36:21.639905-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [FAIL] TableView Source Replacement Unsubscribes Previous Source
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6402790] Assert.Single() Failure: The collection contained 2 items
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6402870] 2026-07-23 02:36:21.640074-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Collection: [EventHandler { Method = Void <.ctor>b__12_0(System.Object, System.EventArgs), Target = <Microsoft_Maui_Controls_Handlers_Compatibility_TableViewModelRenderer: 0x6000000aa300> }, EventHandler { Method = Void <.ctor>b__12_0(System.Object, System.EventArgs), Target = <Microsoft_Maui_Controls_Handlers_Compatibility_UnEvenTableViewModelRenderer: 0x6000000aab60> }]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6403090] 2026-07-23 02:36:21.640181-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.<TableViewSourceReplacementUnsubscribesPreviousSource>b__11_0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6403130]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass1_0.<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6404330] 2026-07-23 02:36:21.640282-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass0_0`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6404690] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6404840] 2026-07-23 02:36:21.640362-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.TableViewSourceReplacementUnsubscribesPreviousSource()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:21.6404900] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9302290] 2026-07-23 02:36:28.929647-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] [FAIL] Secondary Toolbar Item Disposal Unsubscribes After Custom View Replacement
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9304750] System.InvalidCastException : Arg_InvalidCastException
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9305100] 2026-07-23 02:36:28.929969-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Controls.Compatibility.Platform.iOS.ToolbarItemExtensions.SecondaryToolbarItem.UpdateText(ToolbarItem item)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9305310]    at Microsoft.Maui.Controls.Compatibility.Platform.iOS.ToolbarItemExtensions.SecondaryToolbarItem.OnPropertyChanged(Object sender, PropertyChangedEventArgs e)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9305360]    at Microsoft.Maui.Controls.BindableObject.OnPropertyChanged(String propertyName)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9305450] 2026-07-23 02:36:28.930185-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Controls.Element.OnPropertyChanged(String propertyName)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9305560]    at Microsoft.Maui.Controls.BindableObject.OnBindablePropertySet(BindableProperty property, Object original, Object value, Boolean didChange, Boolean willFirePropertyChanged)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9306320] 2026-07-23 02:36:28.930330-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Controls.Element.OnBindablePropertySet(BindableProperty property, Object original, Object value, Boolean changed, Boolean willFirePropertyChanged)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9306970] 2026-07-23 02:36:28.930545-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Controls.BindableObject.SetValueActual(BindableProperty property, BindablePropertyContext context, Object value, Boolean currentlyApplying, SetValueFlags attributes, SetterSpecificity specificity, Boolean silent)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9308480] 2026-07-23 02:36:28.930708-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Controls.BindableObject.SetValueCore(BindableProperty property, Object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes, SetterSpecificity specificity)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9308580]    at Microsoft.Maui.Controls.BindableObject.SetValue(BindableProperty property, Object value)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9308730]    at Microsoft.Maui.Controls.MenuItem.set_Text(String value)
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9310030] 2026-07-23 02:36:28.930798-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.<>c.<SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement>b__13_0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9310550]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass1_0.<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9310860] 2026-07-23 02:36:28.930870-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass0_0`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9311020] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9311500] 2026-07-23 02:36:28.930979-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]    at Microsoft.Maui.DeviceTests.Memory.MemoryTests.SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement()
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9311570] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9328730] 2026-07-23 02:36:28.932627-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Finished:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/AF96444A-E952-4C7D-B9CB-D6B498650878/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9338110] 2026-07-23 02:36:28.933492-0700 Microsoft.Maui.Controls.DeviceTests[7127:49178] Tests run: 59 Passed: 55 Inconclusive: 0 Failed: 3 Ignored: 1
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9364030] 2026-07-23 02:36:28.936169-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9364960] 2026-07-23 02:36:28.936297-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912]
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9365290] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9365350] Tests run: 59 Passed: 55 Inconclusive: 0 Failed: 3 Ignored: 0 Skipped: 1
�[40m�[37mdbug�[39m�[22m�[49m: [02:36:28.9368640] 2026-07-23 02:36:28.936704-0700 Microsoft.Maui.Controls.DeviceTests[7127:47912] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Data/Application/BBFC21B4-4A56-415E-9CB8-846E7EBA259F/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "H16WP4KY95-1",
        "exitCode": 1,
        "exitCodeName": "TESTS_FAILED",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-3E231176-1D1F-43BF-B31F-141714850176.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260723_023539.log",
            "type": "devicelist"
          },
          {
            "name": "test-ios-simulator-64_26.0-20260723_023547.log",
            "type": "testlog"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Controls.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.controls.devicetests.log",
            "type": "applicationlog"
          },
          {
            "name": "xunit-test-ios-simulator-64_26.0-20260723_023547.xml",
            "type": "xmllog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 1 (TESTS_FAILED)
  Passed: 0
  Failed: 0
  Tests completed with exit code: 1

🟢 With fix — 📱 MemoryTests (TableViewSourceReplacementUnsubscribesPreviousSource, ContextActionsCellDisposalUnsubscribesCell, SecondaryToolbarItemDisposalUnsubscribesAfterCustomViewReplacement): PASS ✅ · 199s

(truncated to last 15,000 chars)

bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219680] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219760]    at Microsoft.Maui.DeviceTests.ShellTests.DisposedShellTableSourceClearsScrolledSubscribers()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219810] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2295600] 2026-07-23 02:37:48.227460-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x1112e5000>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353220] 2026-07-23 02:37:48.235047-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [FAIL] Disconnect Shell Detaches Current Item Renderer Before Disposal
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353390] System.NullReferenceException : Arg_NullReferenceException
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353750] 2026-07-23 02:37:48.235230-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Controls.Platform.Compatibility.ShellFlyoutRenderer.Microsoft.Maui.Controls.Platform.Compatibility.IShellFlyoutRenderer.AttachFlyout(IShellContext context, UIViewController content)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353940]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.get_FlyoutRenderer()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2357930] 2026-07-23 02:37:48.235318-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.Dispose(Boolean disposing)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358010]    at Foundation.NSObject.Dispose()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358050]    at Microsoft.Maui.DeviceTests.ShellTests.<>c.<DisconnectShellDetachesCurrentItemRendererBeforeDisposal>b__75_0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358080]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass1_0.<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358110] 2026-07-23 02:37:48.235406-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass0_0`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358140] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358150] 2026-07-23 02:37:48.235511-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.8520950] 2026-07-23 02:37:48.851758-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [Snapshotting] Snapshotting a view (0x13d2264b0, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:49.9985880] 2026-07-23 02:37:49.998332-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Finished:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/835129C4-C102-4E68-A60F-1CC3A7D49B9F/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:49.9992100] 2026-07-23 02:37:49.999061-0700 Microsoft.Maui.Controls.DeviceTests[7357:51211] Tests run: 215 Passed: 205 Inconclusive: 0 Failed: 10 Ignored: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0028410] 2026-07-23 02:37:50.002657-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029480] 2026-07-23 02:37:50.002788-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029600] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029650] Tests run: 215 Passed: 205 Inconclusive: 0 Failed: 10 Ignored: 0 Skipped: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0033210] 2026-07-23 02:37:50.003198-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Data/Application/2A0EF2CF-7C4D-4858-9DA9-92DF4D199D3D/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:56.7671770] xcrun simctl launch --console --terminate-running-process 3E231176-1D1F-43BF-B31F-141714850176 com.microsoft.maui.controls.devicetests
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:57.3567200] com.microsoft.maui.controls.devicetests: 8096
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.2587730] 2026-07-23 02:40:58.258340-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [UIKit App Config] `UIScene` lifecycle will soon be required. Failure to adopt will result in an assert in the future.
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.2942740] 2026-07-23 02:40:58.293911-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] TestFilter: Category=Memory
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3048060] 2026-07-23 02:40:58.304530-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_AUTOSTART = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3048590] 2026-07-23 02:40:58.304638-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_AUTOEXIT = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3049040] 2026-07-23 02:40:58.304735-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_ENABLE_NETWORK = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3050740] 2026-07-23 02:40:58.304887-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   DISABLE_SYSTEM_PERMISSION_TESTS = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3051460] 2026-07-23 02:40:58.304980-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_HOSTNAME = '127.0.0.1'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3051690] 2026-07-23 02:40:58.305049-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_TRANSPORT = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3051860] 2026-07-23 02:40:58.305098-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_LOG_FILE = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3052480] 2026-07-23 02:40:58.305141-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_HOSTPORT = '50919'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3053930] 2026-07-23 02:40:58.305192-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   USE_TCP_TUNNEL = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3054750] 2026-07-23 02:40:58.305314-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   RUN_END_TAG = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3055230] 2026-07-23 02:40:58.305412-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_ENABLE_XML_OUTPUT = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3055870] 2026-07-23 02:40:58.305472-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_ENABLE_XML_MODE = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3056190] 2026-07-23 02:40:58.305522-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_XML_VERSION = 'xUnit'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3057680] 2026-07-23 02:40:58.305631-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_SORTNAMES = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3058350] 2026-07-23 02:40:58.305729-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_RUN_ALL = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3059130] 2026-07-23 02:40:58.305777-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_SKIPPED_METHODS = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3059930] 2026-07-23 02:40:58.305872-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   NUNIT_SKIPPED_CLASSES = ''
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3060740] 2026-07-23 02:40:58.305969-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]   headlessrunner = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3310110] 2026-07-23 02:40:58.330788-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Runner executing:	Run everything]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3313530] 2026-07-23 02:40:58.331173-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [arm64:	iOS v26.0]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3314060] 2026-07-23 02:40:58.331259-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Device Name:	iPhone 11 Pro]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3316420] 2026-07-23 02:40:58.331518-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Device UDID:	8979f3d23ff64f20ab53a60f27d100bf]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3318290] 2026-07-23 02:40:58.331597-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Device Locale:	en-US]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3350520] 2026-07-23 02:40:58.334850-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Device Date/Time:	7/23/2026 2:40:58 AM]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3352320] 2026-07-23 02:40:58.335058-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] [Bundle:	com.microsoft.maui.controls.devicetests]
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3356490] 2026-07-23 02:40:58.335520-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Skipping categories: Category=Accessibility, Category=Application, Category=Behavior, Category=Border, Category=BoxView, Category=Button, Category=CarouselView, Category=CheckBox, Category=CollectionView, Category=Compatibility, Category=ContentView, Category=DatePicker, Category=Dispatcher, Category=Editor, Category=Element, Category=Entry, Category=FlexLayout, Category=FlyoutPage, Category=Frame, Category=Gesture, Category=HybridWebView, Category=Image, Category=Label, Category=Layout, Category=Lifecycle, Category=ListView, Category=Map, Category=MenuFlyout, Category=Mapper, Category=Modal, Category=NavigationPage, Category=Page, Category=Path, Category=Picker, Category=RadioButton, Category=RefreshView, Category=ScrollView, Category=SearchBar, Category=Shape, Category=Shell, Category=Slider, Category=SwipeView, Category=TabbedPage, Category=TextInput, Category=Toolbar, Category=TemplatedView, Category=View, Category=VisualElement, Category=VisualElementTree, Category=WebView, Category=Window, Category=WindowOverlay, Category=Xaml
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3382080] 2026-07-23 02:40:58.338100-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Using reflection-based Xunit runner (threaded execution)
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.3477390] 2026-07-23 02:40:58.347543-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Discovering: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/0F29C40D-D420-4236-A4AC-223FD715347C/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (method display = ClassAndMethod, method display options = None)
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.5254840] 2026-07-23 02:40:58.525038-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Discovered:  /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/0F29C40D-D420-4236-A4AC-223FD715347C/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (found 15 of 467 test cases)
�[40m�[37mdbug�[39m�[22m�[49m: [02:40:58.5292080] 2026-07-23 02:40:58.528949-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Starting:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/0F29C40D-D420-4236-A4AC-223FD715347C/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7399300] 2026-07-23 02:41:16.739664-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Finished:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/0F29C40D-D420-4236-A4AC-223FD715347C/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7406870] 2026-07-23 02:41:16.740575-0700 Microsoft.Maui.Controls.DeviceTests[8096:58522] Tests run: 59 Passed: 58 Inconclusive: 0 Failed: 0 Ignored: 1
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7451550] 2026-07-23 02:41:16.744998-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7452980] 2026-07-23 02:41:16.745094-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477]
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7453410] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7453560] Tests run: 59 Passed: 58 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 1
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:16.7456180] 2026-07-23 02:41:16.745499-0700 Microsoft.Maui.Controls.DeviceTests[8096:58477] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Data/Application/7477C1C1-22C4-4611-BE47-EF4321F20DD7/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "H16WP4KY95-1",
        "exitCode": 0,
        "exitCodeName": "SUCCESS",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-3E231176-1D1F-43BF-B31F-141714850176.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260723_024051.log",
            "type": "devicelist"
          },
          {
            "name": "test-ios-simulator-64_26.0-20260723_024055.log",
            "type": "testlog"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Controls.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.controls.devicetests.log",
            "type": "applicationlog"
          },
          {
            "name": "xunit-test-ios-simulator-64_26.0-20260723_024055.xml",
            "type": "xmllog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 0
  Passed: 0
  Failed: 10
  Tests completed successfully

🔴 Without fix — 📱 ShellTests (ShellSectionDelegatesDoNotRetainRenderer, DisposedShellSectionRootIgnoresLateLayout, DisposedShellFlyoutContentIgnoresLateLifecycleCallbacks, DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers, DisposedShellTableSourceClearsScrolledSubscribers, DisconnectShellDuringCurrentItemChangeDoesNotRecreateRenderer, StaleShellFlyoutBackgroundImageIsDisposed, Disconnect, Complete, DisposeForTest): FAIL ✅ · 80s

(truncated to last 15,000 chars)

200080] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:42.2200100] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:43.8934150] 2026-07-23 02:37:43.893165-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [RTILog] -[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:]  perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:44.8204200] 2026-07-23 02:37:44.820111-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [Snapshotting] Snapshotting a view (0x139fc83e0, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:44.8204550] 2026-07-23 02:37:44.820292-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [Snapshotting] Snapshotting a view (0x139fcc120, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:45.4429530] 2026-07-23 02:37:45.442630-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [ViewController] Calling -viewWillAppear: directly on a view controller is not supported, and may result in out-of-order callbacks and other inconsistent behavior. Use the -beginAppearanceTransition:animated: and -endAppearanceTransition APIs on UIViewController to manually drive appearance callbacks instead. Make a symbolic breakpoint at UIViewControllerAlertForAppearanceCallbackMisuse to catch this in the debugger. View controller: <Microsoft_Maui_Controls_Platform_Compatibility_ShellFlyoutContentRenderer: 0x13a268cf0>
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:45.4453400] 2026-07-23 02:37:45.442977-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [ViewController] Calling -viewWillDisappear: directly on a view controller is not supported, and may result in out-of-order callbacks and other inconsistent behavior. Use the -beginAppearanceTransition:animated: and -endAppearanceTransition APIs on UIViewController to manually drive appearance callbacks instead. Make a symbolic breakpoint at UIViewControllerAlertForAppearanceCallbackMisuse to catch this in the debugger. View controller: <Microsoft_Maui_Controls_Platform_Compatibility_ShellFlyoutContentRenderer: 0x13a268cf0>
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4873680] 2026-07-23 02:37:46.487032-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [FAIL] Disconnect Shell Cancels Active Item Transition Before Disposal
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4873960] Assert.Same() Failure: Values are not the same instance
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874030] Expected: Task<VoidTaskResult,<SetCurrentShellItemControllerAsync>d__60> { Status = RanToCompletion }
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874220] 2026-07-23 02:37:46.487139-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Actual:   Task { Status = RanToCompletion }
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874290]    at Microsoft.Maui.DeviceTests.ShellTests.<>c.<<DisconnectShellCancelsActiveItemTransitionBeforeDisposal>b__76_0>d.MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874340] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874420] 2026-07-23 02:37:46.487319-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass3_0.<<DispatchAsync>b__0>d.MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4874470] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4875380] 2026-07-23 02:37:46.487398-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass2_0`1.<<DispatchAsync>b__0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4875460] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:46.4875500] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200090] 2026-07-23 02:37:47.619667-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [FAIL] Disposed Shell Table Source Clears Scrolled Subscribers
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200390] Assert.False() Failure
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200420] Expected: False
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200570] Actual:   True
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200600]    at Microsoft.Maui.DeviceTests.ShellTests.<>c.<DisposedShellTableSourceClearsScrolledSubscribers>b__72_0(ShellRenderer handler)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6200970] 2026-07-23 02:37:47.619905-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.DeviceTests.ControlsHandlerTestBase.<>c__DisplayClass13_0`1[[Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer, Microsoft.Maui.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].<CreateHandlerAndAddToWindow>b__0(ShellRenderer handler)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6202300] 2026-07-23 02:37:47.620067-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.DeviceTests.ControlsHandlerTestBase.<>c__DisplayClass17_1`1.<<CreateHandlerAndAddToWindow>b__1>d[[Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer, Microsoft.Maui.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6202410] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6218530] 2026-07-23 02:37:47.620230-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.DeviceTests.ControlsHandlerTestBase.<>c__DisplayClass31_0`1.<<SetupWindowForTests>b__0>d[[Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer, Microsoft.Maui.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6218680] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6218760] 2026-07-23 02:37:47.620355-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.DeviceTests.ControlsHandlerTestBase.<>c__DisplayClass31_0`1.<<SetupWindowForTests>b__0>d[[Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer, Microsoft.Maui.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6218810] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6218830] 2026-07-23 02:37:47.620510-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass3_0.<<DispatchAsync>b__0>d.MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219290] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219370] 2026-07-23 02:37:47.620630-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass2_0`1.<<DispatchAsync>b__0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219430] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219480] 2026-07-23 02:37:47.620774-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.DeviceTests.ControlsHandlerTestBase.<>c__DisplayClass17_0`1.<<CreateHandlerAndAddToWindow>b__0>d[[Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer, Microsoft.Maui.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219540] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219580] 2026-07-23 02:37:47.621003-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass3_0.<<DispatchAsync>b__0>d.MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219610] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219650] 2026-07-23 02:37:47.621098-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass2_0`1.<<DispatchAsync>b__0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219680] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219760]    at Microsoft.Maui.DeviceTests.ShellTests.DisposedShellTableSourceClearsScrolledSubscribers()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:47.6219810] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2295600] 2026-07-23 02:37:48.227460-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x1112e5000>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353220] 2026-07-23 02:37:48.235047-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [FAIL] Disconnect Shell Detaches Current Item Renderer Before Disposal
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353390] System.NullReferenceException : Arg_NullReferenceException
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353750] 2026-07-23 02:37:48.235230-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Controls.Platform.Compatibility.ShellFlyoutRenderer.Microsoft.Maui.Controls.Platform.Compatibility.IShellFlyoutRenderer.AttachFlyout(IShellContext context, UIViewController content)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2353940]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.get_FlyoutRenderer()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2357930] 2026-07-23 02:37:48.235318-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.Dispose(Boolean disposing)
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358010]    at Foundation.NSObject.Dispose()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358050]    at Microsoft.Maui.DeviceTests.ShellTests.<>c.<DisconnectShellDetachesCurrentItemRendererBeforeDisposal>b__75_0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358080]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass1_0.<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358110] 2026-07-23 02:37:48.235406-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]    at Microsoft.Maui.Dispatching.DispatcherExtensions.<>c__DisplayClass0_0`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<DispatchAsync>b__0()
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358140] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.2358150] 2026-07-23 02:37:48.235511-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:48.8520950] 2026-07-23 02:37:48.851758-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] [Snapshotting] Snapshotting a view (0x13d2264b0, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:49.9985880] 2026-07-23 02:37:49.998332-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Finished:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/835129C4-C102-4E68-A60F-1CC3A7D49B9F/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:49.9992100] 2026-07-23 02:37:49.999061-0700 Microsoft.Maui.Controls.DeviceTests[7357:51211] Tests run: 215 Passed: 205 Inconclusive: 0 Failed: 10 Ignored: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0028410] 2026-07-23 02:37:50.002657-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029480] 2026-07-23 02:37:50.002788-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117]
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029600] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0029650] Tests run: 215 Passed: 205 Inconclusive: 0 Failed: 10 Ignored: 0 Skipped: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:37:50.0033210] 2026-07-23 02:37:50.003198-0700 Microsoft.Maui.Controls.DeviceTests[7357:51117] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Data/Application/2A0EF2CF-7C4D-4858-9DA9-92DF4D199D3D/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "H16WP4KY95-1",
        "exitCode": 1,
        "exitCodeName": "TESTS_FAILED",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-3E231176-1D1F-43BF-B31F-141714850176.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260723_023649.log",
            "type": "devicelist"
          },
          {
            "name": "test-ios-simulator-64_26.0-20260723_023654.log",
            "type": "testlog"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Controls.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.controls.devicetests.log",
            "type": "applicationlog"
          },
          {
            "name": "xunit-test-ios-simulator-64_26.0-20260723_023654.xml",
            "type": "xmllog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 1 (TESTS_FAILED)
  Passed: 0
  Failed: 10
  Tests completed with exit code: 1

🟢 With fix — 📱 ShellTests (ShellSectionDelegatesDoNotRetainRenderer, DisposedShellSectionRootIgnoresLateLayout, DisposedShellFlyoutContentIgnoresLateLifecycleCallbacks, DisposedShellFlyoutContentDisconnectsHeaderAndFooterHandlers, DisposedShellTableSourceClearsScrolledSubscribers, DisconnectShellDuringCurrentItemChangeDoesNotRecreateRenderer, StaleShellFlyoutBackgroundImageIsDisposed, Disconnect, Complete, DisposeForTest): PASS ✅ · 67s

(truncated to last 15,000 chars)

w, Category=Image, Category=Label, Category=Layout, Category=Lifecycle, Category=ListView, Category=Map, Category=MenuFlyout, Category=Mapper, Category=Memory, Category=Modal, Category=NavigationPage, Category=Page, Category=Path, Category=Picker, Category=RadioButton, Category=RefreshView, Category=ScrollView, Category=SearchBar, Category=Shape, Category=Slider, Category=SwipeView, Category=TabbedPage, Category=TextInput, Category=Toolbar, Category=TemplatedView, Category=View, Category=VisualElement, Category=VisualElementTree, Category=WebView, Category=Window, Category=WindowOverlay, Category=Xaml
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.5685420] 2026-07-23 02:41:37.568397-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Using reflection-based Xunit runner (threaded execution)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.5820440] 2026-07-23 02:41:37.581762-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Discovering: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/1BD40187-9C48-44F2-B39C-729048930E09/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (method display = ClassAndMethod, method display options = None)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.7410860] 2026-07-23 02:41:37.740798-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Discovered:  /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/1BD40187-9C48-44F2-B39C-729048930E09/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (found 63 of 467 test cases)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.7444960] 2026-07-23 02:41:37.744352-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Starting:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/1BD40187-9C48-44F2-B39C-729048930E09/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.7660750] 2026-07-23 02:41:37.765805-0700 Microsoft.Maui.Controls.DeviceTests[8230:60517] [General] Failed to send CA Event for app launch measurements for ca_event_type: 0 event_name: com.apple.app_launch_measurement.FirstFramePresentationMetric
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:37.9516720] 2026-07-23 02:41:37.951400-0700 Microsoft.Maui.Controls.DeviceTests[8230:60517] [General] Failed to send CA Event for app launch measurements for ca_event_type: 1 event_name: com.apple.app_launch_measurement.ExtendedLaunchMetrics
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2533850] 2026-07-23 02:41:40.252660-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x113824e00>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2604340] 2026-07-23 02:41:40.260110-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Marshaling managed exception
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2606040] 2026-07-23 02:41:40.260447-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Exception: System.InvalidOperationException: Active Shell Item not set. Have you added any Shell Items to your Shell?
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2606200]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.SetupCurrentShellItem()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2606620] 2026-07-23 02:41:40.260522-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2609830] 2026-07-23 02:41:40.260704-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Mode: Default
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2613820] 2026-07-23 02:41:40.261212-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Marshaling Objective-C exception
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2614120] 2026-07-23 02:41:40.261279-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Exception: Active Shell Item not set. Have you added any Shell Items to your Shell? (System.InvalidOperationException)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2614240]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.SetupCurrentShellItem()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2614310] 2026-07-23 02:41:40.261336-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2615600] 2026-07-23 02:41:40.261404-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Mode: ThrowManagedException
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2617390] 2026-07-23 02:41:40.261579-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Marshaling managed exception
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2618900] 2026-07-23 02:41:40.261740-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Exception: System.InvalidOperationException: Active Shell Item not set. Have you added any Shell Items to your Shell?
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2619000]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.SetupCurrentShellItem()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2620070] 2026-07-23 02:41:40.261868-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2620180] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2620330]    at ObjCRuntime.Runtime.RethrowManagedException(IntPtr )
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2621670] 2026-07-23 02:41:40.262019-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at ObjCRuntime.Runtime.rethrow_managed_exception(IntPtr original_exception_gchandle, IntPtr* exception_gchandle)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2621740]    at UIKit.UIViewController.get_View()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2621770]    at Microsoft.Maui.Controls.Platform.Compatibility.ShellFlyoutRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2622410] 2026-07-23 02:41:40.262109-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Mode: Default
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2625370] 2026-07-23 02:41:40.262333-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Marshaling Objective-C exception
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2625430] 2026-07-23 02:41:40.262425-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Exception: Active Shell Item not set. Have you added any Shell Items to your Shell? (System.InvalidOperationException)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2625520]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.SetupCurrentShellItem()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2625950] 2026-07-23 02:41:40.262454-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at Microsoft.Maui.Controls.Handlers.Compatibility.ShellRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2626160] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2626290]    at ObjCRuntime.Runtime.RethrowManagedException(IntPtr )
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2627070] 2026-07-23 02:41:40.262562-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]    at ObjCRuntime.Runtime.rethrow_managed_exception(IntPtr original_exception_gchandle, IntPtr* exception_gchandle)
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2627280]    at UIKit.UIViewController.get_View()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2627350]    at Microsoft.Maui.Controls.Platform.Compatibility.ShellFlyoutRenderer.ViewDidLoad()
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:40.2627610] 2026-07-23 02:41:40.262629-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]     Mode: ThrowManagedException
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:45.0374320] 2026-07-23 02:41:45.037127-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x10f07c000>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:45.2716010] 2026-07-23 02:41:45.271196-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x10ea8c600>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:50.0057710] 2026-07-23 02:41:50.005410-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] [TableView] Warning once only: UITableView was told to layout its visible cells and other contents without being in the view hierarchy (the table view or one of its superviews has not been added to a window). This may cause bugs by forcing views inside the table view to load and perform layout without accurate information (e.g. table view bounds, trait collection, layout margins, safe area insets, etc), and will also cause unnecessary performance overhead due to extra layout passes. Make a symbolic breakpoint at UITableViewAlertForLayoutOutsideViewHierarchy to catch this in the debugger and see what caused this to occur, so you can avoid this action altogether if possible, or defer it until the table view has been added to a window. Table view: <Microsoft_Maui_Controls_Platform_Compatibility_ShellTableViewController_AccessibilityNeutralTableView: 0x1138a1200; baseClass = UITableView; frame = (0 0; 300 812); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x600000e458f0>; backgroundColor = UIExtendedGrayColorSpace 0 0; layer = <CALayer: 0x600000e45a40>; contentOffset: {0, -44}; contentSize: {300, 44}; adjustedContentInset: {44, 0, 0, 0}; dataSource: <Microsoft_Maui_Controls_Platform_Compatibility_ShellTableViewSource: 0x6000000ffba0>>
�[40m�[37mdbug�[39m�[22m�[49m: [02:41:55.5418150] 2026-07-23 02:41:55.541334-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x10ea07400>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:18.8637100] 2026-07-23 02:42:18.863327-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] [RTILog] -[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:]  perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:19.7918510] 2026-07-23 02:42:19.791499-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] [Snapshotting] Snapshotting a view (0x138613b90, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:19.7919100] 2026-07-23 02:42:19.791708-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] [Snapshotting] Snapshotting a view (0x138617810, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:21.9990540] 2026-07-23 02:42:21.998628-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Unbalanced calls to begin/end appearance transitions for <Microsoft_Maui_Controls_Platform_Compatibility_ShellSectionRenderer: 0x1149dc800>.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:22.6084360] 2026-07-23 02:42:22.607995-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] [Snapshotting] Snapshotting a view (0x1381235e0, _TtCC5UIKit19NavigationButtonBar15ItemWrapperView) that has not been rendered at least once requires afterScreenUpdates:YES.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7541620] 2026-07-23 02:42:23.753735-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Finished:    /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Bundle/Application/1BD40187-9C48-44F2-B39C-729048930E09/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7550150] 2026-07-23 02:42:23.754771-0700 Microsoft.Maui.Controls.DeviceTests[8230:60539] Tests run: 215 Passed: 215 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7596570] 2026-07-23 02:42:23.759431-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7597060] 2026-07-23 02:42:23.759550-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502]
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7597250] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7597310] Tests run: 215 Passed: 215 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 0
�[40m�[37mdbug�[39m�[22m�[49m: [02:42:23.7600560] 2026-07-23 02:42:23.759838-0700 Microsoft.Maui.Controls.DeviceTests[8230:60502] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/3E231176-1D1F-43BF-B31F-141714850176/data/Containers/Data/Application/2DB507FD-4E1E-43A7-8533-A95CF22E3122/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "H16WP4KY95-1",
        "exitCode": 0,
        "exitCodeName": "SUCCESS",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-3E231176-1D1F-43BF-B31F-141714850176.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260723_024130.log",
            "type": "devicelist"
          },
          {
            "name": "test-ios-simulator-64_26.0-20260723_024135.log",
            "type": "testlog"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Controls.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.controls.devicetests.log",
            "type": "applicationlog"
          },
          {
            "name": "xunit-test-ios-simulator-64_26.0-20260723_024135.xml",
            "type": "xmllog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 0
  Passed: 0
  Failed: 10
  Tests completed successfully

📁 Fix files reverted (54 files)
  • src/Controls/src/Core/Compatibility/Handlers/FlyoutPage/iOS/PhoneFlyoutPageRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/CellTableViewCell.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ContextActionCell.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ContextScrollViewDelegate.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/EntryCellRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ViewCellRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/NavigationPage/iOS/NavigationRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutContentRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutHeaderContainer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellFlyoutRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellItemRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellItemTransition.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSearchResultsRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootHeader.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewSource.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerCell.cs
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerView.cs
  • src/Controls/src/Core/Compatibility/Handlers/TabbedPage/iOS/TabbedRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/TableView/iOS/TableViewModelRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/TableView/iOS/TableViewRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/VisualElementRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/iOS/FrameRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/iOS/ViewRenderer.cs
  • src/Controls/src/Core/Compatibility/Handlers/iOS/VisualElementRenderer.cs
  • src/Controls/src/Core/Compatibility/iOS/Extensions/ToolbarItemExtensions.cs
  • src/Controls/src/Core/Compatibility/iOS/GlobalCloseContextGestureRecognizer.cs
  • src/Controls/src/Core/Compatibility/iOS/NativeViewPropertyListener.cs
  • src/Controls/src/Core/Controls.Core.csproj
  • src/Controls/src/Core/Handlers/Items/iOS/CarouselViewController.cs
  • src/Controls/src/Core/Handlers/Items/iOS/DefaultCell.cs
  • src/Controls/src/Core/Handlers/Items/iOS/GroupableItemsViewController.cs
  • src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs
  • src/Controls/src/Core/Handlers/Items/iOS/ItemsViewDelegator.cs
  • src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs
  • src/Controls/src/Core/Handlers/Items/iOS/ReorderableItemsViewController.cs
  • src/Controls/src/Core/Handlers/Items/iOS/StructuredItemsViewController.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/CarouselViewController2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/DefaultCell2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/GroupableItemsViewController2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewDelegator2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/ReorderableItemsViewController2.cs
  • src/Controls/src/Core/Handlers/Items2/iOS/TemplatedCell2.cs
  • src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.iOS.cs
  • src/Controls/src/Core/Platform/iOS/ControlsModalWrapper.cs
  • src/Controls/src/Core/Platform/iOS/CustomPressGestureRecognizer.cs
  • src/Controls/src/Core/Platform/iOS/DragAndDropDelegate.cs
  • src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
  • src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt

📱 UI Tests — CollectionView,ListView,Shell,TableView

Detected UI test categories: CollectionView,ListView,Shell,TableView

Deep UI tests — 633 passed, 203 failed across 4 categories on platform-pool agent (replaces in-process counts above).

🧪 UI Test Execution Results (deep, platform pool)

Category Tests Snapshot diffs
CollectionView 335/427 (89 ❌) 174 diff PNGs
ListView 89/99 (8 ❌) 16 diff PNGs
Shell 193/312 (104 ❌) 208 diff PNGs
TableView 16/18 (2 ❌) 4 diff PNGs
CollectionView — 89 failed tests
VerifyScrollToByIndexWithEndPositionAndVerticalList_Carrot
System.InvalidOperationException : 
Snapshot different than baseline: VerifyScrollToByIndexWithEndPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyScrollToByIndexWithEndPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't 
...
VerifyScrollToByIndexWithMakeVisiblePositionAndVerticalList_Carrot
System.InvalidOperationException : 
Snapshot different than baseline: VerifyScrollToByIndexWithMakeVisiblePositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyScrollToByIndexWithMakeVisiblePositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has chan
...
CVHorizontalLinearItemsLayoutItemSpacing
System.InvalidOperationException : 
Snapshot different than baseline: CVHorizontalLinearItemsLayoutItemSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CVHorizontalLinearItemsLayoutItemSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline i
...
CollectionViewMeasureFirstItem
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewMeasureFirstItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewMeasureFirstItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attac
...
CollectionViewGroupFooterTemplateShouldNotCrash
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewGroupFooterTemplateShouldNotCrash.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewGroupFooterTemplateShouldNotCrash.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update 
...
CollectionViewSelectedItemBackgroundShouldPersistAfterModalNavigation
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewSelectedItemBackgroundShouldPersistAfterModalNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewSelectedItemBackgroundShouldPersistAfterModalNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline ha
...
VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot
System.InvalidOperationException : 
Snapshot different than baseline: VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this is
...
VerifyModelItemsGroupedListWhenMultipleModePreSelection
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.CollectionView_ItemsSourceFeatureTests.VerifyModelItemsGroupedListWhenMultipleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 774
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.Interp
...
ReorderBetweenGroupsShouldNotOccurWhenCanMixGroupsIsFalse
System.InvalidOperationException : 
Snapshot different than baseline: ReorderBetweenGroupsShouldNotOccurWhenCanMixGroupsIsFalse.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ReorderBetweenGroupsShouldNotOccurWhenCanMixGroupsIsFalse.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a 
...
VerifySelectionModeMultipleWhenProgrammaticSelectionWorksWithVerticalList
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.CollectionView_SelectionFeatureTests.VerifySelectionModeMultipleWhenProgrammaticSelectionWorksWithVerticalList() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs:line 533
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBase
...
AddHeaderFooterAtRuntime
System.InvalidOperationException : 
Snapshot different than baseline: AddHeaderFooterAtRuntime.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: AddHeaderFooterAtRuntime.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or dow
...
FlowdirectionShouldWorkForHeaderFooter
System.InvalidOperationException : 
Snapshot different than baseline: FlowdirectionShouldWorkForHeaderFooter.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlowdirectionShouldWorkForHeaderFooter.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image
...
CellLayoutUpdatesCorrectlyAfterDeviceOrientationChanges
System.InvalidOperationException : 
Snapshot different than baseline: Issue28657_Landscape.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue28657_Landscape.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the 
...
CollectionViewAddGroupWhenViewIsEmpty
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewAddGroupWhenViewIsEmpty.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewAddGroupWhenViewIsEmpty.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.

...
VerifyStringItemsObservableCollectionWhenMultipleModePreSelection
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.CollectionView_ItemsSourceFeatureTests.VerifyStringItemsObservableCollectionWhenMultipleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 630
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvo
...
CollectionViewHeightIsCorrectAfterDelayedLoad
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.Issues.Issue34336.CollectionViewHeightIsCorrectAfterDelayedLoad() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue34336.cs:line 29
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflectio
...
VerticalItemsRemainFullyVisibleAfterChangingSpacing
System.InvalidOperationException : 
Snapshot different than baseline: VerticalItemsRemainFullyVisibleAfterChangingSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerticalItemsRemainFullyVisibleAfterChangingSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then
...
VerticalGridCollectionViewRTLColumnMirroringShouldWork
System.InvalidOperationException : 
Snapshot different than baseline: VerticalGridCollectionViewRTLColumnMirroringShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerticalGridCollectionViewRTLColumnMirroringShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug)
...
CollectionviewFooterHideswhenDynamicallyAddorRemoveItems
System.InvalidOperationException : 
Snapshot different than baseline: CollectionviewFooterHideswhenDynamicallyAddorRemoveItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionviewFooterHideswhenDynamicallyAddorRemoveItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a 
...
SelectedItemVisualIsCleared
System.InvalidOperationException : 
Snapshot different than baseline: SelectedItemVisualIsCleared.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: SelectedItemVisualIsCleared.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment 
...
CollectionViewSelectionChangesVisualState
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewSelectionChangesVisualState.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewSelectionChangesVisualState.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline
...
CheckEmptyViewMargin
System.InvalidOperationException : 
Snapshot different than baseline: CheckEmptyViewMargin.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CheckEmptyViewMargin.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download th
...
VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection
System.InvalidOperationException : 
Snapshot different than baseline: VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed 
...
RemoveEmptyViewAtRuntime
System.InvalidOperationException : 
Snapshot different than baseline: RemoveEmptyViewAtRuntime.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: RemoveEmptyViewAtRuntime.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or dow
...
VerifyStringItemsGroupedListWhenMultipleModePreSelection
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.CollectionView_ItemsSourceFeatureTests.VerifyStringItemsGroupedListWhenMultipleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 722
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.Inter
...
HeaderShouldNotCollapseWithItems
System.InvalidOperationException : 
Snapshot different than baseline: HeaderShouldNotCollapseWithItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: HeaderShouldNotCollapseWithItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test a
...
CollectionViewSelectionModeOnDarkTheme
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewSelectionModeOnDarkTheme.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewSelectionModeOnDarkTheme.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image
...
VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot
System.InvalidOperationException : 
Snapshot different than baseline: VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this 
...
CollectionViewHorizontalItemSpacing
System.InvalidOperationException : 
Snapshot different than baseline: CollectionViewHorizontalItemSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: CollectionViewHorizontalItemSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See 
...
VerifyCollectionViewVisualState
System.InvalidOperationException : 
Snapshot different than baseline: VerifyCollectionViewVisualState.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyCollectionViewVisualState.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test att
...

(+59 more — see TRX in artifact)

ListView — 8 failed tests
GradientAndShadowShouldWork
System.InvalidOperationException : 
Snapshot different than baseline: GradientAndShadowShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: GradientAndShadowShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment 
...
ToggleAppearanceApiBackgroundColorListView
System.InvalidOperationException : 
Snapshot different than baseline: ToggleAppearanceApiBackgroundColorListView.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ToggleAppearanceApiBackgroundColorListView.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseli
...
Issue3798Test
System.InvalidOperationException : 
Snapshot different than baseline: Issue3798Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue3798Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifa
...
Issue18896Test
System.InvalidOperationException : 
Snapshot different than baseline: Issue18896Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue18896Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build arti
...
Bugzilla36802Test
System.InvalidOperationException : 
Snapshot different than baseline: Bugzilla36802Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Bugzilla36802Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the buil
...
Bugzilla53834Test
System.InvalidOperationException : 
Snapshot different than baseline: Bugzilla53834Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Bugzilla53834Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the buil
...
Bugzilla56298Test
System.InvalidOperationException : 
Snapshot different than baseline: Bugzilla56298Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Bugzilla56298Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the buil
...
Issue2775Test
System.InvalidOperationException : 
Snapshot different than baseline: Issue2775Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue2775Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifa
...
Shell — 104 failed tests
ShellPages_ForegroundColor
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_ForegroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_ForegroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or
...
VerifyShell_IsVisible
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShell_IsVisible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShell_IsVisible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download 
...
VerifyShell_TabBarTitleColor
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShell_TabBarTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShell_TabBarTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachmen
...
TabBarVisibilityHidesOnPage2UsingBinding
System.InvalidOperationException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage2UsingBinding.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage2UsingBinding.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline i
...
BackButtonBehavior_IsVisible_False_ProgrammaticNavStillWorks
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.ExtractDifferencePercentage(Exception ex) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 543
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyWithTolerance(String name, ImageSnapshot actualImage, String environmentName, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 506
   at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 471
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
   at Microsoft.Maui.TestCases.Tests.ShellNavigationFeatureTests.ShellScreenshot() i
...
LargeTitleTransitionsOnScroll
System.InvalidOperationException : 
Snapshot different than baseline: Issue33037_BeforeScroll.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue33037_BeforeScroll.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downl
...
VerifyShellFlyout_BackgroundImage
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_BackgroundImage() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 826
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.
...
FlyoutIconShouldRespectForegroundColorAfterNavigation
System.InvalidOperationException : 
Snapshot different than baseline: FlyoutIconShouldRespectForegroundColorAfterNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlyoutIconShouldRespectForegroundColorAfterNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), 
...
ShellTabBarBackgroundColor
System.InvalidOperationException : 
Snapshot different than baseline: ShellTabBarBackgroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellTabBarBackgroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or
...
ShellPages_IsVisibleTrue
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_IsVisibleTrue.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_IsVisibleTrue.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or dow
...
VerifyShell_TabBarForegroundColorAndTitleColor
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update th
...
ShouldUpdateSearchHandlerOnPageNavigation
System.InvalidOperationException : 
Snapshot different than baseline: ShouldUpdateSearchHandlerOnPageNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShouldUpdateSearchHandlerOnPageNavigation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline
...
VerifySearchHandlerPlaceholderText
System.InvalidOperationException : 
Snapshot different than baseline: VerifySearchHandlerPlaceholderText.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifySearchHandlerPlaceholderText.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See te
...
PageShouldNotMoveOutsideViewportWhenEntryFocusedOnPageLoad
System.InvalidOperationException : 
Snapshot different than baseline: PageShouldNotMoveOutsideViewportWhenEntryFocusedOnPageLoad.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: PageShouldNotMoveOutsideViewportWhenEntryFocusedOnPageLoad.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't 
...
VerifyShellFlyout_FlyoutItemVisibility
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_FlyoutItemVisibility() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 423
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at Sy
...
VerifyShell_TabBarForegroundColor
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test
...
ShellPages_PresentationModeNotAnimated
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_PresentationModeNotAnimated.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_PresentationModeNotAnimated.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image
...
FlyoutMenuShouldNotDisappearWhenNavigateUsingServices
System.InvalidOperationException : 
Snapshot different than baseline: FlyoutMenuShouldNotDisappearWhenNavigateUsingServices.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlyoutMenuShouldNotDisappearWhenNavigateUsingServices.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), 
...
VerifyHamburgerIcon
System.InvalidOperationException : 
Snapshot different than baseline: VerifyHamburgerIcon.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyHamburgerIcon.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the 
...
VerifyExistingTabTitle
System.InvalidOperationException : 
Snapshot different than baseline: VerifyExistingTabTitle.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyExistingTabTitle.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downloa
...
VerifyFlyoutBackgroundColor
System.InvalidOperationException : 
Snapshot different than baseline: VerifyFlyoutBackgroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyFlyoutBackgroundColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment 
...
FlyoutItemTextShouldDisplayProperly
System.InvalidOperationException : 
Snapshot different than baseline: FlyoutItemTextShouldDisplayProperly.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlyoutItemTextShouldDisplayProperly.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See 
...
VerifyShellFlyout_DisplayOptionsWithHeaderAndFooter
System.InvalidOperationException : Unable to extract difference percentage from exception message.
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_DisplayOptionsWithHeaderAndFooter() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 892
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* a
...
Issue27822Test
System.InvalidOperationException : 
Snapshot different than baseline: Issue27822Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue27822Test.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build arti
...
TabBarVisibilityAfterMultiLevelPopToRoot
System.InvalidOperationException : 
Snapshot different than baseline: TabBarVisibilityAfterMultiLevelPopToRoot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarVisibilityAfterMultiLevelPopToRoot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline i
...
ToolbarItemsShouldWork
System.InvalidOperationException : 
Snapshot different than baseline: ToolbarItemsShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ToolbarItemsShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downloa
...
VerifyFlyoutSelectedCurrentItem
System.InvalidOperationException : 
Snapshot different than baseline: VerifyFlyoutSelectedCurrentItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyFlyoutSelectedCurrentItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test att
...
TabBarIconsShouldAutoscaleShell
System.InvalidOperationException : 
Snapshot different than baseline: TabBarIconsShouldAutoscaleShell.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarIconsShouldAutoscaleShell.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test att
...
TabBarShouldBeVisibleAfterNavigatingFromModalViaGoToAsync
System.InvalidOperationException : 
Snapshot different than baseline: TabBarShouldBeVisibleAfterNavigatingFromModalViaGoToAsync.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarShouldBeVisibleAfterNavigatingFromModalViaGoToAsync.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a 
...
SubPageNavigationShouldWorkAfterFirstTabBecomesInvisible
System.InvalidOperationException : 
Snapshot different than baseline: SubPageNavigationShouldWorkAfterFirstTabBecomesInvisible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: SubPageNavigationShouldWorkAfterFirstTabBecomesInvisible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a 
...

(+74 more — see TRX in artifact)

TableView — 2 failed tests
VerifyContextActionCell
System.InvalidOperationException : 
Snapshot different than baseline: VerifyContextActionCell.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyContextActionCell.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downl
...
ValidateTableViewTitles
System.InvalidOperationException : 
Snapshot different than baseline: ValidateTableViewTitles.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ValidateTableViewTitles.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downl
...

📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)


📋 Pre-Flight — Context & Validation

Issue: #18318 - [ios] update MemoryAnalyzers package, add to Controls
PR: #36312 - [iOS/MacCatalyst] Controls.Core: Enable MemoryAnalyzers
Platforms Affected: iOS, MacCatalyst
Files Changed: 55 implementation, 2 test

Key Findings

  • PR enables MemoryAnalyzers for Controls.Core and handles roughly 226 analyzer findings with targeted lifecycle fixes and justified suppressions.
  • The active change set is broad iOS/MacCatalyst NSObject ownership cleanup across Shell, ListView, TableView, CollectionView/CarouselView, toolbar, gesture, modal, and compatibility renderer paths.
  • Prior inline review errors about public API breakage, Shell disconnect cleanup, attached renderer disposal, stale callbacks, UIContainer ownership, TableView recognizer cleanup, and ContextActionsCell unsubscription appear addressed in current head.
  • Regression coverage is device-test focused under src/Controls/tests/DeviceTests, especially Shell lifecycle and Memory tests; the supplied gate already passed, so the gate was not re-run.
  • Candidate testing platform is ios; focused validation should use the device-test runner against src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj with filters for the new Shell/Memory regression tests.

Code Review Summary

Verdict: NEEDS_DISCUSSION
Confidence: low
Errors: 0 | Warnings: 0 | Suggestions: 0

Key code review findings:

  • ℹ No actionable code findings were found on current head.
  • ℹ Required CI could not be fully verified from this unauthenticated environment; public checks were pending/undetermined with one likely infrastructure failure, so confidence is capped low.
  • ℹ Blast radius is broad for iOS/MacCatalyst Shell/Flyout/ListView/TableView/CollectionView lifecycle paths, including startup/page initialization paths when those controls are used.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #36312 Enable MemoryAnalyzers for Controls.Core, fix real iOS/MacCatalyst retain cycles and deterministic teardown gaps, and suppress only intentional ownership patterns. ✅ PASSED (Gate) 57 files Original PR; gate result supplied by caller and not re-run.

🔬 Code Review — Deep Analysis

Code Review — PR #36312

Independent Assessment

What this changes: Enables MemoryAnalyzers for Controls.Core and adds iOS/MacCatalyst lifecycle/disposal fixes across Shell, ListView, TableView, CollectionView, toolbar, and compatibility renderers.
Inferred motivation: Reduce native/managed retain cycles and make analyzer suppressions match deterministic teardown behavior.

Reconciliation with PR Narrative

Author claims: Fix-first/suppression-second memory-analyzer enablement with targeted tests and no public API break.
Agreement/disagreement: Matches current code. Previously flagged lifecycle/API issues appear addressed in current head.

Prior Review Reconciliation

Prior ❌ Error Finding Source Status Evidence
ShellFlyoutContentRenderer.WillAppear/WillDisappear hidden public API MauiBot ✅ Fixed Events are public at ShellFlyoutContentRenderer.cs:37,40.
Shell cleanup only ran from Dispose MauiBot ✅ Fixed IElementHandler.DisconnectHandler() delegates to shared cleanup at ShellRenderer.cs:569-572.
Shell item renderer disposed while attached MauiBot ✅ Fixed DetachRenderer removes view/controller before dispose at ShellRenderer.cs:270-287.
ContextActionsCell keeps _cell.PropertyChanged MauiBot ✅ Fixed Unsubscribed in dispose at ContextActionCell.cs:306.
TableView source recognizers remain attached MauiBot ✅ Fixed Recognizers removed/disposed at TableViewModelRenderer.cs:214-221.
Flyout late lifecycle callbacks after dispose MauiBot ✅ Fixed Disposed guards in lifecycle methods, e.g. ShellFlyoutContentRenderer.cs:365.
UIContainerView handler leak MauiBot ✅ Fixed Disconnect() detaches platform view and conditionally disconnects owned handler at UIContainerView.cs:150-163.
Shell active-transition teardown risk MauiBot ✅ Fixed Transition cancellation plus regression test DisconnectShellCancelsActiveItemTransitionBeforeDisposal.

Blast Radius Assessment

  • Runs for all instances: Yes, for affected iOS/MacCatalyst compatibility renderers/handlers when used.
  • Startup impact: Possible for Shell/Flyout setup paths.
  • Static/shared state: No new broad static state; mostly instance lifecycle cleanup.

CI Status

  • Required-check result: gh pr checks --required unavailable due missing auth.
  • Fallback public check-runs: pending/in progress plus one failed maui-pr (Build .NET MAUI Build Windows (Debug)).
  • Classification: failure appears infra/transient (microsoft-jdk-17.0.12-windows-x64.msi download response ended prematurely); overall CI still undetermined.
  • Action taken: invoked azdo-build-investigator; ci-analysis skill unavailable; confidence capped low.

Findings

No actionable code findings found on current head.

External Output Contract

Consumer token/pattern Producer location Producer emission condition Consumer assumption Ordinary negative case Downstream effect
N/A N/A No changed code classifies external tool output via regex/string literal N/A N/A N/A

Failure-Mode Probing

  • Disconnect during Shell item transition: cancellation removes active animations and disposes old/new renderers once.
  • Late UIKit callback after dispose: affected flyout/root renderer paths now guard _isDisposed.
  • Reparented shared title view: default UIContainerView no longer disconnects shared handler; flyout-owned containers opt in.

Verdict: NEEDS_DISCUSSION

Confidence: low
Summary: Code changes look sound and prior error-level findings appear fixed. I cannot return LGTM because required CI is not complete/verified and one current public check is failing with likely infrastructure failure.


🛠️ Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix-1 Replace ShellRenderer's split DisconnectAndDispose / DetachAndDispose helpers with one teardown path backed by explicit disconnected-renderer tracking. ⚠️ Blocked 1 file iOS/MacCatalyst/device-test builds passed, but iOS simulator deployment timed out. Structurally clearer than the PR but not empirically validated.
2 try-fix-2 Delay _currentShellItemRenderer promotion until after Shell item transition completion, keeping "current" as the committed renderer during animation. ❌ Fail 1 file Regressed CanClearShellContent: delaying old-renderer disconnect temporarily double-registers Shell appearance observers.
3 try-fix-3 Infer UIContainerView handler ownership at disconnect time from captured view/handler/platform-view relationships instead of using the PR's explicit ownership flag. ❌ Fail 3 files Missed legitimate flyout header/footer teardown; Disposed Shell Flyout Content Disconnects Header And Footer Handlers failed.
4 try-fix-4 Centralize ContextActionsCell teardown through a SetCell(...) path and have Dispose(bool) call SetCell(null, false) while preserving the content cell for late UIKit callbacks. ❌ Fail 1 file Build passed, but iOS MemoryTests timed out after 3600s with XHarness exit code 80 (APP_CRASH) and no test counts.
PR PR #36312 Current PR fix: explicit lifecycle cleanup, focused weak references, explicit ownership flags, early Shell old-renderer disconnect with outgoing tracking, and targeted suppressions/tests. ✅ PASSED (Gate) 57 files Gate result supplied by caller; not re-run.

Iterative Learning

Candidate Lesson fed into next iteration
try-fix-1 A unified Shell teardown helper can make the invariant clearer, but without device-test completion it cannot be selected over the PR's already-gated fix.
try-fix-2 Delayed promotion is not safe: Shell observer unregistration must happen synchronously at transition start, so the PR's early disconnect is load-bearing.
try-fix-3 Reparentable vs owned UIContainerView teardown cannot be reliably inferred from runtime identity alone; the PR's explicit ownership signal is necessary for flyout header/footer cleanup.
try-fix-4 Centralized ListView context-action cleanup is plausible statically, but the available iOS run ended in an app-crash timeout, so it cannot displace the current focused fix.

Candidate Details

try-fix-1 — Explicit ShellRenderer disconnect-state tracking

This candidate kept the PR's Shell transition state machine shape but replaced the two teardown helpers with one TeardownRenderer method that consults _disconnectedRenderers. When an old renderer is disconnected at transition start, it is recorded; later teardown removes it from the set and skips a second Disconnect().

Diff: recorded in ../try-fix-1/content.md as an excerpt.
Result: Blocked. Relevant builds succeeded, but the iOS Shell device-test deployment exceeded the environment timeout, so no passing test result was available.

try-fix-2 — Delayed current-renderer promotion

This candidate changed the Shell transition model: _currentShellItemRenderer stayed on the old renderer during animation; the new renderer stayed _incomingRenderer until the transition completed.

Diff: recorded in ../try-fix-2/candidate.diff and summarized in ../try-fix-2/content.md.
Result: Failed. The candidate regressed CanClearShellContent because old appearance observers remained registered until transition completion. The PR's current early-disconnect model is required to maintain the observer-count invariant.

try-fix-3 — Inferred UIContainerView ownership

This candidate removed the PR's explicit ownsHandler constructor signal and attempted to disconnect only when the captured handler/platform view relationship proved ownership at teardown time.

Diff: recorded in ../try-fix-3/content.md.
Result: Failed. The heuristic skipped required flyout header/footer handler teardown and failed Shell lifecycle tests, showing explicit ownership is safer and clearer.

try-fix-4 — Centralized ContextActionsCell teardown

This candidate routed ContextActionsCell disposal through a centralized SetCell(...) helper instead of duplicating _cell.PropertyChanged -= OnCellPropertyChanged in Dispose(bool).

Diff: recorded in ../try-fix-4/fix.diff and summarized in ../try-fix-4/content.md.
Result: Failed. The code built and self-review found no issues, but the iOS MemoryTests run timed out with XHarness APP_CRASH, so it did not produce a successful regression result.

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 1 Yes Proposed explicit ShellRenderer disconnected-state tracking.
claude-opus-4.7 1 Yes Proposed delayed current-renderer promotion; test failure proved early disconnect is required.
gpt-5.3-codex 1 Yes Proposed inferred UIContainerView ownership; test failure proved explicit ownership flag is required.
gpt-5.5 1 Yes Proposed centralized ContextActionsCell teardown; build passed but iOS app-crash timeout prevented validation.
all Exhaustion No Further variants would either reintroduce the failed delayed-promotion/inferred-ownership assumptions or become trivial reshuffles of the PR's current fix.

Exhausted: Yes
Selected Fix: PR #36312 — It is the only candidate with a completed passing gate. The failed alternatives also support key design choices in the PR: early Shell old-renderer disconnect, explicit UIContainer ownership, and direct deterministic teardown for analyzer-owned subscriptions.


🏁 Report — Final Recommendation

Comparative Analysis — PR #36312

Candidates Compared

Candidate Result Rank Rationale
pr Passed supplied gate 1 The submitted PR is the only fully validated candidate. It enables MemoryAnalyzers, fixes concrete iOS/MacCatalyst ownership problems, preserves public compatibility surface, and includes targeted device-test coverage.
pr-plus-reviewer Equivalent to pr 2 The expert-review pass produced no actionable source changes to apply, so this candidate is functionally identical to pr. It is ranked just below pr because there is no actual improvement over the already-gated PR fix.
try-fix-1 Blocked 3 Structurally attractive ShellRenderer teardown centralization, but its device-test run did not complete. Because candidates without completed regression validation must rank below candidates with a passing gate, it cannot beat pr.
try-fix-2 Failed 4 Delaying _currentShellItemRenderer promotion regressed CanClearShellContent by allowing old and new Shell appearance observers to coexist during transition. This proves the PR's early old-renderer disconnect is load-bearing.
try-fix-3 Failed 5 Inferring UIContainerView handler ownership missed required flyout header/footer handler teardown and failed Shell lifecycle tests. This proves the PR's explicit ownership flag is necessary.
try-fix-4 Failed 6 Centralized ContextActionsCell teardown built cleanly and self-reviewed cleanly, but the iOS MemoryTests run timed out with XHarness exit code 80 (APP_CRASH) and produced no passing test counts. It must rank below passing candidates.

Winning Candidate

Winner: pr

The raw PR fix wins because it is the only candidate with a completed passing gate. The expert-review pass found no actionable change to apply, so pr-plus-reviewer collapses to the same implementation rather than becoming a distinct improvement. The try-fix failures also strengthen confidence in the PR's design: early Shell old-renderer disconnect, explicit UIContainerView ownership, and direct deterministic teardown are not incidental complexity; they preserve tested lifecycle invariants.

Candidate-Specific Notes

try-fix-1 remains a plausible future cleanup idea because explicit disconnected-renderer tracking would make Shell teardown state easier to audit, but it did not complete the iOS simulator validation. It should not displace a passing PR fix.

try-fix-2 should not be revived as-is. Its delayed-promotion model makes _currentShellItemRenderer semantically cleaner, but it delays observer unregistration and regresses existing Shell behavior.

try-fix-3 should not be revived. Runtime inference of handler ownership is too fragile for flyout header/footer lifetimes.

try-fix-4 should not be selected without a clean device-test pass. Its refactor may be reasonable in isolation, but the available run ended in app-crash timeout and therefore fails the required ranking rule.


🧭 Next Steps — review latest findings

No alternative fix was selected for this run. Review the session findings and CI results before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-collectionview CollectionView, CarouselView, IndicatorView platform/ios platform/macos macOS / Mac Catalyst s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-review-in-progress AI review is currently running for this PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants