{"id":"f8376cf2-fe94-4085-ae0b-68467d682c29","shortId":"PAC8L3","kind":"skill","title":"carplay","tagline":"Build CarPlay-enabled apps using the CarPlay framework. Use when creating navigation, audio, communication, EV charging, parking, or food ordering apps for the car display, working with CPTemplateApplicationScene, CPListTemplate, CPMapTemplate, CPNowPlayingTemplate, configuring C","description":"# CarPlay\n\nBuild apps that display on the vehicle's CarPlay screen using the CarPlay\nframework's template-based UI system. Covers scene lifecycle, template\ntypes, navigation guidance, audio playback, communication, point-of-interest\ncategories, entitlement setup, and simulator testing.\nTargets Swift 6.3 / iOS 26+.\n\nSee [references/carplay-patterns.md](references/carplay-patterns.md) for extended patterns including full\nnavigation sessions, dashboard scenes, and advanced template composition.\n\n## Contents\n\n- [Entitlements and Setup](#entitlements-and-setup)\n- [Scene Configuration](#scene-configuration)\n- [Templates Overview](#templates-overview)\n- [Navigation Apps](#navigation-apps)\n- [Audio Apps](#audio-apps)\n- [Communication Apps](#communication-apps)\n- [Point of Interest Apps](#point-of-interest-apps)\n- [Testing with CarPlay Simulator](#testing-with-carplay-simulator)\n- [Common Mistakes](#common-mistakes)\n- [Review Checklist](#review-checklist)\n- [References](#references)\n\n## Entitlements and Setup\n\nCarPlay requires a category-specific entitlement granted by Apple. Request it\nat [developer.apple.com/contact/carplay](https://developer.apple.com/contact/carplay)\nand agree to the CarPlay Entitlement Addendum.\n\n### Entitlement Keys by Category\n\n| Entitlement | Category |\n|---|---|\n| `com.apple.developer.carplay-audio` | Audio |\n| `com.apple.developer.carplay-communication` | Communication |\n| `com.apple.developer.carplay-maps` | Navigation |\n| `com.apple.developer.carplay-charging` | EV Charging |\n| `com.apple.developer.carplay-parking` | Parking |\n| `com.apple.developer.carplay-quick-ordering` | Quick Food Ordering |\n\n### Project Configuration\n\n1. Update the App ID in the developer portal under Additional Capabilities.\n2. Generate a new provisioning profile for the updated App ID.\n3. In Xcode, disable automatic signing and import the CarPlay provisioning profile.\n4. Add an `Entitlements.plist` with the entitlement key set to `true`.\n5. Set Code Signing Entitlements build setting to the `Entitlements.plist` path.\n\n### Key Types\n\n| Type | Role |\n|---|---|\n| `CPTemplateApplicationScene` | UIScene subclass for the CarPlay display |\n| `CPTemplateApplicationSceneDelegate` | Scene connect/disconnect lifecycle |\n| `CPInterfaceController` | Manages the template navigation hierarchy |\n| `CPTemplate` | Abstract base for all CarPlay templates |\n| `CPSessionConfiguration` | Vehicle display limits and content style |\n\n## Scene Configuration\n\nDeclare the CarPlay scene in `Info.plist` and implement\n`CPTemplateApplicationSceneDelegate` to respond when CarPlay connects.\n\n### Info.plist Scene Manifest\n\n```plist\n<key>UIApplicationSceneManifest</key>\n<dict>\n    <key>UIApplicationSupportsMultipleScenes</key>\n    <true/>\n    <key>UISceneConfigurations</key>\n    <dict>\n        <key>CPTemplateApplicationSceneSessionRoleApplication</key>\n        <array>\n            <dict>\n                <key>UISceneClassName</key>\n                <string>CPTemplateApplicationScene</string>\n                <key>UISceneConfigurationName</key>\n                <string>CarPlaySceneConfiguration</string>\n                <key>UISceneDelegateClassName</key>\n                <string>$(PRODUCT_MODULE_NAME).CarPlaySceneDelegate</string>\n            </dict>\n        </array>\n    </dict>\n</dict>\n```\n\n### Scene Delegate (Non-Navigation)\n\nNon-navigation apps receive an interface controller only. No window.\n\n```swift\nimport CarPlay\n\nfinal class CarPlaySceneDelegate: UIResponder,\n    CPTemplateApplicationSceneDelegate {\n\n    var interfaceController: CPInterfaceController?\n\n    func templateApplicationScene(\n        _ templateApplicationScene: CPTemplateApplicationScene,\n        didConnect interfaceController: CPInterfaceController\n    ) {\n        self.interfaceController = interfaceController\n        interfaceController.setRootTemplate(buildRootTemplate(),\n                                            animated: true, completion: nil)\n    }\n\n    func templateApplicationScene(\n        _ templateApplicationScene: CPTemplateApplicationScene,\n        didDisconnectInterfaceController interfaceController: CPInterfaceController\n    ) {\n        self.interfaceController = nil\n    }\n}\n```\n\n### Scene Delegate (Navigation)\n\nNavigation apps receive both an interface controller and a `CPWindow`.\nSet the window's root view controller to draw map content.\n\n```swift\nfunc templateApplicationScene(\n    _ templateApplicationScene: CPTemplateApplicationScene,\n    didConnect interfaceController: CPInterfaceController,\n    to window: CPWindow\n) {\n    self.interfaceController = interfaceController\n    self.carWindow = window\n    window.rootViewController = MapViewController()\n\n    let mapTemplate = CPMapTemplate()\n    mapTemplate.mapDelegate = self\n    interfaceController.setRootTemplate(mapTemplate, animated: true,\n                                        completion: nil)\n}\n```\n\n## Templates Overview\n\nCarPlay provides a fixed set of template types. The app supplies content;\nthe system renders it on the vehicle display.\n\n### General Purpose Templates\n\n| Template | Purpose |\n|---|---|\n| `CPTabBarTemplate` | Container with tabbed child templates |\n| `CPListTemplate` | Scrollable sectioned list |\n| `CPGridTemplate` | Grid of tappable icon buttons (max 8) |\n| `CPInformationTemplate` | Key-value info with up to 3 actions |\n| `CPAlertTemplate` | Modal alert with up to 2 actions |\n| `CPActionSheetTemplate` | Modal action sheet |\n\n### Category-Specific Templates\n\n| Template | Category |\n|---|---|\n| `CPMapTemplate` | Navigation -- map overlay with nav bar |\n| `CPSearchTemplate` | Navigation -- destination search |\n| `CPNowPlayingTemplate` | Audio -- shared Now Playing screen |\n| `CPPointOfInterestTemplate` | EV Charging / Parking / Food -- POI map |\n| `CPContactTemplate` | Communication -- contact card |\n\n### Navigation Hierarchy\n\nUse `pushTemplate(_:animated:completion:)` to add templates to the stack.\nUse `presentTemplate(_:animated:completion:)` for modal display.\nUse `popTemplate(animated:completion:)` to go back.\n`CPTabBarTemplate` must be set as root -- it cannot be pushed or presented.\n\n### CPTabBarTemplate\n\n```swift\nlet browseTab = CPListTemplate(title: \"Browse\",\n                               sections: [CPListSection(items: listItems)])\nbrowseTab.tabImage = UIImage(systemName: \"list.bullet\")\n\nlet tabBar = CPTabBarTemplate(templates: [browseTab, settingsTab])\ntabBar.delegate = self\ninterfaceController.setRootTemplate(tabBar, animated: true, completion: nil)\n```\n\n### CPListTemplate\n\n```swift\nlet item = CPListItem(text: \"Favorites\", detailText: \"12 items\")\nitem.handler = { selectedItem, completion in\n    self.interfaceController?.pushTemplate(detailTemplate, animated: true,\n                                           completion: nil)\n    completion()\n}\n\nlet section = CPListSection(items: [item], header: \"Library\",\n                            sectionIndexTitle: nil)\nlet listTemplate = CPListTemplate(title: \"My App\", sections: [section])\n```\n\n## Navigation Apps\n\nNavigation apps use `com.apple.developer.carplay-maps`. They are the only\ncategory that receives a `CPWindow` for drawing map content. The root\ntemplate must be a `CPMapTemplate`.\n\n### Trip Preview and Route Selection\n\n```swift\nlet routeChoice = CPRouteChoice(\n    summaryVariants: [\"Fastest Route\", \"Fast\"],\n    additionalInformationVariants: [\"Via Highway 101\"],\n    selectionSummaryVariants: [\"25 min\"]\n)\nlet trip = CPTrip(origin: origin, destination: destination,\n                  routeChoices: [routeChoice])\nmapTemplate.showTripPreviews([trip], textConfiguration: nil)\n```\n\n### Starting a Navigation Session\n\n```swift\nextension CarPlaySceneDelegate: CPMapTemplateDelegate {\n    func mapTemplate(_ mapTemplate: CPMapTemplate,\n                     startedTrip trip: CPTrip,\n                     using routeChoice: CPRouteChoice) {\n        let session = mapTemplate.startNavigationSession(for: trip)\n        session.pauseTrip(for: .loading, description: \"Calculating route...\")\n\n        let maneuver = CPManeuver()\n        maneuver.instructionVariants = [\"Turn right onto Main St\"]\n        maneuver.symbolImage = UIImage(systemName: \"arrow.turn.up.right\")\n        session.upcomingManeuvers = [maneuver]\n\n        let estimates = CPTravelEstimates(\n            distanceRemaining: Measurement(value: 5.2, unit: .miles),\n            timeRemaining: 900)\n        session.updateEstimates(estimates, for: maneuver)\n    }\n}\n```\n\n### Map Buttons\n\n```swift\nlet zoomIn = CPMapButton { _ in self.mapViewController.zoomIn() }\nzoomIn.image = UIImage(systemName: \"plus.magnifyingglass\")\nmapTemplate.mapButtons = [zoomIn, zoomOut]\n```\n\n### CPSearchTemplate\n\n```swift\nextension CarPlaySceneDelegate: CPSearchTemplateDelegate {\n    func searchTemplate(_ searchTemplate: CPSearchTemplate,\n                        updatedSearchText searchText: String,\n                        completionHandler: @escaping ([CPListItem]) -> Void) {\n        performSearch(query: searchText) { results in\n            completionHandler(results.map {\n                CPListItem(text: $0.name, detailText: $0.address)\n            })\n        }\n    }\n\n    func searchTemplate(_ searchTemplate: CPSearchTemplate,\n                        selectedResult item: CPListItem,\n                        completionHandler: @escaping () -> Void) {\n        // Navigate to selected destination\n        completionHandler()\n    }\n}\n```\n\n## Audio Apps\n\nAudio apps use `com.apple.developer.carplay-audio`. They display browsable\ncontent in lists and use `CPNowPlayingTemplate` for playback controls.\n\n### Now Playing Template\n\n`CPNowPlayingTemplate` is a shared singleton. It reads metadata from\n`MPNowPlayingInfoCenter`. Do not instantiate a new one.\n\n```swift\nlet nowPlaying = CPNowPlayingTemplate.shared\nnowPlaying.isUpNextButtonEnabled = true\nnowPlaying.isAlbumArtistButtonEnabled = true\nnowPlaying.updateNowPlayingButtons([\n    CPNowPlayingShuffleButton { _ in self.toggleShuffle() },\n    CPNowPlayingRepeatButton { _ in self.toggleRepeat() }\n])\nnowPlaying.add(self) // Register as CPNowPlayingTemplateObserver\n```\n\n### Siri Assistant Cell\n\nAudio apps supporting `INPlayMediaIntent` can show an assistant cell.\nCommunication apps use `INStartCallIntent` with `.startCall`.\n\n```swift\nlet config = CPAssistantCellConfiguration(\n    position: .top, visibility: .always, assistantAction: .playMedia)\nlet listTemplate = CPListTemplate(\n    title: \"Playlists\",\n    sections: [CPListSection(items: items)],\n    assistantCellConfiguration: config)\n```\n\n## Communication Apps\n\nCommunication apps use `com.apple.developer.carplay-communication`.\nThey display message lists and contacts, and support `INStartCallIntent`\nfor Siri-initiated calls.\n\n```swift\nlet message = CPMessageListItem(\n    conversationIdentifier: \"conv-123\",\n    text: \"Meeting at 3pm\",\n    leadingConfiguration: CPMessageListItem.LeadingConfiguration(\n        leadingItem: .init(text: \"Jane\", textStyle: .abbreviated),\n        unread: true),\n    trailingConfiguration: CPMessageListItem.TrailingConfiguration(\n        trailingItem: .init(text: \"2:45 PM\")),\n    trailingText: nil, trailingImage: nil)\n\nlet messageList = CPListTemplate(title: \"Messages\",\n                                 sections: [CPListSection(items: [message])])\n```\n\n## Point of Interest Apps\n\nEV charging, parking, and food ordering apps use `CPPointOfInterestTemplate`\nand `CPInformationTemplate` to display locations and details.\n\n### CPPointOfInterestTemplate\n\n```swift\nlet poi = CPPointOfInterest(\n    location: MKMapItem(placemark: MKPlacemark(\n        coordinate: CLLocationCoordinate2D(latitude: 37.7749,\n                                           longitude: -122.4194))),\n    title: \"SuperCharger Station\", subtitle: \"4 available\",\n    summary: \"150 kW DC fast charging\",\n    detailTitle: \"SuperCharger Station\", detailSubtitle: \"$0.28/kWh\",\n    detailSummary: \"Open 24 hours\",\n    pinImage: UIImage(systemName: \"bolt.fill\"))\n\npoi.primaryButton = CPTextButton(title: \"Navigate\",\n                                 textStyle: .confirm) { _ in }\n\nlet poiTemplate = CPPointOfInterestTemplate(\n    title: \"Nearby Chargers\", pointsOfInterest: [poi], selectedIndex: 0)\npoiTemplate.pointOfInterestDelegate = self\n```\n\n### CPInformationTemplate\n\n```swift\nlet infoTemplate = CPInformationTemplate(\n    title: \"Order Summary\", layout: .leading,\n    items: [\n        CPInformationItem(title: \"Item\", detail: \"Burrito Bowl\"),\n        CPInformationItem(title: \"Total\", detail: \"$12.50\")],\n    actions: [\n        CPTextButton(title: \"Place Order\", textStyle: .confirm) { _ in\n            self.placeOrder() },\n        CPTextButton(title: \"Cancel\", textStyle: .cancel) { _ in\n            self.interfaceController?.popTemplate(animated: true,\n                                                  completion: nil) }])\n```\n\n## Testing with CarPlay Simulator\n\n1. Build and run in Xcode with the iOS simulator.\n2. Choose I/O > External Displays > CarPlay.\n\nDefault window: 800x480 at @2x. Enable extra options for navigation apps:\n\n```bash\ndefaults write com.apple.iphonesimulator CarPlayExtraOptions -bool YES\n```\n\n### Recommended Test Configurations\n\n| Configuration | Pixels | Scale |\n|---|---|---|\n| Minimum | 748 x 456 | @2x |\n| Portrait | 768 x 1024 | @2x |\n| Standard | 800 x 480 | @2x |\n| High-resolution | 1920 x 720 | @3x |\n\nSimulator cannot test locked-iPhone behavior, Siri, audio coexistence with\ncar radio, or physical input hardware (knobs, touch pads). Test on a real\nCarPlay-capable vehicle or aftermarket head unit when possible.\n\n## Common Mistakes\n\n### DON'T: Use the wrong scene delegate method\n\nNavigation apps must implement `templateApplicationScene(_:didConnect:to:)`\n(with `CPWindow`). Non-navigation apps use\n`templateApplicationScene(_:didConnect:)` (no window). Using the wrong\nvariant produces no CarPlay UI.\n\n### DON'T: Draw custom UI in the navigation window\n\n`CPWindow` is exclusively for map content. All overlays, alerts, and\ncontrols must use CarPlay templates.\n\n### DON'T: Push or present CPTabBarTemplate\n\n`CPTabBarTemplate` can only be set as root. Pushing or presenting it fails.\nUse `setRootTemplate(_:animated:completion:)`.\n\n### DON'T: Instantiate CPNowPlayingTemplate\n\nUse `CPNowPlayingTemplate.shared`. Creating a new instance causes issues.\n\n### DON'T: Ignore vehicle display limits\n\nCheck `CPSessionConfiguration.limitedUserInterfaces` and respect\n`maximumItemCount` / `maximumSectionCount` on list templates.\n\n### DON'T: Forget to call the completion handler\n\n`CPListItem.handler` must call its completion handler in every code path.\nFailure leaves the list in a loading state.\n\n## Review Checklist\n\n- [ ] Correct CarPlay entitlement key in `Entitlements.plist`\n- [ ] `UIApplicationSupportsMultipleScenes` set to `true`\n- [ ] `CPTemplateApplicationSceneSessionRoleApplication` scene in Info.plist\n- [ ] Scene delegate class name matches `UISceneDelegateClassName`\n- [ ] Correct delegate method used (with/without `CPWindow`)\n- [ ] Root template set in `didConnect` before returning\n- [ ] Interface controller and window references cleared on disconnect\n- [ ] `CPTabBarTemplate` only used as root, never pushed\n- [ ] `CPNowPlayingTemplate.shared` used, not a new instance\n- [ ] `maximumItemCount`/`maximumSectionCount` checked before populating lists\n- [ ] `CPListItem.handler` calls completion in every path\n- [ ] Map-only content in `CPWindow` root view controller (navigation apps)\n- [ ] App functions while iPhone is locked\n- [ ] Tested at minimum, standard, and high-resolution simulator sizes\n- [ ] Audio session deactivated when not actively playing\n\n## References\n\n- Extended patterns (dashboard, instrument cluster, full nav flow, tab composition): [references/carplay-patterns.md](references/carplay-patterns.md)\n- [CarPlay framework](https://sosumi.ai/documentation/carplay)\n- [CPTemplateApplicationSceneDelegate](https://sosumi.ai/documentation/carplay/cptemplateapplicationscenedelegate)\n- [CPInterfaceController](https://sosumi.ai/documentation/carplay/cpinterfacecontroller)\n- [CPMapTemplate](https://sosumi.ai/documentation/carplay/cpmaptemplate)\n- [CPListTemplate](https://sosumi.ai/documentation/carplay/cplisttemplate)\n- [CPNowPlayingTemplate](https://sosumi.ai/documentation/carplay/cpnowplayingtemplate)\n- [CPPointOfInterestTemplate](https://sosumi.ai/documentation/carplay/cppointofinteresttemplate)\n- [CPNavigationSession](https://sosumi.ai/documentation/carplay/cpnavigationsession)\n- [Requesting CarPlay Entitlements](https://sosumi.ai/documentation/carplay/requesting-carplay-entitlements)\n- [Displaying Content in CarPlay](https://sosumi.ai/documentation/carplay/displaying-content-in-carplay)\n- [Using the CarPlay Simulator](https://sosumi.ai/documentation/carplay/using-the-carplay-simulator)\n- [CarPlay HIG](https://sosumi.ai/design/human-interface-guidelines/carplay)","tags":["carplay","swift","ios","skills","dpearson2699","accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills"],"capabilities":["skill","source-dpearson2699","skill-carplay","topic-accessibility","topic-agent-skills","topic-ai-coding","topic-apple","topic-claude-code","topic-codex-skills","topic-cursor-skills","topic-ios","topic-ios-development","topic-liquid-glass","topic-localization","topic-mapkit"],"categories":["swift-ios-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/dpearson2699/swift-ios-skills/carplay","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add dpearson2699/swift-ios-skills","source_repo":"https://github.com/dpearson2699/swift-ios-skills","install_from":"skills.sh"}},"qualityScore":"0.684","qualityRationale":"deterministic score 0.68 from registry signals: · indexed on github topic:agent-skills · 468 github stars · SKILL.md body (16,803 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:53:41.984Z","embedding":null,"createdAt":"2026-04-18T22:00:49.459Z","updatedAt":"2026-04-22T00:53:41.984Z","lastSeenAt":"2026-04-22T00:53:41.984Z","tsv":"'-122.4194':1024 '-123':954 '/contact/carplay](https://developer.apple.com/contact/carplay)':179 '/design/human-interface-guidelines/carplay)':1520 '/documentation/carplay)':1467 '/documentation/carplay/cpinterfacecontroller)':1475 '/documentation/carplay/cplisttemplate)':1483 '/documentation/carplay/cpmaptemplate)':1479 '/documentation/carplay/cpnavigationsession)':1495 '/documentation/carplay/cpnowplayingtemplate)':1487 '/documentation/carplay/cppointofinteresttemplate)':1491 '/documentation/carplay/cptemplateapplicationscenedelegate)':1471 '/documentation/carplay/displaying-content-in-carplay)':1508 '/documentation/carplay/requesting-carplay-entitlements)':1501 '/documentation/carplay/using-the-carplay-simulator)':1515 '/kwh':1042 '0':1067 '0.28':1041 '0.address':814 '0.name':812 '1':218,1117 '101':696 '1024':1165 '12':622 '12.50':1091 '150':1032 '1920':1175 '2':230,507,974,1127 '24':1045 '25':698 '26':81 '2x':1137,1161,1166,1171 '3':241,499 '37.7749':1022 '3pm':958 '3x':1178 '4':253,1029 '45':975 '456':1160 '480':1170 '5':264 '5.2':763 '6.3':79 '720':1177 '748':1158 '768':1163 '8':490 '800':1168 '800x480':1135 '900':767 'abbrevi':966 'abstract':297 'action':500,508,511,1092 'activ':1448 'add':254,554 'addendum':186 'addit':228 'additionalinformationvari':693 'advanc':95 'aftermarket':1208 'agre':181 'alert':503,1266 'alway':913 'anim':381,442,551,561,568,610,631,1109,1293 'app':6,23,38,117,120,122,125,127,130,134,139,221,239,351,398,457,650,654,656,831,833,892,901,928,930,993,1000,1143,1224,1235,1426,1427 'appl':173 'arrow.turn.up.right':754 'assist':889,898 'assistantact':914 'assistantcellconfigur':925 'audio':15,64,121,124,194,195,531,830,832,836,891,1187,1443 'audio-app':123 'automat':245 'avail':1030 'back':572 'bar':525 'base':54,298 'bash':1144 'behavior':1185 'bolt.fill':1050 'bool':1149 'bowl':1086 'brows':591 'browsabl':839 'browsetab':588,604 'browsetab.tabimage':596 'build':2,37,269,1118 'buildroottempl':380 'burrito':1085 'button':488,773 'c':35 'calcul':740 'call':947,1326,1332,1411 'cancel':1103,1105 'cannot':580,1180 'capabl':229,1205 'car':26,1190 'card':546 'carplay':1,4,9,36,45,49,142,147,164,184,250,284,301,314,324,361,448,1115,1132,1204,1247,1271,1351,1463,1497,1505,1511,1516 'carplay-cap':1203 'carplay-en':3 'carplayextraopt':1148 'carplaysceneconfigur':337 'carplayscenedeleg':342,364,719,790 'categori':71,168,190,192,514,518,664 'category-specif':167,513 'caus':1305 'cell':890,899 'charg':18,203,205,538,995,1036 'charger':1063 'check':1313,1406 'checklist':155,158,1349 'child':477 'choos':1128 'class':363,1366 'clear':1388 'cllocationcoordinate2d':1020 'cluster':1455 'code':266,1338 'coexist':1188 'com.apple.developer.carplay':193,196,199,202,206,209,658,835,932 'com.apple.iphonesimulator':1147 'common':149,152,1213 'common-mistak':151 'communic':16,66,126,129,197,198,544,900,927,929,933 'communication-app':128 'complet':383,444,552,562,569,612,626,633,635,1111,1294,1328,1334,1412 'completionhandl':799,808,822,829 'composit':97,1460 'config':908,926 'configur':34,107,110,217,311,1153,1154 'confirm':1056,1098 'connect':325 'connect/disconnect':288 'contact':545,939 'contain':474 'content':98,308,417,459,672,840,1263,1419,1503 'control':355,403,413,848,1268,1384,1424 'conv':953 'conversationidentifi':952 'coordin':1019 'correct':1350,1370 'cover':57 'cpactionsheettempl':509 'cpalerttempl':501 'cpassistantcellconfigur':909 'cpcontacttempl':543 'cpgridtempl':483 'cpinformationitem':1081,1087 'cpinformationtempl':491,1004,1070,1074 'cpinterfacecontrol':290,369,376,391,425,1472 'cplistitem':618,801,810,821 'cplistitem.handler':1330,1410 'cplistsect':593,638,922,987 'cplisttempl':31,479,589,614,647,918,983,1480 'cpmaneuv':744 'cpmapbutton':777 'cpmaptempl':32,437,519,679,724,1476 'cpmaptemplatedeleg':720 'cpmessagelistitem':951 'cpmessagelistitem.leadingconfiguration':960 'cpmessagelistitem.trailingconfiguration':970 'cpnavigationsess':1492 'cpnowplayingrepeatbutton':880 'cpnowplayingshufflebutton':877 'cpnowplayingtempl':33,530,845,852,1298,1484 'cpnowplayingtemplate.shared':871,1300,1398 'cpnowplayingtemplateobserv':887 'cppointofinterest':1014 'cppointofinteresttempl':536,1002,1010,1060,1488 'cproutechoic':688,730 'cpsearchtempl':526,787,795,818 'cpsearchtemplatedeleg':791 'cpsessionconfigur':303 'cpsessionconfiguration.limiteduserinterfaces':1314 'cptabbartempl':473,573,585,602,1278,1279,1391 'cptemplat':296 'cptemplateapplicationscen':30,279,335,373,388,422 'cptemplateapplicationscenedeleg':286,320,366,1468 'cptemplateapplicationscenesessionroleappl':333,1360 'cptextbutton':1052,1093,1101 'cptravelestim':759 'cptrip':702,727 'cpwindow':406,428,668,1231,1258,1375,1421 'creat':13,1301 'custom':1252 'dashboard':92,1453 'dc':1034 'deactiv':1445 'declar':312 'default':1133,1145 'deleg':344,395,1221,1365,1371 'descript':739 'destin':528,705,706,828 'detail':1009,1084,1090 'detailsubtitl':1040 'detailsummari':1043 'detailtempl':630 'detailtext':621,813 'detailtitl':1037 'develop':225 'developer.apple.com':178 'developer.apple.com/contact/carplay](https://developer.apple.com/contact/carplay)':177 'didconnect':374,423,1228,1238,1380 'diddisconnectinterfacecontrol':389 'disabl':244 'disconnect':1390 'display':27,40,285,305,467,565,838,935,1006,1131,1311,1502 'distanceremain':760 'draw':415,670,1251 'enabl':5,1138 'entitl':72,99,103,161,170,185,187,191,259,268,1352,1498 'entitlements-and-setup':102 'entitlements.plist':256,273,1355 'escap':800,823 'estim':758,769 'ev':17,204,537,994 'everi':1337,1414 'exclus':1260 'extend':86,1451 'extens':718,789 'extern':1130 'extra':1139 'fail':1290 'failur':1340 'fast':692,1035 'fastest':690 'favorit':620 'final':362 'fix':451 'flow':1458 'food':21,214,540,998 'forget':1324 'framework':10,50,1464 'full':89,1456 'func':370,385,419,721,792,815 'function':1428 'general':468 'generat':231 'go':571 'grant':171 'grid':484 'guidanc':63 'handler':1329,1335 'hardwar':1195 'head':1209 'header':641 'hierarchi':295,548 'hig':1517 'high':1173,1439 'high-resolut':1172,1438 'highway':695 'hour':1046 'i/o':1129 'icon':487 'id':222,240 'ignor':1309 'implement':319,1226 'import':248,360 'includ':88 'info':495 'info.plist':317,326,1363 'infotempl':1073 'init':962,972 'initi':946 'inplaymediaint':894 'input':1194 'instanc':1304,1403 'instanti':864,1297 'instartcallint':903,942 'instrument':1454 'interest':70,133,138,992 'interfac':354,402,1383 'interfacecontrol':368,375,378,390,424,430 'interfacecontroller.setroottemplate':379,440,608 'io':80,1125 'iphon':1184,1430 'issu':1306 'item':594,617,623,639,640,820,923,924,988,1080,1083 'item.handler':624 'jane':964 'key':188,260,275,493,1353 'key-valu':492 'knob':1196 'kw':1033 'latitud':1021 'layout':1078 'lead':1079 'leadingconfigur':959 'leadingitem':961 'leav':1341 'let':435,587,600,616,636,645,686,700,731,742,757,775,869,907,916,949,981,1012,1058,1072 'librari':642 'lifecycl':59,289 'limit':306,1312 'list':482,842,937,1320,1343,1409 'list.bullet':599 'listitem':595 'listtempl':646,917 'load':738,1346 'locat':1007,1015 'lock':1183,1432 'locked-iphon':1182 'longitud':1023 'main':749 'manag':291 'maneuv':743,756,771 'maneuver.instructionvariants':745 'maneuver.symbolimage':751 'manifest':328 'map':200,416,521,542,659,671,772,1262,1417 'map-on':1416 'maptempl':436,441,722,723 'maptemplate.mapbuttons':784 'maptemplate.mapdelegate':438 'maptemplate.showtrippreviews':709 'maptemplate.startnavigationsession':733 'mapviewcontrol':434 'match':1368 'max':489 'maximumitemcount':1317,1404 'maximumsectioncount':1318,1405 'measur':761 'meet':956 'messag':936,950,985,989 'messagelist':982 'metadata':859 'method':1222,1372 'mile':765 'min':699 'minimum':1157,1435 'mistak':150,153,1214 'mkmapitem':1016 'mkplacemark':1018 'modal':502,510,564 'modul':340 'mpnowplayinginfocent':861 'must':574,676,1225,1269,1331 'name':341,1367 'nav':524,1457 'navig':14,62,90,116,119,201,294,347,350,396,397,520,527,547,653,655,715,825,1054,1142,1223,1234,1256,1425 'navigation-app':118 'nearbi':1062 'never':1396 'new':233,866,1303,1402 'nil':384,393,445,613,634,644,712,978,980,1112 'non':346,349,1233 'non-navig':345,348,1232 'nowplay':870 'nowplaying.add':883 'nowplaying.isalbumartistbuttonenabled':874 'nowplaying.isupnextbuttonenabled':872 'nowplaying.updatenowplayingbuttons':876 'one':867 'onto':748 'open':1044 'option':1140 'order':22,212,215,999,1076,1096 'origin':703,704 'overlay':522,1265 'overview':112,115,447 'pad':1198 'park':19,207,208,539,996 'path':274,1339,1415 'pattern':87,1452 'performsearch':803 'physic':1193 'pinimag':1047 'pixel':1155 'place':1095 'placemark':1017 'play':534,850,1449 'playback':65,847 'playlist':920 'playmedia':915 'plist':329 'plus.magnifyingglass':783 'pm':976 'poi':541,1013,1065 'poi.primarybutton':1051 'point':68,131,136,990 'point-of-interest':67 'point-of-interest-app':135 'pointsofinterest':1064 'poitempl':1059 'poitemplate.pointofinterestdelegate':1068 'poptempl':567,1108 'popul':1408 'portal':226 'portrait':1162 'posit':910 'possibl':1212 'present':584,1277,1288 'presenttempl':560 'preview':681 'produc':1245 'product':339 'profil':235,252 'project':216 'provid':449 'provis':234,251 'purpos':469,472 'push':582,1275,1286,1397 'pushtempl':550,629 'queri':804 'quick':211,213 'quick-ord':210 'radio':1191 'read':858 'real':1202 'receiv':352,399,666 'recommend':1151 'refer':159,160,1387,1450 'references/carplay-patterns.md':83,84,1461,1462 'regist':885 'render':462 'request':174,1496 'requir':165 'resolut':1174,1440 'respect':1316 'respond':322 'result':806 'results.map':809 'return':1382 'review':154,157,1348 'review-checklist':156 'right':747 'role':278 'root':411,578,674,1285,1376,1395,1422 'rout':683,691,741 'routechoic':687,707,708,729 'run':1120 'scale':1156 'scene':58,93,106,109,287,310,315,327,343,394,1220,1361,1364 'scene-configur':108 'screen':46,535 'scrollabl':480 'search':529 'searchtempl':793,794,816,817 'searchtext':797,805 'section':481,592,637,651,652,921,986 'sectionindextitl':643 'see':82 'select':684,827 'selectedindex':1066 'selecteditem':625 'selectedresult':819 'selectionsummaryvari':697 'self':439,607,884,1069 'self.carwindow':431 'self.interfacecontroller':377,392,429,628,1107 'self.mapviewcontroller.zoomin':779 'self.placeorder':1100 'self.togglerepeat':882 'self.toggleshuffle':879 'session':91,716,732,1444 'session.pausetrip':736 'session.upcomingmaneuvers':755 'session.updateestimates':768 'set':261,265,270,407,452,576,1283,1357,1378 'setroottempl':1292 'settingstab':605 'setup':73,101,105,163 'share':532,855 'sheet':512 'show':896 'sign':246,267 'simul':75,143,148,1116,1126,1179,1441,1512 'singleton':856 'siri':888,945,1186 'siri-initi':944 'size':1442 'skill' 'skill-carplay' 'sosumi.ai':1466,1470,1474,1478,1482,1486,1490,1494,1500,1507,1514,1519 'sosumi.ai/design/human-interface-guidelines/carplay)':1518 'sosumi.ai/documentation/carplay)':1465 'sosumi.ai/documentation/carplay/cpinterfacecontroller)':1473 'sosumi.ai/documentation/carplay/cplisttemplate)':1481 'sosumi.ai/documentation/carplay/cpmaptemplate)':1477 'sosumi.ai/documentation/carplay/cpnavigationsession)':1493 'sosumi.ai/documentation/carplay/cpnowplayingtemplate)':1485 'sosumi.ai/documentation/carplay/cppointofinteresttemplate)':1489 'sosumi.ai/documentation/carplay/cptemplateapplicationscenedelegate)':1469 'sosumi.ai/documentation/carplay/displaying-content-in-carplay)':1506 'sosumi.ai/documentation/carplay/requesting-carplay-entitlements)':1499 'sosumi.ai/documentation/carplay/using-the-carplay-simulator)':1513 'source-dpearson2699' 'specif':169,515 'st':750 'stack':558 'standard':1167,1436 'start':713 'startcal':905 'startedtrip':725 'state':1347 'station':1027,1039 'string':798 'style':309 'subclass':281 'subtitl':1028 'summari':1031,1077 'summaryvari':689 'supercharg':1026,1038 'suppli':458 'support':893,941 'swift':78,359,418,586,615,685,717,774,788,868,906,948,1011,1071 'system':56,461 'systemnam':598,753,782,1049 'tab':476,1459 'tabbar':601,609 'tabbar.delegate':606 'tappabl':486 'target':77 'templat':53,60,96,111,114,293,302,446,454,470,471,478,516,517,555,603,675,851,1272,1321,1377 'template-bas':52 'templateapplicationscen':371,372,386,387,420,421,1227,1237 'templates-overview':113 'test':76,140,145,1113,1152,1181,1199,1433 'testing-with-carplay-simul':144 'text':619,811,955,963,973 'textconfigur':711 'textstyl':965,1055,1097,1104 'timeremain':766 'titl':590,648,919,984,1025,1053,1061,1075,1082,1088,1094,1102 'top':911 'topic-accessibility' 'topic-agent-skills' 'topic-ai-coding' 'topic-apple' 'topic-claude-code' 'topic-codex-skills' 'topic-cursor-skills' 'topic-ios' 'topic-ios-development' 'topic-liquid-glass' 'topic-localization' 'topic-mapkit' 'total':1089 'touch':1197 'trailingconfigur':969 'trailingimag':979 'trailingitem':971 'trailingtext':977 'trip':680,701,710,726,735 'true':263,382,443,611,632,873,875,968,1110,1359 'turn':746 'type':61,276,277,455 'ui':55,1248,1253 'uiapplicationscenemanifest':330 'uiapplicationsupportsmultiplescen':331,1356 'uiimag':597,752,781,1048 'uirespond':365 'uiscen':280 'uisceneclassnam':334 'uisceneconfigur':332 'uisceneconfigurationnam':336 'uiscenedelegateclassnam':338,1369 'unit':764,1210 'unread':967 'updat':219,238 'updatedsearchtext':796 'use':7,11,47,549,559,566,657,728,834,844,902,931,1001,1217,1236,1241,1270,1291,1299,1373,1393,1399,1509 'valu':494,762 'var':367 'variant':1244 'vehicl':43,304,466,1206,1310 'via':694 'view':412,1423 'visibl':912 'void':802,824 'window':358,409,427,432,1134,1240,1257,1386 'window.rootviewcontroller':433 'with/without':1374 'work':28 'write':1146 'wrong':1219,1243 'x':1159,1164,1169,1176 'xcode':243,1122 'yes':1150 'zoomin':776,785 'zoomin.image':780 'zoomout':786","prices":[{"id":"2a476ca0-0435-415c-bcd7-0cd4895e2b11","listingId":"f8376cf2-fe94-4085-ae0b-68467d682c29","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"dpearson2699","category":"swift-ios-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:00:49.459Z"}],"sources":[{"listingId":"f8376cf2-fe94-4085-ae0b-68467d682c29","source":"github","sourceId":"dpearson2699/swift-ios-skills/carplay","sourceUrl":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/carplay","isPrimary":false,"firstSeenAt":"2026-04-18T22:00:49.459Z","lastSeenAt":"2026-04-22T00:53:41.984Z"}],"details":{"listingId":"f8376cf2-fe94-4085-ae0b-68467d682c29","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"dpearson2699","slug":"carplay","github":{"repo":"dpearson2699/swift-ios-skills","stars":468,"topics":["accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills","ios","ios-development","liquid-glass","localization","mapkit","networking","storekit","swift","swift-concurrency","swiftdata","swiftui","widgetkit","xcode"],"license":"other","html_url":"https://github.com/dpearson2699/swift-ios-skills","pushed_at":"2026-04-21T19:26:16Z","description":"Agent Skills for iOS 26+, Swift 6.3, SwiftUI, and modern Apple frameworks","skill_md_sha":"bcf8948a5c9c00ce639330ac06c05514df97df8c","skill_md_path":"skills/carplay/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/carplay"},"layout":"multi","source":"github","category":"swift-ios-skills","frontmatter":{"name":"carplay","description":"Build CarPlay-enabled apps using the CarPlay framework. Use when creating navigation, audio, communication, EV charging, parking, or food ordering apps for the car display, working with CPTemplateApplicationScene, CPListTemplate, CPMapTemplate, CPNowPlayingTemplate, configuring CarPlay entitlements, or integrating with CarPlay Simulator for testing."},"skills_sh_url":"https://skills.sh/dpearson2699/swift-ios-skills/carplay"},"updatedAt":"2026-04-22T00:53:41.984Z"}}