iOS NavigationHandler
Unified iOS NavigationHandler
Target: .NET 10
Goal
Create a NavigationHandler for iOS in Core that both Shell and NavigationPage use. This aligns iOS with WinUI (already unified) and Android (planned for .NET 11).
Background
- WinUI already has a shared NavigationHandler used by both Shell and NavigationPage
- Android Shell Handler spec targets .NET 11 with the same unification goal
- iOS currently has separate implementations: NavigationRenderer for NavigationPage, Shell-specific renderers for Shell navigation
- We can learn from both existing iOS implementations to build the right unified handler
Rollout Strategy
-
Build the unified NavigationHandler for .NET 10
-
Gate behind AppContext switch - Wire both Shell and NavigationPage to use the new handler when the switch is enabled
-
Switch disabled by default initially - Allows testing and validation without affecting existing apps
-
Enable for Shell and NavigationPage - Once validated, flip the switch to make it the default path
This approach lets us ship the work in .NET 10 while controlling the rollout and having a fallback if issues arise.
Guidelines
-
Create NavigationHandler in Core - Single handler for iOS navigation stack management
-
Learn from both implementations - Take the best patterns from NavigationRenderer and Shell iOS navigation
-
Shell and NavigationPage both use it - Same handler, different consumers
-
Keep handler internal initially - Flexibility to iterate without public API commitment
-
Align with WinUI patterns - Use WinUI's unified approach as the reference model
Success Criteria
- NavigationPage uses the new handler (when switch enabled)
- Shell uses the same handler (when switch enabled)
- All existing tests pass with switch enabled
- Consistent navigation behavior between Shell and NavigationPage