[iOS] Fix tab bar unselected colors not rendering on iOS 26+#34688
[iOS] Fix tab bar unselected colors not rendering on iOS 26+#34688jfversluis wants to merge 4 commits into
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34688Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34688" |
🧪 PR Test EvaluationOverall Verdict: The core fix scenarios are covered by well-written device tests, but there are a few coverage gaps: the Shell path lacks an iOS 26+ test for
📊 Expand Full EvaluationPR Test Evaluation ReportPR: #34688 — Fix iOS 26+ tab bar unselected colors for TabbedPage and Shell Overall VerdictThe TabbedPage iOS 26+ scenarios are well covered, but the Shell fix is only tested with the 1. Fix Coverage — ✅The new tests directly exercise the fix's primary code paths:
Tests would fail if 2. Edge Cases & Gaps —
|
| Fix Code Path | Covered By Test |
|---|---|
TabbedRenderer.UpdateiOS15TabBarAppearance — iOS 26+ path sets _pendingUnselectedTintColor from barTextColor |
UnselectedItemTintColorSetFromBarTextColor |
TabbedRenderer.UpdateiOS15TabBarAppearance — iOS 26+ path: unselectedTabColor takes priority |
UnselectedItemTintColorSetFromUnselectedTabColor |
TabbedRenderer.ViewDidLayoutSubviews — dynamic re-application |
ChangingBarTextColorUpdatesUnselectedItemTintColor (indirectly) |
SafeShellTabBarAppearanceTracker.UpdateiOS15TabBarAppearance — iOS 26+ unselected path |
ShellTabBarUnselectedAndTitleColorWorkTogether |
TabbedViewExtensions.UpdateiOS15TabBarAppearance — iOS 26+ direct property setting |
All TabbedPage iOS 26 tests |
TabbedViewExtensions.ApplyPreColoredImagesForIOS26 — icon pre-coloring |
❌ Not covered |
Recommendations
-
Add Shell iOS 26+ unselected-only test: Add a test to
ShellTabBarTests.cs(or.iOS.cs) that calls onlyShell.SetTabBarUnselectedColor(noSetTabBarTitleColor) and verifiesValidateTabBarUnselectedTintColorPropertyon iOS 26+. This covers theif (unselectedColor is not null)branch in the Shell tracker's iOS 26 path. -
Resolve Mac Catalyst skip on
BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor: Track down why this fails on Mac Catalyst and either fix it or add a property-based Mac Catalyst variant alongside the pixel-based test. The fix's Mac Catalyst code path is otherwise unvalidated for this scenario. -
Minor dedup opportunity:
UnselectedItemTintColorSetFromBarTextColorandChangingBarTextColorUpdatesUnselectedItemTintColoroverlap on the Red→Blue case. Consider consolidating by keeping the combined test and removing the duplicate initial assertion fromChangingBarTextColorUpdatesUnselectedItemTintColor. Low priority.
Warning
⚠️ Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
dc.services.visualstudio.com
To allow these domains, add them to the network.allowed list in your workflow frontmatter:
network:
allowed:
- defaults
- "dc.services.visualstudio.com"See Network Configuration for more information.
Note
🔒 Integrity filtering filtered 1 item
Integrity filtering activated and filtered the following item during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
- pr:[iOS] Fix tab bar unselected colors not rendering on iOS 26+ #34688 (
pull_request_read: Resource 'pr:[iOS] Fix tab bar unselected colors not rendering on iOS 26+ #34688' has lower integrity than agent requires. Agent would need to drop integrity tags [unapproved:all approved:all] to trust this resource.)
🧪 Test evaluation by Evaluate PR Tests
There was a problem hiding this comment.
Pull request overview
Fixes iOS 26+ “liquid glass” tab bar rendering regressions where unselected tab text/icon colors (TabbedPage + Shell) are ignored by the system tint pipeline, by switching to per-item title attributes and pre-colored (AlwaysOriginal) images as a workaround.
Changes:
- Add iOS 26+ code paths to apply unselected/selected colors via direct
UITabBarproperties plus pre-colored tab images. - Re-apply colors during layout for iOS 26+ because UIKit may reset values during layout passes.
- Add/adjust device tests to validate iOS 26+ behavior via property-based assertions (since pixel-based verification is unreliable).
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Core/src/Platform/iOS/TabbedViewExtensions.cs | Adds iOS 26+ pre-colored image workaround + adjusts tab icon resizing behavior. |
| src/Controls/src/Core/Compatibility/Handlers/TabbedPage/iOS/TabbedRenderer.cs | Caches/reapplies effective colors on iOS 26+ during layout. |
| src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/SafeShellTabBarAppearanceTracker.cs | Adds iOS 26+ early-return appearance path and re-applies colors during layout. |
| src/Controls/tests/DeviceTests/Elements/TabbedPage/TabbedPageTests.iOS.cs | Adds iOS 26+ regression tests verifying UnselectedItemTintColor behavior. |
| src/Controls/tests/DeviceTests/Elements/TabbedPage/TabbedPageTests.cs | Updates/clarifies existing tests and adds a non-iOS26 regression scenario test. |
| src/Controls/tests/DeviceTests/Elements/Shell/ShellTabBarTests.iOS.cs | Improves tab bar lookup and adds helper to validate UnselectedItemTintColor. |
| src/Controls/tests/DeviceTests/Elements/Shell/ShellTabBarTests.cs | Adds iOS 26+ regression test using property-based validation fallback. |
| /// Must be called on every layout pass because UIKit may reset these during layout. | ||
| /// See: https://github.com/dotnet/maui/issues/32125, https://github.com/dotnet/maui/issues/34605 | ||
| /// </summary> | ||
| [System.Runtime.Versioning.SupportedOSPlatform("ios26.0")] |
There was a problem hiding this comment.
ApplyPreColoredImagesForIOS26 is invoked for both iOS and MacCatalyst (callers guard on IsMacCatalystVersionAtLeast(26)), but the method is only annotated with [SupportedOSPlatform("ios26.0")]. In nullable-enabled projects this can trigger platform compatibility diagnostics for MacCatalyst builds. Consider adding a matching [SupportedOSPlatform("maccatalyst26.0")] (or adjusting naming/annotations) so the analyzer matches actual supported usage.
| [System.Runtime.Versioning.SupportedOSPlatform("ios26.0")] | |
| [System.Runtime.Versioning.SupportedOSPlatform("ios26.0")] | |
| [System.Runtime.Versioning.SupportedOSPlatform("maccatalyst26.0")] |
| if (OperatingSystem.IsIOSVersionAtLeast(26) || OperatingSystem.IsMacCatalystVersionAtLeast(26)) | ||
| { | ||
| return resizedImage?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); | ||
| } | ||
|
|
There was a problem hiding this comment.
AutoResizeTabBarImage now forces AlwaysTemplate on iOS/MacCatalyst 26+. ResizeImageSource already preserves the input image rendering mode, so this change will override callers which intentionally provide AlwaysOriginal tab icons (e.g., multi-color icons) and can change app appearance. If the intent is only to ensure a template mask for the iOS 26 workaround, consider keeping the original rendering mode here and doing any template conversion only inside the iOS 26 tinting path.
| if (OperatingSystem.IsIOSVersionAtLeast(26) || OperatingSystem.IsMacCatalystVersionAtLeast(26)) | |
| { | |
| return resizedImage?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); | |
| } |
| item.Image = template.ApplyTintColor(unselectedColor) | ||
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); | ||
|
|
||
| if (selectedColor is not null) | ||
| { | ||
| item.SelectedImage = template.ApplyTintColor(selectedColor) | ||
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); |
There was a problem hiding this comment.
ApplyPreColoredImagesForIOS26 creates new tinted UIImage instances for each tab item every time it's called, and callers invoke it on every layout pass (e.g., ViewDidLayoutSubviews / UpdateLayout). This can cause avoidable allocations and GC pressure during frequent layouts. Consider caching the tinted images per UITabBarItem+color (or only regenerating when the effective colors change) and simply re-assigning cached instances when UIKit resets the images.
| item.Image = template.ApplyTintColor(unselectedColor) | |
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); | |
| if (selectedColor is not null) | |
| { | |
| item.SelectedImage = template.ApplyTintColor(selectedColor) | |
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); | |
| // Only (re)apply tint when the current image is still the original | |
| // template. This avoids allocating new tinted UIImage instances on | |
| // every layout pass when nothing has changed. | |
| if (ReferenceEquals(img, template)) | |
| { | |
| item.Image = template.ApplyTintColor(unselectedColor) | |
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); | |
| if (selectedColor is not null) | |
| { | |
| item.SelectedImage = template.ApplyTintColor(selectedColor) | |
| ?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); | |
| } |
| // Selected color via TintColor (works on iOS 26) | ||
| var selectedColor = foregroundColor ?? titleColor; | ||
| if (selectedColor is not null) | ||
| { | ||
| _pendingSelectedTintColor = selectedColor.ToPlatform(); | ||
| tabBar.TintColor = _pendingSelectedTintColor; | ||
| } | ||
|
|
||
| // Unselected color: set property + pre-colored images for visual rendering | ||
| if (unselectedColor is not null) | ||
| { | ||
| _pendingUnselectedTintColor = unselectedColor.ToPlatform(); | ||
| tabBar.UnselectedItemTintColor = _pendingUnselectedTintColor; | ||
| tabBar.ApplyPreColoredImagesForIOS26(_pendingUnselectedTintColor, _pendingSelectedTintColor); | ||
| } | ||
|
|
||
| return; |
There was a problem hiding this comment.
In the iOS 26+ early-return path, _pendingSelectedTintColor/_pendingUnselectedTintColor are only set when the corresponding selectedColor/unselectedColor is non-null. If an app later removes these colors (e.g., dynamic resources revert to default), the pending fields and UITabBar properties will keep reapplying the old values in UpdateLayout(), effectively making the colors “sticky”. Consider explicitly clearing the pending fields and restoring tabBar.TintColor / tabBar.UnselectedItemTintColor to the defaults when the effective colors are null/default.
| // TabbedRenderer IS a UITabBarController — get TabBar directly from it | ||
| if (tabbedPage.Handler?.PlatformView is UITabBarController tbc) |
There was a problem hiding this comment.
In GetTabBar, the fast-path tabbedPage.Handler?.PlatformView is UITabBarController will never succeed for TabbedRenderer: IElementHandler.PlatformView is explicitly implemented to return NativeView (a UIView), not the UITabBarController itself. This makes the comment misleading and forces the fallback path every time. Consider using (tabbedPage.Handler as IPlatformViewHandler)?.ViewController (or the handler passed into CreateHandlerAndAddToWindow) to get the UITabBarController directly.
| // TabbedRenderer IS a UITabBarController — get TabBar directly from it | |
| if (tabbedPage.Handler?.PlatformView is UITabBarController tbc) | |
| // Try to get UITabBarController directly from the handler's ViewController | |
| var platformHandler = tabbedPage.Handler as IPlatformViewHandler; | |
| if (platformHandler?.ViewController is UITabBarController tbc) |
|
/azp run maui-pr-uitests |
On iOS 26+, Apple's liquid glass tab bar compositing pipeline ignores UITabBarAppearance Normal state (TitleTextAttributes, IconColor) AND UITabBar.UnselectedItemTintColor for visual rendering, even though the properties are stored correctly. This caused TabbedPage.BarTextColor and Shell.TabBarUnselectedColor to have no visual effect on unselected tabs. Fix: Bypass the tint pipeline entirely on iOS 26+ by using pre-colored images with AlwaysOriginal rendering mode (via UIImage.ApplyTintColor), which bakes the color into image pixel data. This is the same approach used for the iOS 26 back button color fix (PR #34326). Also set per-item SetTitleTextAttributes for text color. Cache original template images in a ConditionalWeakTable to avoid quality degradation from repeated AlwaysOriginal→Template round-trips. For Shell: Early-return in SafeShellTabBarAppearanceTracker on iOS 26+, skipping the full appearance pipeline. Cache pending colors for re-application in UpdateLayout since liquid glass resets properties. For TabbedPage: Cache effective colors in TabbedRenderer and re-apply in ViewDidLayoutSubviews. Pre-iOS 26 behavior is unchanged. Fixes #32125 Fixes #34605 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
86a1043 to
7207ec9
Compare
🧪 PR Test EvaluationOverall Verdict: Tests provide solid coverage of the main iOS 26+ property-setting paths (
📊 Expand Full EvaluationPR Test Evaluation ReportPR: #34688 — Fix iOS 26+ tab bar unselected colors for TabbedPage and Shell Overall VerdictThe property-based device tests do a good job verifying that 1. Fix Coverage —
|
| Test | Assertion Quality |
|---|---|
UnselectedItemTintColorSetFromBarTextColor |
✅ Specific — checks exact color with tolerance |
UnselectedItemTintColorSetFromUnselectedTabColor |
✅ Specific — checks exact color with tolerance |
ChangingBarTextColorUpdatesUnselectedItemTintColor (null clear) |
BarTextColor should restore a default; the test doesn't assert the expected default value. |
ShellTabBarUnselectedAndTitleColorWorkTogether (iOS 26+ path) |
UnselectedItemTintColor, not TintColor (selected color) |
9. Fix-Test Alignment — ✅
The test files correctly target the same controls modified by the fix (TabbedPage and Shell). Tests are in the matching DeviceTests/Elements/TabbedPage/ and DeviceTests/Elements/Shell/ directories. The new iOS-specific tests verify the iOS 26+ code paths introduced in TabbedViewExtensions.cs, TabbedRenderer.cs, and SafeShellTabBarAppearanceTracker.cs.
Recommendations
-
Add a test for
ApplyPreColoredImagesForIOS26— After setting a color and triggering layout, verify that at least one tab item has its image inUIImageRenderingMode.AlwaysOriginal. This is the most important untested code path. Can be done inTabbedPageTests.iOS.cswithin an existingCreateHandlerAndAddToWindowblock. -
Strengthen the null-clear assertion — In
ChangingBarTextColorUpdatesUnselectedItemTintColor, aftertabbedPage.BarTextColor = null, assert the expected value (e.g.,nullor the system default tint), not just that it's not the previous colors. -
Add Shell selected-color assertion — In
ShellTabBarUnselectedAndTitleColorWorkTogetherfor the iOS 26+ branch, also verifytabBar.TintColorequalstitleColor(the selected tab color), since the fix sets it viatabBar.TintColor = _pendingSelectedTintColor. -
(Optional) Resolve the Mac Catalyst TabbedPage skip — The
Skip = "Fails on Mac Catalyst, fixme"note onBarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColorsuggests a gap in Mac Catalyst coverage. Consider investigating and addressing in a follow-up.
Warning
⚠️ Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
dc.services.visualstudio.com
To allow these domains, add them to the network.allowed list in your workflow frontmatter:
network:
allowed:
- defaults
- "dc.services.visualstudio.com"See Network Configuration for more information.
Note
🔒 Integrity filtering filtered 1 item
Integrity filtering activated and filtered the following item during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
- pr:[iOS] Fix tab bar unselected colors not rendering on iOS 26+ #34688 (
pull_request_read: Resource 'pr:[iOS] Fix tab bar unselected colors not rendering on iOS 26+ #34688' has lower integrity than agent requires. Agent would need to drop integrity tags [unapproved:all approved:all] to trust this resource.)
🧪 Test evaluation by Evaluate PR Tests
- Log SetAppearance and UpdateLayout calls in SafeShellTabBarAppearanceTracker - Log ApplyDirectTextColorsForIOS26 execution and label coloring - Simplified text coloring to BFS walk and color all UILabel instances found - This helps identify if the method is being called and if labels are found
Log every view encountered and every label colored to diagnose why text coloring isn't working on iOS 26
Text Color Rendering Investigation - iOS 26.2Issue: Unselected text colors still rendering as black instead of specified color (e.g., Red). Analysis:
Solution Implemented:
Next Steps: CI artifacts will provide device logs showing exact diagnostic information needed to fix the issue. Branch: |
This code had no effect on iOS 26+ due to Apple's Liquid Glass design system intentionally ignoring the Normal state appearance. Document the iOS 26 limitation and direct developers to the icon pre-coloring workaround via AlwaysOriginal rendering. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Research Update: iOS 26 Tab Bar Color LimitationI've completed an in-depth investigation into the unselected tab bar text color issue on iOS 26.2, and determined this is NOT a MAUI bug, but an intentional Apple design restriction. Key Findings✅ This is Intentional Apple Design
Technical ExplanationThe iOS 26 liquid glass UITabBar uses a dual-layer compositing pipeline:
This compositing pipeline intentionally strips the tint rendering path for unselected items to achieve the monochromatic aesthetic Apple wants. What Works vs What Doesn't
Solution ImplementedThis PR takes the honest approach:
I've cleaned up the code to:
Why Not a Hacky Workaround?I investigated a view-hierarchy walking approach to directly color UILabel instances, but rejected it because:
Next StepsThis PR is now ready with:
The solution provides what the platform allows while being honest about platform limitations. References
|
🚦 Gate — Test Before and After Fix
🚦 Gate Session —
|
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether) Category=Shell |
❌ PASS — 502s | ✅ PASS — 215s |
📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor) Category=TabbedPage |
❌ PASS — 36s | ✅ PASS — 40s |
🔴 Without fix — 📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether): PASS ❌ · 502s
(truncated to last 15,000 chars)
ific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000181cb4c78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000181d283a4 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 100
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x00000001043aaf28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x000000010949769c
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x00000001096eed28
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x00000001094916fc
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x00000001093110b4
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x0000000108b2cd34
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x00000001061f0c04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x000000010606ed30 libcoreclr.dylib`MethodDescCallSite::CallTargetWorker(unsigned long long const*, unsigned long long*, int) + 836
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x0000000105f75350 libcoreclr.dylib`RunMain(MethodDesc*, short, int*, PtrArray**) + 648
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000105f75688 libcoreclr.dylib`Assembly::ExecuteMainMethod(PtrArray**, int) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000105f9d29c libcoreclr.dylib`CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*) + 640
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x0000000105f63650 libcoreclr.dylib`coreclr_execute_assembly + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x00000001043a6140 mlaunch`mono_jit_exec + 204
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x00000001043a9ecc mlaunch`xamarin_main + 884
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x00000001043ab1f4 mlaunch`main + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #24: 0x000000018025ab98 dyld`start + 6076
�[40m�[37mdbug�[39m�[22m�[49m: thread #2
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bb8b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #3
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bb8b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #4
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805b9c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001805cc3a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001805c2764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001805b9fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105f612f4 libcoreclr.dylib`MachMessage::Receive(unsigned int) + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105f6061c libcoreclr.dylib`SEHExceptionThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #5, name = '.NET SynchManager'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bfd04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000105f55304 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ReadBytesFromProcessPipe(int, unsigned char*, int) + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105f549f0 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::WorkerThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #6, name = '.NET EventPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805c2498 libsystem_kernel.dylib`poll + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000106250e90 libcoreclr.dylib`ds_ipc_poll(_DiagnosticsIpcPollHandle*, unsigned long, unsigned int, void (*)(char const*, unsigned int)) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001062febb0 libcoreclr.dylib`ds_ipc_stream_factory_get_next_available_stream(void (*)(char const*, unsigned int)) + 756
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001062fca68 libcoreclr.dylib`server_thread(void*) + 372
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #7, name = '.NET DebugPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805ba678 libsystem_kernel.dylib`__open + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001805c56a4 libsystem_kernel.dylib`open + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000106251a84 libcoreclr.dylib`TwoWayPipe::WaitForConnection() + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x000000010624c578 libcoreclr.dylib`DbgTransportSession::TransportWorker() + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x000000010624b5c8 libcoreclr.dylib`DbgTransportSession::TransportWorkerStatic(void*) + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #8, name = '.NET Debugger'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bd3cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001805fc09c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105f52f6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105f52bec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105f570cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000106249da8 libcoreclr.dylib`DebuggerRCThread::MainLoop() + 228
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000106249c70 libcoreclr.dylib`DebuggerRCThread::ThreadProc() + 256
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000106249a24 libcoreclr.dylib`DebuggerRCThread::ThreadProcStatic(void*) + 56
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #9
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bd3cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001805fc09c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105f52f6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105f52bec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105f570cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x00000001060a4078 libcoreclr.dylib`FinalizerThread::WaitForFinalizerEvent(CLREvent*) + 240
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001060a41d8 libcoreclr.dylib`FinalizerThread::FinalizerThreadWorker(void*) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000106041fa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x000000010604248c libcoreclr.dylib`ManagedThreadBase::FinalizerBase(void (*)(void*)) + 36
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x00000001060a4350 libcoreclr.dylib`FinalizerThread::FinalizerThreadStart(void*) + 88
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #10, name = '.NET SigHandler'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805ba7dc libsystem_kernel.dylib`read + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000104464e98 libSystem.Native.dylib`SignalHandlerLoop + 96
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #11
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805bfd04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001044634a4 libSystem.Native.dylib`SystemNative_WaitForSocketEvents + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000010949ba1c
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x000000010949b75c
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x000000010949b684
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000109371350
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001093711e0
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000109371108
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x00000001061f0c04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x000000010606e988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000106080c6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000106041fa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x000000010604245c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x0000000106080d44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #12
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805b9c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001805cc3a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001805c2764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001805b9fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x00000001806e6c0c CoreFoundation`__CFRunLoopServiceMachPort + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x00000001806e5528 CoreFoundation`__CFRunLoopRun + 1208
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001806e49e8 CoreFoundation`CFRunLoopRunSpecific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000181cb4c78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x00000001043aaf28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x00000001096e31cc
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x00000001096e3090
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x00000001096e2ec4
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x00000001096dfa40
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x00000001093712f8
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x00000001093711e0
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x0000000109371108
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x00000001061f0c04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x000000010606e988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000106080c6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000106041fa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x000000010604245c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x0000000106080d44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x0000000105f5e0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #13, name = 'com.apple.CFSocket.private'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001805c4c2c libsystem_kernel.dylib`__select + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000018070ca80 CoreFoundation`__CFSocketManager + 704
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001805fbbc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #14
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x0000000000000000
�[40m�[37mdbug�[39m�[22m�[49m: (lldb) detach
�[40m�[37mdbug�[39m�[22m�[49m: Process 9383 detached
�[40m�[37mdbug�[39m�[22m�[49m: (lldb) quit
�[40m�[37mdbug�[39m�[22m�[49m: 9383 Execution timed out after 60 seconds and the process was killed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 137
�[40m�[37mdbug�[39m�[22m�[49m: Failed to list crash reports from device.
�[40m�[37mdbug�[39m�[22m�[49m: Test run started but crashed and no test results were reported
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 30 seconds for the crash report service...
�[41m�[30mfail�[39m�[22m�[49m: Application test run crashed
Failed to launch the application, please try again. If the problem persists, try rebooting MacOS
�[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.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=405):
�[40m�[37mdbug�[39m�[22m�[49m: Unable to lookup in current state: Shutdown
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 149
�[41m�[30mfail�[39m�[22m�[49m: Failed to uninstall the app bundle! Check logs for more details!
XHarness exit code: 83 (APP_LAUNCH_FAILURE)
Passed: 0
Failed: 0
Tests completed with exit code: 83
🟢 With fix — 📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether): PASS ✅ · 215s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Release/net10.0-ios26.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Release/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
TestUtils.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.dll
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Release/net10.0-ios26.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
TestUtils.DeviceTests.Runners -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.Runners.dll
Core.DeviceTests.Shared -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core.DeviceTests.Shared/Release/net10.0-ios/Microsoft.Maui.DeviceTests.Shared.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Release/net10.0-ios26.0/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
TestUtils.DeviceTests.Runners.SourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners.SourceGen/Release/netstandard2.0/Microsoft.Maui.TestUtils.DeviceTests.Runners.SourceGen.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.controls.devicetests
App Id: com.microsoft.maui.controls.devicetests
Controls.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.dll
Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
Optimizing assemblies for size. This process might take a while.
IL stripping assemblies
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:02:29.66
[11.0.0-prerelease.26107.1+bfbac237157e59cdbd19334325b2af80bd6e9828] XHarness command issued: apple test --app artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app --target ios-simulator-64_18.6 --device 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 -o artifacts/log --timeout 01:00:00 -v --set-env=TestFilter=Category=Shell
�[40m�[32minfo�[39m�[22m�[49m: Preparing run for ios-simulator-64_18.6 targeting 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531
�[40m�[32minfo�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators..
�[40m�[37mdbug�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators. Storing logs into list-ios-simulator-64_18.6-20260417_025043.log
�[40m�[32minfo�[39m�[22m�[49m: Found simulator device 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Getting app bundle information from '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling any previous instance of 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.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: Installing application 'Microsoft.Maui.Controls.DeviceTests' on 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: Installing '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app' to 'iPhone 11 Pro' (143.97 MB)
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Using Xcode 26.1.1 found in /Applications/Xcode_26.1.1.app
�[40m�[37mdbug�[39m�[22m�[49m: xcrun simctl list --json --json-output /tmp/tmpk4tAsO.tmp
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: No need to boot (already booted): iPhone 11 Pro
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: Installing on iPhone 11 Pro (425A4FD7-3B7D-4DB0-959D-44C3BEFF9531) by executing 'xcrun simctl install 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: The bundle id com.microsoft.maui.controls.devicetests was successfully installed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'Microsoft.Maui.Controls.DeviceTests' was installed successfully on 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Starting test run for com.microsoft.maui.controls.devicetests..
�[40m�[37mdbug�[39m�[22m�[49m: *** Executing 'Microsoft.Maui.Controls.DeviceTests' on ios-simulator-64_18.6 'iPhone 11 Pro' ***
�[40m�[37mdbug�[39m�[22m�[49m: Test log server listening on: 0.0.0.0:55598
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/system.log
�[40m�[37mdbug�[39m�[22m�[49m: Simulator 'iPhone 11 Pro' is already booted
�[40m�[37mdbug�[39m�[22m�[49m: Scanning log stream for Microsoft.Maui.Controls.DeviceTests into '/Users/cloudtest/vss/_work/1/s/artifacts/log/Microsoft.Maui.Controls.DeviceTests.log'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Launching the app
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Connection from 127.0.0.1:55607 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260417_025045.log
�[40m�[37mdbug�[39m�[22m�[49m: Tests have finished executing
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Test run completed
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /bin/bash
�[40m�[37mdbug�[39m�[22m�[49m: cp: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/data/Containers/Data/Application/B19C83BA-BE85-49A3-8794-92626BBC8A37/Documents/test-results.xml: No such file or directory
�[40m�[37mdbug�[39m�[22m�[49m: Process bash exited with 1
�[40m�[37mdbug�[39m�[22m�[49m: Test run succeeded
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 0 seconds for the crash report service...
�[40m�[32minfo�[39m�[22m�[49m: Application finished the test run successfully
�[40m�[32minfo�[39m�[22m�[49m: Tests run: 202 Passed: 202 Inconclusive: 0 Failed: 0 Ignored: 0
�[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.1.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
XHarness exit code: 0
Passed: 416
Failed: 0
Tests completed successfully
🔴 Without fix — 📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor): PASS ❌ · 36s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Release/net10.0-ios26.0/Microsoft.Maui.dll
TestUtils.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Release/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Release/net10.0-ios26.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
TestUtils.DeviceTests.Runners -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.Runners.dll
Core.DeviceTests.Shared -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core.DeviceTests.Shared/Release/net10.0-ios/Microsoft.Maui.DeviceTests.Shared.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Release/net10.0-ios26.0/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
TestUtils.DeviceTests.Runners.SourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners.SourceGen/Release/netstandard2.0/Microsoft.Maui.TestUtils.DeviceTests.Runners.SourceGen.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.controls.devicetests
App Id: com.microsoft.maui.controls.devicetests
Controls.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.dll
Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
IL stripping assemblies
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:05.76
[11.0.0-prerelease.26107.1+bfbac237157e59cdbd19334325b2af80bd6e9828] XHarness command issued: apple test --app artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app --target ios-simulator-64_18.6 --device 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 -o artifacts/log --timeout 01:00:00 -v --set-env=TestFilter=Category=TabbedPage
�[40m�[32minfo�[39m�[22m�[49m: Preparing run for ios-simulator-64_18.6 targeting 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531
�[40m�[32minfo�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators..
�[40m�[37mdbug�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators. Storing logs into list-ios-simulator-64_18.6-20260417_024743.log
�[40m�[32minfo�[39m�[22m�[49m: Found simulator device 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Getting app bundle information from '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling any previous instance of 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.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: Installing application 'Microsoft.Maui.Controls.DeviceTests' on 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: Installing '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app' to 'iPhone 11 Pro' (143.96 MB)
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Using Xcode 26.1.1 found in /Applications/Xcode_26.1.1.app
�[40m�[37mdbug�[39m�[22m�[49m: xcrun simctl list --json --json-output /tmp/tmpCrMHoQ.tmp
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: No need to boot (already booted): iPhone 11 Pro
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: Installing on iPhone 11 Pro (425A4FD7-3B7D-4DB0-959D-44C3BEFF9531) by executing 'xcrun simctl install 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: The bundle id com.microsoft.maui.controls.devicetests was successfully installed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'Microsoft.Maui.Controls.DeviceTests' was installed successfully on 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Starting test run for com.microsoft.maui.controls.devicetests..
�[40m�[37mdbug�[39m�[22m�[49m: *** Executing 'Microsoft.Maui.Controls.DeviceTests' on ios-simulator-64_18.6 'iPhone 11 Pro' ***
�[40m�[37mdbug�[39m�[22m�[49m: Test log server listening on: 0.0.0.0:54532
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/system.log
�[40m�[37mdbug�[39m�[22m�[49m: Simulator 'iPhone 11 Pro' is already booted
�[40m�[37mdbug�[39m�[22m�[49m: Scanning log stream for Microsoft.Maui.Controls.DeviceTests into '/Users/cloudtest/vss/_work/1/s/artifacts/log/Microsoft.Maui.Controls.DeviceTests.log'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Launching the app
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Connection from 127.0.0.1:54551 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260417_024745.log
�[40m�[37mdbug�[39m�[22m�[49m: Tests have finished executing
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Test run completed
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /bin/bash
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 137
�[40m�[37mdbug�[39m�[22m�[49m: cp: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/data/Containers/Data/Application/A1E00DB8-4A3C-43EF-AA83-845B3E39330F/Documents/test-results.xml: No such file or directory
�[40m�[37mdbug�[39m�[22m�[49m: Process bash exited with 1
�[40m�[37mdbug�[39m�[22m�[49m: Test run succeeded
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 0 seconds for the crash report service...
�[40m�[32minfo�[39m�[22m�[49m: Application finished the test run successfully
�[40m�[32minfo�[39m�[22m�[49m: Tests run: 13 Passed: 12 Inconclusive: 0 Failed: 0 Ignored: 1
�[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.1.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
XHarness exit code: 0
Passed: 214
Failed: 0
Tests completed successfully
🟢 With fix — 📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor): PASS ✅ · 40s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Release/net10.0-ios26.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Release/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
TestUtils.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Release/net10.0-ios26.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
TestUtils.DeviceTests.Runners -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.Runners.dll
Core.DeviceTests.Shared -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core.DeviceTests.Shared/Release/net10.0-ios/Microsoft.Maui.DeviceTests.Shared.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Release/net10.0-ios26.0/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.13867298
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
TestUtils.DeviceTests.Runners.SourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners.SourceGen/Release/netstandard2.0/Microsoft.Maui.TestUtils.DeviceTests.Runners.SourceGen.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.controls.devicetests
App Id: com.microsoft.maui.controls.devicetests
Controls.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.dll
Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
IL stripping assemblies
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:05.36
[11.0.0-prerelease.26107.1+bfbac237157e59cdbd19334325b2af80bd6e9828] XHarness command issued: apple test --app artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app --target ios-simulator-64_18.6 --device 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 -o artifacts/log --timeout 01:00:00 -v --set-env=TestFilter=Category=TabbedPage
�[40m�[32minfo�[39m�[22m�[49m: Preparing run for ios-simulator-64_18.6 targeting 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531
�[40m�[32minfo�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators..
�[40m�[37mdbug�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators. Storing logs into list-ios-simulator-64_18.6-20260417_025153.log
�[40m�[32minfo�[39m�[22m�[49m: Found simulator device 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Getting app bundle information from '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling any previous instance of 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.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: Installing application 'Microsoft.Maui.Controls.DeviceTests' on 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: Installing '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app' to 'iPhone 11 Pro' (143.97 MB)
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Using Xcode 26.1.1 found in /Applications/Xcode_26.1.1.app
�[40m�[37mdbug�[39m�[22m�[49m: xcrun simctl list --json --json-output /tmp/tmprxgFk6.tmp
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: No need to boot (already booted): iPhone 11 Pro
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: Installing on iPhone 11 Pro (425A4FD7-3B7D-4DB0-959D-44C3BEFF9531) by executing 'xcrun simctl install 425A4FD7-3B7D-4DB0-959D-44C3BEFF9531 /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: The bundle id com.microsoft.maui.controls.devicetests was successfully installed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'Microsoft.Maui.Controls.DeviceTests' was installed successfully on 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Starting test run for com.microsoft.maui.controls.devicetests..
�[40m�[37mdbug�[39m�[22m�[49m: *** Executing 'Microsoft.Maui.Controls.DeviceTests' on ios-simulator-64_18.6 'iPhone 11 Pro' ***
�[40m�[37mdbug�[39m�[22m�[49m: Test log server listening on: 0.0.0.0:56049
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/system.log
�[40m�[37mdbug�[39m�[22m�[49m: Simulator 'iPhone 11 Pro' is already booted
�[40m�[37mdbug�[39m�[22m�[49m: Scanning log stream for Microsoft.Maui.Controls.DeviceTests into '/Users/cloudtest/vss/_work/1/s/artifacts/log/Microsoft.Maui.Controls.DeviceTests.log'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Launching the app
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Connection from 127.0.0.1:56069 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260417_025157.log
�[40m�[37mdbug�[39m�[22m�[49m: Tests have finished executing
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Test run completed
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 137
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /bin/bash
�[40m�[37mdbug�[39m�[22m�[49m: cp: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/425A4FD7-3B7D-4DB0-959D-44C3BEFF9531/data/Containers/Data/Application/89E1A613-6CC0-4817-8720-51EABADA7F85/Documents/test-results.xml: No such file or directory
�[40m�[37mdbug�[39m�[22m�[49m: Process bash exited with 1
�[40m�[37mdbug�[39m�[22m�[49m: Test run succeeded
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 0 seconds for the crash report service...
�[40m�[32minfo�[39m�[22m�[49m: Application finished the test run successfully
�[40m�[32minfo�[39m�[22m�[49m: Tests run: 13 Passed: 12 Inconclusive: 0 Failed: 0 Ignored: 1
�[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.1.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
XHarness exit code: 0
Passed: 428
Failed: 0
Tests completed successfully
⚠️ Issues found
- ❌ ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether) PASSED without fix (should fail) — tests don't catch the bug
- ❌ TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor) PASSED without fix (should fail) — tests don't catch the bug
📁 Fix files reverted (5 files)
src/Controls/samples/Controls.Sample.Sandbox/App.xaml.cssrc/Controls/samples/Controls.Sample.Sandbox/SandboxShell.xamlsrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/SafeShellTabBarAppearanceTracker.cssrc/Controls/src/Core/Compatibility/Handlers/TabbedPage/iOS/TabbedRenderer.cssrc/Core/src/Platform/iOS/TabbedViewExtensions.cs
New files (not reverted):
src/Controls/samples/Controls.Sample.Sandbox/MainPage2.xamlsrc/Controls/samples/Controls.Sample.Sandbox/MainPage2.xaml.cs
|
Yeah I think we need to deep dive into this, I think iOS just removed certain capabilities to do these things. Closing for now. |
🤖 AI Summary
📊 Review Session —
|
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #34688 | Skip UITabBarAppearance Normal on iOS 26+; use pre-colored AlwaysOriginal images + pending color cache for layout resets | ❌ Gate FAILED | 7 impl + 4 sandbox | AutoResizeTabBarImage ordering bug; sandbox files leaked; gate test doesn't catch the bug |
🔬 Code Review — Deep Analysis
Code Review — PR #34688
Independent Assessment
What this changes: Two iOS rendering implementations (SafeShellTabBarAppearanceTracker for Shell and TabbedRenderer for TabbedPage) have been modified to work around a behavioral change in iOS 26's "liquid glass" tab bar. The approach: (1) skip the UITabBarAppearance Normal-state pipeline on iOS 26+, (2) set UnselectedItemTintColor directly, and (3) bake colors into tab icon images via AlwaysOriginal rendering mode ("pre-colored images"). A new shared extension method ApplyPreColoredImagesForIOS26 handles the image tinting, using a ConditionalWeakTable to cache original template images. Colors are also persisted in _pending* fields and re-applied on every layout pass because UIKit resets them during layout.
Inferred motivation: UITabBarAppearance Normal state (used for unselected tab colors) appears to be ignored by the iOS 26 liquid glass compositing pipeline, causing BarTextColor and UnselectedTabColor to have no visible effect on unselected tabs.
Reconciliation with PR Narrative
Author claims: iOS 26 uses a dual-layer compositing architecture with a destOut filter that strips TintColor/UnselectedItemTintColor from the rendering path entirely, regardless of how they are set. The fix applies the same AlwaysOriginal baking technique used in PR #34326 for back button colors.
Agreement/disagreement: The root cause analysis is plausible and the approach is consistent with the cited back-button fix. The structural design (cache-and-reapply on layout, skip appearance pipeline for iOS 26+) is well-reasoned. One specific claim requires scrutiny: that AlwaysTemplate + UnselectedItemTintColor was tried and failed (PR #32153). If UnselectedItemTintColor genuinely has no visual effect on iOS 26, then _pendingUnselectedTintColor being re-set in UpdateLayout / ViewDidLayoutSubviews is redundant for the visual rendering — it only matters for property-based tests. The PR is honest about this.
Findings
❌ Error — Sandbox dev files included in production PR
App.xaml.cs, MainPage2.xaml, MainPage2.xaml.cs, and SandboxShell.xaml appear to be leftover development scaffolding. App.xaml.cs hardwires the app to always launch SandboxShell, removing the NavigationPage(new MainPage()) path entirely. These changes would break the Sandbox app for any developer who next uses it, and signal that the PR was not cleaned up before submission.
Files: src/Controls/samples/Controls.Sample.Sandbox/App.xaml.cs, MainPage2.xaml, MainPage2.xaml.cs, SandboxShell.xaml
❌ Error — AutoResizeTabBarImage unconditionally forces AlwaysTemplate on iOS 26+
// TabbedViewExtensions.cs line 258-261
if (OperatingSystem.IsIOSVersionAtLeast(26) || OperatingSystem.IsMacCatalystVersionAtLeast(26))
{
return resizedImage?.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate);
}This changes the rendering mode of all resized images to AlwaysTemplate on iOS 26+, including images where the caller intentionally provided AlwaysOriginal multi-color icons. After AutoResizeTabBarImage returns, ApplyPreColoredImagesForIOS26 sees img.RenderingMode != AlwaysOriginal and tints the image — overwriting a multi-color icon with a flat tinted copy. The original intent of the guard if (img.RenderingMode != AlwaysOriginal) (line 191) was to avoid re-tinting an already-tinted image, but because AutoResizeTabBarImage strips the AlwaysOriginal mode first, that guard is never reached in the intended case.
The AlwaysTemplate conversion should happen only inside ApplyPreColoredImagesForIOS26 when building the template baseline, not at the resize step.
⚠️ Warning — BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor has a MacCatalyst skip marked "fixme"
A newly-added regression test that permanently skips on MacCatalyst and is marked "fixme" is a deferred bug, not a test. This PR fixes issues that also affect MacCatalyst (IsMacCatalystVersionAtLeast(26) guards are present throughout), but the new test doesn't verify the fix on that platform.
⚠️ Warning — ApplyPreColoredImagesForIOS26 missing [SupportedOSPlatform("maccatalyst26.0")]
src/Core/src/Platform/iOS/TabbedViewExtensions.cs line 166–167 — all call sites guard with IsIOSVersionAtLeast(26) || IsMacCatalystVersionAtLeast(26), meaning this method is legitimately called on MacCatalyst 26+. Without the annotation, platform-compatibility analyzers may flag call sites.
⚠️ Warning — CI failure: RunOniOS_MauiReleaseTrimFull ARM64
The maui-pr (Run Integration Tests RunOniOS_MauiReleaseTrimFull ARM64) check is failing. The failure needs to be confirmed as pre-existing before merge.
💡 Suggestion — s_originalTemplateImages cache becomes stale when IconImageSource is updated dynamically
If an app dynamically updates IconImageSource at runtime, s_originalTemplateImages still holds the old template, causing subsequent ApplyPreColoredImagesForIOS26 calls to tint from the stale template using the wrong icon.
💡 Suggestion — BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor silently no-ops on the target OS
The test returns without asserting anything on iOS 26+ (the only OS where the bug manifests). The property-based tests provide iOS 26-specific coverage, but this test is effectively dead on the targeted OS.
Devil's Advocate
On the AutoResizeTabBarImage finding: Most tab bar icons are template images in practice, but MAUI doesn't restrict IconImageSource to template-only images, and users with custom multi-color icons would see silent breakage.
On the sandbox files: These might be intentional for visual demonstration, but altering the shared Sandbox entry point breaks it for other developers.
On CI failure: If RunOniOS_MauiReleaseTrimFull is a known flaky test, the verdict could be softened.
Verdict: NEEDS_CHANGES
Confidence: high
Summary: The fix's design is principled — skipping the appearance pipeline on iOS 26+ and using AlwaysOriginal pre-colored images is the right architectural move. However, two blocking issues remain: (1) sandbox dev files are included and break the shared sandbox entry point, and (2) AutoResizeTabBarImage forces AlwaysTemplate on all images before ApplyPreColoredImagesForIOS26 can inspect the original rendering mode, silently breaking multi-color AlwaysOriginal icons. The missing maccatalyst26.0 annotation and the skipped MacCatalyst test also need resolution. The CI failure in RunOniOS_MauiReleaseTrimFull should be confirmed as pre-existing before merge.
🔧 Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix (claude-opus-4.6) | Preserve original rendering mode in AutoResizeTabBarImage: image.RenderingMode instead of AlwaysTemplate |
✅ PASS | 1 file | Minimal fix; fixes root cause directly |
| 2 | try-fix (claude-sonnet-4.6) | Cache-based re-tint detection via second ConditionalWeakTable + sandbox cleanup + maccatalyst26.0 annotation | ✅ PASS | 2 files | Rendering-mode agnostic but more complex |
| 3 | try-fix (gpt-5.3-codex) | Remove AlwaysTemplate block from AutoResizeTabBarImage; always assign pre-colored images | ❌ BLOCKED | 1 file | App launch failure (XHarness exit 83, environment issue; tests reported 428 pass) |
| 4 | try-fix (gpt-5.4) | Remove iOS 26+ AlwaysTemplate block entirely + add maccatalyst26.0 annotation | ❌ BLOCKED | 1 file | Same app launch failure (environment issue) |
| PR | PR #34688 | Skip UITabBarAppearance Normal on iOS 26+; use pre-colored AlwaysOriginal images + pending color cache | ❌ Gate FAILED | 7 impl + 4 sandbox | AutoResizeTabBarImage ordering bug; sandbox files leaked; gate test design flaw |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 2 | No | Solution space well-covered by Attempts 1 & 2 |
Exhausted: Yes
Selected Fix: Candidate #1 (Attempt 1) — Simplest fix, directly addresses root cause (preserve rendering mode in AutoResizeTabBarImage), 1 file changed, tests pass. The PR should also separately revert sandbox dev files and add the maccatalyst26.0 annotation (from Attempt 2).
📋 Report — Final Recommendation
⚠️ Final Recommendation: REQUEST CHANGES
Phase Status
| Phase | Status | Notes |
|---|---|---|
| Pre-Flight | ✅ COMPLETE | 2 linked issues (#32125, #34605); 11 files changed (7 impl + 4 sandbox) |
| Code Review | NEEDS_CHANGES (high) | 2 errors, 3 warnings, 2 suggestions |
| Gate | ❌ FAILED | iOS — ShellTabBarUnselectedAndTitleColorWorkTogether passes without fix (test design flaw: checks property value, not visual rendering) |
| Try-Fix | ✅ COMPLETE | 4 attempts; 2 passing alternatives found |
| Report | ✅ COMPLETE |
Code Review Impact on Try-Fix
The code review finding about AutoResizeTabBarImage forcing AlwaysTemplate before ApplyPreColoredImagesForIOS26 was the primary driver for all 4 try-fix attempts. Attempt 1 addressed this directly (preserve original rendering mode) and passed. Attempt 2 took a different approach (rendering-mode-agnostic cache check) and also passed — confirming the finding is real and actionable. The failure-mode probe about multi-color AlwaysOriginal icons guided Attempt 1's design. The maccatalyst26.0 annotation finding from code review was incorporated into Attempts 2 and 4.
Summary
PR #34688 fixes a real iOS 26+ Liquid Glass tab bar issue where UITabBarAppearance.Normal state and UnselectedItemTintColor are visually ignored, breaking TabbedPage.BarTextColor (#34605) and Shell.TabBarUnselectedColor (#32125). The fix approach — skipping the appearance pipeline on iOS 26+ and using pre-colored AlwaysOriginal images — is architecturally sound. However, three issues block approval:
AutoResizeTabBarImageordering bug (❌ Error): The method forcesAlwaysTemplateon all images beforeApplyPreColoredImagesForIOS26runs, which defeats the optimization guard and silently breaks multi-colorAlwaysOriginalicons.- Sandbox dev files included (❌ Error):
App.xaml.cs,MainPage2.xaml,MainPage2.xaml.cs, andSandboxShell.xamlchanges hardwire the Sandbox toSandboxShelland should be reverted before merge. - Gate test design flaw:
ShellTabBarUnselectedAndTitleColorWorkTogetherpasses without the fix because it only checkstabBar.UnselectedItemTintColorproperty value — which was already being set by the pre-fix code path. This test does not actually validate that the visual rendering works on iOS 26+.
Root Cause
iOS 26 "Liquid Glass" tab bar uses a dual-layer compositing pipeline with a destOut CALayer filter that strips tint color rendering from unselected items, regardless of UITabBarAppearance Normal state or UnselectedItemTintColor. Pre-colored images with AlwaysOriginal rendering mode survive the pipeline because color is baked into pixel data rather than applied as a tint overlay.
Fix Quality
The PR's core architecture is good. The specific bugs found are fixable:
- For
AutoResizeTabBarImage: ReplaceImageWithRenderingMode(AlwaysTemplate)withImageWithRenderingMode(image.RenderingMode)— preserves the original rendering mode after resize (Attempt 1, ✅ passed). One-line fix. - For sandbox files:
git checkout HEAD -- src/Controls/samples/Controls.Sample.Sandbox/(revert all 4 sandbox files). - For missing annotation: Add
[SupportedOSPlatform("maccatalyst26.0")]toApplyPreColoredImagesForIOS26at line 166. - For gate test: The
ShellTabBarUnselectedAndTitleColorWorkTogethertest's iOS 26+ path should either verify visual rendering or acknowledge it's a property-only check in the test name. The newUnselectedItemTintColorSetFromBarTextColorTabbedPage tests are better-designed.
The Try-Fix exploration confirmed that Attempt 1 (1-line fix to AutoResizeTabBarImage) passes all TabbedPage device tests and directly resolves the ordering bug flagged by code review.
Description
On iOS 26+, Apple's liquid glass tab bar compositing pipeline ignores
UITabBarAppearanceNormal state (TitleTextAttributes,IconColor) ANDUITabBar.UnselectedItemTintColorfor visual rendering, even though the properties are stored correctly. This caused:TabbedPage.BarTextColorto have no visual effect on unselected tabs ([iOS] TabbedPage BarTextColor not applied to unselected tabs #34605)Shell.TabBarUnselectedColorto have no visual effect ([iOS26] TabBarUnselectedColor not working on ios #32125)Root Cause
The iOS 26 liquid glass tab bar uses a dual-layer compositing architecture:
destOutCALayer compositing filter to cut out the selected tabThe compositing pipeline strips all
TintColor/UnselectedItemTintColorfrom the rendering path, regardless of whether they're set via appearance or direct properties.Fix
Bypass the tint pipeline entirely on iOS 26+ by using pre-colored images with
AlwaysOriginalrendering mode viaUIImage.ApplyTintColor(), which bakes the color into image pixel data. This is the same proven approach used for the iOS 26 back button color fix (PR #34326).What changed:
TabbedViewExtensions.cs(shared):ApplyPreColoredImagesForIOS26()method that creates pre-colored tab icon copies usingAlwaysOriginalrenderingConditionalWeakTableto avoid quality degradationSetTitleTextAttributesfor text colorSafeShellTabBarAppearanceTracker.cs(Shell):UpdateLayout()(liquid glass resets properties during layout)TabbedRenderer.cs(TabbedPage):ViewDidLayoutSubviews()Pre-iOS 26 behavior is completely unchanged.
Why not
AlwaysTemplate+UnselectedItemTintColor?This was attempted in the previously closed PR #32153, but
AlwaysTemplaterelies on the tint pipeline — which is exactly what iOS 26 liquid glass ignores.AlwaysOriginalbakes color into pixel data, which survives the compositing.Test Results
Issues Fixed
Fixes #32125
Fixes #34605