Builds eligible CarPlay navigation, audio, communication, EV charging, parking, or ordering apps with template scenes. Use for entitlements, scene delegates, interface-controller hierarchies, lists, maps, Now Playing, dashboard displays, or CarPlay Simulator verification.
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Build category-entitled, template-based CarPlay apps for the vehicle display. Scope: Swift 6.4, iOS 26+.
See references/carplay-patterns.md for extended patterns including full navigation sessions, dashboard scenes, and advanced template composition.
Scope boundary: full CarPlay framework apps use category entitlements,
CPTemplateApplicationScene, CPTemplateApplicationSceneDelegate,
CPInterfaceController, and system CPTemplate navigation. CarPlay-visible
WidgetKit widgets and ActivityKit Live Activities are separate system
experiences; route their implementation to those domains while keeping
CarPlay-specific validation here.
Navigation apps must implement templateApplicationScene(_:didConnect:to:)
(with CPWindow). Non-navigation apps use
templateApplicationScene(_:didConnect:) (no window). Using the wrong
variant produces no CarPlay UI.
CPWindow is exclusively for map content. All overlays, alerts, and
controls must use CarPlay templates.
CPTabBarTemplate can only be set as root. Pushing or presenting it fails.
Use setRootTemplate(_:animated:completion:).
Use CPNowPlayingTemplate.shared. Creating a new instance causes issues.
CPMessageListItem is Siri-managed, unlike CPListItem. Do not set
message.handler; use the item configuration and userInfo for context.
CarPlay-visible widgets and Live Activities belong to WidgetKit and ActivityKit. Use this skill for category-entitled CarPlay template app scenes and for validating those surfaces in the car context.
Check CPSessionConfiguration.limitedUserInterfaces and respect
maximumItemCount / maximumSectionCount on list templates.
CPListItem.handler must call its completion handler in every code path.
Failure leaves the list in a loading state.
Entitlements.plistUIApplicationSupportsMultipleScenes set to trueCPTemplateApplicationSceneSessionRoleApplication scene in Info.plistUISceneDelegateClassNameCPWindow)didConnect before returningCPTabBarTemplate only used as root, never pushedCPNowPlayingTemplate.shared used, not a new instanceCPMessageListItem without custom handlersmaximumItemCount/maximumSectionCount checked before populating listsCPListItem.handler calls completion in every pathCPWindow root view controller (navigation apps)thienqo/ios-skills
6bf8b62
Canonical home
since May 23, 2026
Also appears in
on Oct 29, 2026
since May 28, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.