[iOS, Mac] Fix Shell back button history menu does not update after runtime change - #35542
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35542Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35542" |
|
Hey there @@HarishwaranVijayakumar! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
|
/review -b feature/regression-check -p ios |
|
/review -b feature/regression-check -p ios |
|
/review -b feature/regression-check -p ios |
|
/review -b feature/refactor-copilot-yml |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 2 findings
See inline comments for details.
| { | ||
| NavigationItem.Title = _context.Shell.Toolbar.Title; | ||
| } | ||
| else if (Page?.IsSet(Page.TitleProperty) == true) |
There was a problem hiding this comment.
[major] Navigation & Shell — This only updates back-stack UINavigationItem.Title when Page.TitleProperty is locally set, so clearing the title leaves the previous native title stale. Concrete scenario: a page title is changed from "Home" to cleared/default while the page is on the Shell back stack; OnPagePropertyChanged calls UpdateTitle(), but this branch is skipped and iOS continues to show the old back-button/history title. Please mirror the effective-title semantics used by ShellToolbar.UpdateTitle() for the non-current page, including assigning an empty string/null when the page title is cleared.
|
|
||
| // Verify back button now shows updated title "Accueil" | ||
| // Without the fix, UINavigationItem.Title is stale and still shows "Home" | ||
| App.WaitForElement("Accueil"); |
There was a problem hiding this comment.
[moderate] Regression Prevention and Test Coverage — The regression test only waits for/taps the visible back button text "Accueil"; it does not exercise the history-menu path named by the issue, and it remains dependent on native accessibility exposing the back-button title. Since the supplied gate already failed unexpectedly and the test has to skip iOS 26 for this exact accessibility reason, this is likely too brittle as the sole regression. Please either validate the native history-menu/back-stack title through a deterministic device-test hook, or make the UI test explicitly cover only the supported visible-back-button scenario and add a lower-level assertion for UINavigationItem.Title.
|
/review -b feature/refactor-copilot-yml |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 2 findings
See inline comments for details.
| { | ||
| NavigationItem.Title = _context.Shell.Toolbar.Title; | ||
| } | ||
| else if (Page?.IsSet(Page.TitleProperty) == true) |
There was a problem hiding this comment.
[major] Logic and Correctness — This skips updating a back-stack page when TitleProperty is cleared/defaulted. OnPagePropertyChanged still calls UpdateTitle() for hidden pages, but once ToolbarReady() is false this branch only assigns NavigationItem.Title when Page.TitleProperty is locally set. A previous page that had Title = "Home" and later calls ClearValue(Page.TitleProperty) during a localization/default-title refresh leaves the native UINavigationItem.Title as "Home", so the iOS back button/history menu remains stale. Update the native title for every back-stack TitleProperty change, including clearing to null/empty, rather than gating on IsSet.
|
|
||
| // Verify back button now shows updated title "Accueil" | ||
| // Without the fix, UINavigationItem.Title is stale and still shows "Home" | ||
| App.WaitForElement("Accueil"); |
There was a problem hiding this comment.
[moderate] Regression Prevention — This asserts the visible back button text on a two-page stack, but the reported regression is the iOS long-press back-history menu. With only Home -> Detail, the test can pass without ever opening or validating the history menu path. Please make the repro stack deep enough to show a back-history menu and use the existing long-press pattern (App.LongPress("Back")) to assert/select the updated history item.
|
/review -b feature/refactor-copilot-yml |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 2 findings
See inline comments for details.
| { | ||
| NavigationItem.Title = _context.Shell.Toolbar.Title; | ||
| } | ||
| else if (Page?.IsSet(Page.TitleProperty) == true) |
There was a problem hiding this comment.
[major] Logic and Correctness — This only updates hidden-page NavigationItem.Title while Page.TitleProperty is locally set. If a page previously had a local title and that value is later cleared with ClearValue(Page.TitleProperty) while the page is on the back stack, IsSet becomes false and this method leaves the old native title in place, so the iOS back button/history menu can still show stale text. Please clear/update NavigationItem.Title for the hidden-page TitleProperty change even when the property is no longer locally set, or otherwise track and reset titles that this code previously wrote.
| { | ||
| // iOS 26+ no longer exposes the back button title text via accessibility, | ||
| // so there is no reliable way to assert the updated title in a UI test. | ||
| if (App is AppiumIOSApp iosApp && HelperExtensions.IsIOS26OrHigher(iosApp)) |
There was a problem hiding this comment.
[major] Regression Prevention — The issue was reported on iOS 26 and specifically affects the long-press back-history menu, but this test skips iOS 26 entirely and only asserts the visible two-page back button text via accessibility. That can pass while the reported history menu remains stale on the affected OS. Please add coverage that exercises the reported scenario on iOS 26, e.g. a lower-level/handler test that inspects the UINavigationItem/back item title used by the history menu, or an automation path that opens the long-press menu instead of skipping the affected platform.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions?
As per the AI suggestion, I have modified the fix. |
|
/review -b feature/enhanced-reviewer -p ios |
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions?
|
/review -b feature/enhanced-reviewer -p ios |
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@HarishwaranVijayakumar — new AI review results are available based on this last commit:
0e97b65. To request a fresh review after new comments or commits, comment/review rerun.
Review Sessions — click to expand
Gate — Test Before & After Fix
Gate Result: ❌ FAILED
Platform: IOS · Base: main · Merge base: bb4e7040
🩺 Test does not reproduce the bug — ran the same in both states (PASS without fix, PASS with fix). The repro test is not exercising the issue. Strengthen the test before reviewing the fix.
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ Issue35471 Issue35471 |
❌ PASS — 332s | ✅ PASS — 123s |
🔴 Without fix — 🖥️ Issue35471: PASS ❌ · 332s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 652 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 1.42 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 4.81 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 6.86 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 6.89 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 6.88 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 6.89 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 6.89 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 6.92 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 5.49 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 6.92 sec).
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.uitests
App Id: com.microsoft.maui.uitests
Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.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.
Build succeeded.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
1 Warning(s)
0 Error(s)
Time Elapsed 00:03:05.25
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 753 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 753 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 754 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 753 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 753 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 1 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 815 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 135 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 1.07 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 2.42 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 3.02 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 6.88 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 6.91 sec).
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.07] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.21] Discovered: Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 6/13/2026 8:43:29 AM FixtureSetup for Issue35471(iOS)
>>>>> 6/13/2026 8:43:34 AM ShellBackButtonHistoryUpdatesAfterTitleChange Start
>>>>> 6/13/2026 8:43:34 AM ShellBackButtonHistoryUpdatesAfterTitleChange Stop
ShellBackButtonHistoryUpdatesAfterTitleChange: iOS 26+ does not expose back button title text via accessibility
Skipped ShellBackButtonHistoryUpdatesAfterTitleChange [69 ms]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35471.trx
Test Run Successful.
Total tests: 1
Skipped: 1
Total time: 1.4952 Minutes
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35471.trx
🟢 With fix — 🖥️ Issue35471: PASS ✅ · 123s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 422 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 445 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 449 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 501 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 519 ms).
6 of 11 projects are up-to-date for restore.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.uitests
App Id: com.microsoft.maui.uitests
Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.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.
Build succeeded.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
1 Warning(s)
0 Error(s)
Time Elapsed 00:01:04.29
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 380 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 430 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 380 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 462 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 486 ms).
8 of 13 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14370768
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.06] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.21] Discovered: Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 6/13/2026 8:45:33 AM FixtureSetup for Issue35471(iOS)
>>>>> 6/13/2026 8:45:38 AM ShellBackButtonHistoryUpdatesAfterTitleChange Start
>>>>> 6/13/2026 8:45:38 AM ShellBackButtonHistoryUpdatesAfterTitleChange Stop
ShellBackButtonHistoryUpdatesAfterTitleChange: iOS 26+ does not expose back button title text via accessibility
Skipped ShellBackButtonHistoryUpdatesAfterTitleChange [62 ms]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35471.trx
Test Run Successful.
Total tests: 1
Skipped: 1
Total time: 24.6729 Seconds
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35471.trx
⚠️ Failure Details
- ❌ Issue35471 PASSED without fix (should fail) — tests don't catch the bug
📁 Fix files reverted (2 files)
eng/pipelines/ci-copilot.ymlsrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
UI Tests
Full UI test matrix will run (no specific categories detected from PR changes).
Pre-Flight — Context & Validation
Issue: #35471 - iOS Shell back button history menu does not update after runtime culture change
PR: #35542 - Fix Shell iOS back button/history menu title updates
Platforms Affected: iOS, MacCatalyst
Files Changed: 13 implementation/infrastructure, 2 test
Key Findings
- GitHub CLI is unauthenticated in this environment, so PR/issue body, comments, inline reviews, and required checks could not be fetched live; local branch
pr-review-35542was used as the PR source. - The focused Shell fix changes
ShellPageRendererTracker.UpdateTitle()so non-visible/back-stack pages assignNavigationItem.Title = Page?.Titleinstead of returning when the Shell toolbar is not ready. - Added UI coverage is iOS/MacCatalyst-only and Shell-category, but it skips iOS 26+ and validates visible back-button text rather than the long-press back-history menu reported in #35471.
- Local diff also includes Copilot CI/reviewer telemetry changes unrelated to the iOS Shell title fix.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: low
Errors: 2 | Warnings: 2 | Suggestions: 0
Key code review findings:
- ❌
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35471.cs:24skips iOS 26+, the affected platform from the issue report. - ❌
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35471.cs:39validates visible back-button text, not the long-press back-history menu behavior. ⚠️ .github/scripts/shared/Aggregate-CopilotTokenUsage.ps1:166recursively trusts broad downloaded artifact trees for token telemetry aggregation.⚠️ .github/scripts/Review-PR.ps1:760can throw when compact context telemetry has no suffix.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35542 | In ShellPageRendererTracker.UpdateTitle(), use Shell toolbar title for the current toolbar page and assign Page?.Title to UINavigationItem.Title for non-toolbar/back-stack pages. |
❌ Gate failed before this run | ShellPageRendererTracker.cs, Issue35471 UI test files |
Original PR; code direction is plausible but test coverage is insufficient. |
Code Review — Deep Analysis
Code Review — PR #35542
Independent Assessment
What this changes: Updates iOS Shell title propagation for back-stack pages, adds an Issue35471 UI repro/test, and local checkout also contains unrelated Copilot CI/token-usage pipeline changes.
Inferred motivation: Fix stale iOS Shell back-button/history-menu titles after runtime title/culture changes; improve reviewer telemetry.
Reconciliation with PR Narrative
Author claims: Fixes #35471 by updating UINavigationItem.Title for non-visible Shell pages and adds UI coverage.
Agreement/disagreement: The code matches the title-update claim, but the test does not cover the reported iOS 26 long-press history-menu scenario. The local checkout includes many CI changes not described by the PR narrative.
Prior Review Reconciliation
| Prior ❌ Error Finding | Source | Status | Evidence |
|---|---|---|---|
| Test skips iOS 26+, the affected platform, leaving no automated regression for the reported behavior | MauiBot inline Issue35471.cs:24 |
❌ Unresolved | Current test still calls Assert.Ignore on iOS 26+ at src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35471.cs:24. |
| Test validates visible two-page back button text, not long-press history menu | MauiBot inline Issue35471.cs:39 |
❌ Unresolved | Current test only WaitForElement("Accueil") and taps it; no long-press/history-menu path. |
Clearing TitleProperty leaves stale native title |
MauiBot inline ShellPageRendererTracker.cs:213 |
✅ Fixed | Current UpdateTitle() assigns NavigationItem.Title = Page?.Title without an IsSet gate at line 216. |
Blast Radius Assessment
- Runs for all instances: Yes —
UpdateTitle()is shared Shell iOS/MacCatalyst navigation plumbing. - Startup impact: Low; invoked during page setup/title changes, not static startup.
- Static/shared state: No.
CI Status
- Required-check result:
gh pr checks --requiredunavailable because GitHub CLI is unauthenticated. - API fallback:
maui-prfailed;license/clapassed. - Classification: red CI, likely infra/flaky from Build Analysis (
Microsoft.Maui.Core.After.targetsmissing; Dispatcher Helix failures with known failure-rate links), but not clean. - Action taken: invoked
azdo-build-investigatorcontext; confidence capped low; no LGTM.
Findings
❌ Error — Regression test skips the reported affected platform
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35471.cs:24
Issue #35471 reports iOS 26 and specifically the long-press back-button history menu. The only added regression test skips iOS 26+, so it cannot fail on the platform where the bug was reported. This leaves the fix unverified by automation for the target scenario.
❌ Error — Test does not exercise the history-menu behavior
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35471.cs:39
The test uses a two-page stack and taps visible back-button text "Accueil". The issue is stale text in the iOS long-press back-button history menu. A visible back-button assertion can pass while the history menu remains stale.
⚠️ Warning — Token usage aggregation trusts broad artifact tree
.github/scripts/shared/Aggregate-CopilotTokenUsage.ps1:166
Read-CopilotTokenUsageRecords recursively accepts every copilot-token-usage-*.json under downloaded CopilotLogs, which also contains copied CustomAgentLogsTmp. This can allow PR-controlled artifacts to poison telemetry summaries dispatched later. Restrict to CopilotLogs/copilot-token-usage/raw and validate schema/source paths.
⚠️ Warning — Unsuffixed compact context values throw
.github/scripts/Review-PR.ps1:760
Convert-CopilotCompactNumber allows no suffix, but calls $Matches['suffix'].ToUpperInvariant(). A footer like GPT-5.5 • 200000 context throws, dropping context-window telemetry. Coalesce suffix before switching.
Failure-Mode Probing
- iOS 26 reported path: skipped, so no regression signal.
- Back-stack title cleared: current implementation assigns
Page?.Title, so stale title should clear. - Hidden page title update:
OnPagePropertyChangedcallsUpdateTitle(), and non-toolbar path updatesNavigationItem.Title. - Token artifact poisoning: broad recursive scan can include matching files outside trusted telemetry raw folder.
Verdict: NEEDS_CHANGES
Confidence: low — platform Shell change plus red/undetermined CI.
Summary: The code fix direction is plausible, but prior critical test-coverage findings remain unresolved. The regression test must cover the affected iOS 26/history-menu scenario or add a deterministic lower-level assertion before merge.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix | Update back-stack NavigationItem.Title only from OnPagePropertyChanged when Page.TitleProperty changes and the page is not toolbar-ready. |
❌ Failed | 1 file | Build/test command ran, but Issue35471 was skipped on iOS 26+, so no regression validation; narrower than PR fix. |
| 2 | try-fix | Track predecessor page in ShellSectionRenderer and update predecessor BackBarButtonItem.Title through the displayed page tracker. |
❌ Failed | 2 files | Builds, but Issue35471 was skipped on iOS 26+; uncertain whether history menu uses BackBarButtonItem or NavigationItem title. |
| 3 | try-fix | Let ShellSectionRenderer own back-stack NavigationItem.Title synchronization for tracked non-top stack pages. |
❌ Failed | 1 file | Builds, but Issue35471 was skipped on iOS 26+; plausible but more invasive than PR fix and needs native-state device coverage. |
| PR | PR #35542 | Generalize UpdateTitle() so current pages use Shell toolbar title and back-stack pages use Page?.Title. |
❌ Gate failed | 3 focused files | Original PR; simplest product-code approach among explored options, but current test coverage is insufficient. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| maui-expert-reviewer | 1 | Yes | Suggested moving back-stack synchronization to Shell navigation-stack ownership; candidate 1 implemented a safer tracker-local subset after root-renderer risk review. |
| maui-expert-reviewer | 2 | Yes | Suggested updating predecessor BackBarButtonItem.Title from ShellSectionRenderer; candidate 2 implemented this. |
| maui-expert-reviewer | 3 | Yes | Suggested ShellSection-level NavigationItem.Title synchronization for non-top stack pages; candidate 3 implemented this. |
| maui-expert-reviewer | 4 | No | No further product-level options beyond per-page tracker sync, explicit back item sync, and stack-wide NavigationItem.Title sync; remaining ideas would be lifecycle/event-placement variations. |
Candidate Narratives
try-fix-1
Handle Page.TitleProperty changes directly in ShellPageRendererTracker.OnPagePropertyChanged: current/toolbar-ready pages keep the original UpdateTitle() path; non-toolbar pages set NavigationItem.Title = Page?.Title. This failed as a candidate because the focused iOS test skipped on iOS 26+ and the approach may miss initial synchronization/non-property-change callers.
try-fix-2
Keep UpdateTitle() current-toolbar-only and update the predecessor BackBarButtonItem.Title through the displayed page tracker from a ShellSectionRenderer predecessor-page subscription. This built after a nullable fix, but failed as a candidate because the focused iOS test skipped and the native source for the long-press history menu may be NavigationItem.Title, not BackBarButtonItem.Title.
try-fix-3
Keep UpdateTitle() unchanged and let ShellSectionRenderer track stack pages, subscribe to Page.TitleProperty, and update non-top controllers' NavigationItem.Title. This built, but failed as a candidate because the focused iOS test skipped; it is more invasive than the PR fix and needs direct native-state device coverage before selection.
Exhausted: Yes
Selected Fix: None of the alternatives — no candidate passed meaningful regression validation or was demonstrably better than PR #35542. The PR's product-code fix remains the simplest explored approach, but the test strategy needs improvement because the available iOS 26+ run skips the only Issue35471 assertion.
Report — Final Recommendation
Comparative Report — PR #35542
Candidate ranking
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | pr-plus-reviewer |
❌ Gate failed / insufficient Issue35471 validation | Best overall candidate. It keeps the raw PR's localized and plausible NavigationItem.Title synchronization for back-stack pages and also fixes the expert reviewer's actionable telemetry parser warning. |
| 2 | pr |
❌ Gate failed / insufficient Issue35471 validation | Best Shell product-code approach among the original candidates: focused, low-invasiveness, and directly updates the native title state likely used by iOS back-history UI. Ranked below pr-plus-reviewer because it leaves the reviewer warning unresolved. |
| 3 | try-fix-1 |
❌ Failed / skipped on iOS 26+ | Narrower than the PR fix because it updates back-stack title state only from direct Page.TitleProperty changes. It may miss initial synchronization and other UpdateTitle() callers. |
| 4 | try-fix-3 |
❌ Failed / skipped on iOS 26+ | Plausible but more invasive. It adds ShellSection-level tracking/subscriptions and a second synchronization path for back-stack page titles, increasing lifecycle risk without stronger validation. |
| 5 | try-fix-2 |
❌ Failed / skipped on iOS 26+ | Riskiest functional uncertainty. It updates BackBarButtonItem.Title, but the reported long-press history menu may use each controller's NavigationItem.Title instead. |
Comparison details
pr
The raw PR changes ShellPageRendererTracker.UpdateTitle() so visible/current pages use the Shell toolbar title and non-toolbar/back-stack pages update NavigationItem.Title from Page?.Title. This is the simplest product-code change and directly targets stale native back-stack title state.
Its major weakness is evidence: the added Issue35471 UI test skips iOS 26+ and checks visible back-button text rather than the long-press back-history menu. The gate failed because the test passed without the fix, so it does not prove the regression.
pr-plus-reviewer
This candidate is the raw PR plus the expert reviewer's actionable warning fix in .github/scripts/Review-PR.ps1. The sandbox patch makes unsuffixed Copilot CLI context values parse as plain numbers and adds a focused test for GPT-5.5 • 200000 context.
This does not change Shell behavior or repair the failed Issue35471 regression coverage. It is still ranked first because no candidate passed meaningful regression validation, and this candidate strictly improves the full PR diff without adding product-code risk.
try-fix-1
This candidate updates NavigationItem.Title from OnPagePropertyChanged only when Page.TitleProperty changes and the page is not toolbar-ready. It is narrower than the PR fix and may miss initial title synchronization paths that call UpdateTitle() outside direct title-change notifications.
try-fix-2
This candidate tracks the predecessor page in ShellSectionRenderer and updates the displayed page tracker's back-button title. It adds lifecycle/subscription complexity and may update the wrong native property for the reported long-press history menu, making it weaker than the NavigationItem.Title approaches.
try-fix-3
This candidate lets ShellSectionRenderer own back-stack NavigationItem.Title synchronization for tracked non-top pages. It is directionally plausible but more invasive than the PR fix because it adds a second title synchronization system and page subscription set.
Winner
Winner: pr-plus-reviewer.
Rationale: no candidate passed regression validation, so the winner is the safest and most complete candidate among failed/insufficiently validated options. pr-plus-reviewer preserves the raw PR's simplest Shell fix and incorporates the expert reviewer's validated telemetry parser correction, while all try-fix alternatives either cover a narrower path or add more lifecycle/native-state risk.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
…untime change (#35542) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details - iOS Shell back button doesn't update its title when a back-stack page's Title changes at runtime (e.g., after locale/culture change). Shows stale text. ### Root Cause of the issue - UpdateTitle() in ShellPageRendererTracker.cs is guarded by ToolbarReady() which returns false for non-visible pages → early return → UINavigationItem.Title never updated for back-stack pages. ### Description of Change ### Bug Fix: Shell Navigation Title Updates * Updated the `UpdateTitle` method in `ShellPageRendererTracker.cs` to set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes. ### Test Coverage * Added a new UI test case `Issue35471` to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change. * Added a sample issue page (`Issue35471`) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI. <!-- Enter description of the fix in this section --> ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #35471 ### Tested the behaviour in the following platforms - [ ] - Windows - [ ] - Android - [x] - iOS - [x] - Mac ### Output | Before | After | |----------|----------| | <video src="https://github.com/user-attachments/assets/243560ab-b8e4-42c7-9ae7-4a0681812cac"> | <video src="https://github.com/user-attachments/assets/af1d1343-eb05-414a-9a53-6eb862a5ded2"> | <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. -->
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Issue Details
Root Cause of the issue
Description of Change
Bug Fix: Shell Navigation Title Updates
UpdateTitlemethod inShellPageRendererTracker.csto set the navigation item title to the current page's title if the toolbar is not ready, ensuring that back button/history menus show the correct title after runtime changes.Test Coverage
Issue35471to verify that the back button history updates when the previous page's title changes at runtime, specifically simulating a culture change.Issue35471) to manually reproduce and test the scenario where the previous page's title is updated and the change should be reflected in the navigation UI.Issues Fixed
Fixes #35471
Tested the behaviour in the following platforms
Output
35471-beforefixmac.mov
35471-afterfixmac.mov