{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-212", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/212", "wordCount": 2617, "segments": [{"start": 7.0, "text": "Hi, I'm Chris, an engineer on the car experience team."}, {"start": 10.0, "text": "I'm delighted to go over what's new in CarPlay for iOS 27."}, {"start": 15.0, "text": "CarPlay is the smarter, safer way to use your iPhone in the car."}, {"start": 19.0, "text": "iOS 27 brings new capabilities to all categories of CarPlay apps"}, {"start": 23.0, "text": "so you can rev up your app in CarPlay."}, {"start": 26.0, "text": "We'll introduce new app categories supported in CarPlay"}, {"start": 30.0, "text": "and cover CarPlay framework updates that apply to all apps."}, {"start": 34.0, "text": "We'll also talk about new features specific to CarPlay navigation apps"}, {"start": 38.0, "text": "… and see what's new in the CarPlay Simulator."}, {"start": 42.0, "text": "CarPlay supports a wide variety of app categories."}, {"start": 47.0, "text": "Audio apps can play music, podcasts, and more."}, {"start": 51.0, "text": "Communication apps allow people to send and receive messages, and make phone calls."}, {"start": 56.0, "text": "Navigation apps provide turn-by-turn directions."}, {"start": 59.0, "text": "What all CarPlay apps have in common is that"}, {"start": 61.0, "text": "they help people accomplish important tasks without taking out their iPhone."}, {"start": 67.0, "text": "In addition, CarPlay supports Live Activities and widgets from any app."}, {"start": 72.0, "text": "You can display timely, relevant information"}, {"start": 75.0, "text": "even if your app is not specifically designed for CarPlay."}, {"start": 79.0, "text": "This year we added support for voice-based conversational apps …"}, {"start": 82.0, "text": "… and now with iOS 27 you can create apps to browse and play videos"}, {"start": 86.0, "text": "in new cars that support the video in car feature."}, {"start": 90.0, "text": "If your app supports AirPlay video streaming, no changes are needed."}, {"start": 94.0, "text": "People can already watch videos from your app on their CarPlay display"}, {"start": 97.0, "text": "when they aren't driving."}, {"start": 99.0, "text": "To do so, they simply select the car's display when playing the video on iPhone."}, {"start": 103.0, "text": "Now you can take it to the next level"}, {"start": 105.0, "text": "and let people browse their favorite videos"}, {"start": 107.0, "text": "from iPhone right on their CarPlay display."}, {"start": 110.0, "text": "It's great for those situations where you're sitting in your car"}, {"start": 112.0, "text": "waiting for a friend at the airport,"}, {"start": 114.0, "text": "parked at a charging station,"}, {"start": 116.0, "text": "or just taking a moment in the comfort of your car."}, {"start": 119.0, "text": "CarPlay video apps work in cars that support the video in car feature."}, {"start": 122.0, "text": "CarPlay video apps need to support AirPlay video streaming …"}, {"start": 126.0, "text": "… and use the CarPlay framework"}, {"start": 127.0, "text": "to provide a browsing experience on the CarPlay display."}, {"start": 130.0, "text": "In the next section we'll review additions to the CarPlay framework"}, {"start": 133.0, "text": "that help you create a video browsing UI."}, {"start": 136.0, "text": "But first a few additional notes about video apps."}, {"start": 139.0, "text": "At any given time, the car may indicate that video playback is not available."}, {"start": 144.0, "text": "If this happens your video will be played as audio-only."}, {"start": 147.0, "text": "This is great for continuing to listen to a podcast"}, {"start": 150.0, "text": "or sports broadcast while driving."}, {"start": 153.0, "text": "Apps with the CarPlay video entitlement only appear on the CarPlay home screen"}, {"start": 157.0, "text": "if the car supports the video in car feature."}, {"start": 159.0, "text": "If your app's content is suitable for both video and audio listening,"}, {"start": 163.0, "text": "include both CarPlay audio app and CarPlay video app entitlements."}, {"start": 167.0, "text": "With both entitlements your app can always appear in CarPlay."}, {"start": 171.0, "text": "Whether a car supports CarPlay or CarPlay Ultra,"}, {"start": 174.0, "text": "you can enable your apps on the driver's screens"}, {"start": 176.0, "text": "by supporting the CarPlay framework."}, {"start": 179.0, "text": "From getting directions, sending a message,"}, {"start": 181.0, "text": "to finding a parking garage, apps across all categories"}, {"start": 184.0, "text": "use the CarPlay framework to present their user interface."}, {"start": 188.0, "text": "We have plenty of UI updates for all CarPlay apps,"}, {"start": 191.0, "text": "including many enhancements for lists,"}, {"start": 193.0, "text": "a new MiniPlayer for now playing,"}, {"start": 195.0, "text": "and voice control has a new presentation style."}, {"start": 199.0, "text": "When your app is using the CarPlay framework,"}, {"start": 201.0, "text": "iOS manages the display of UI elements and handles the interface with the car."}, {"start": 206.0, "text": "By using a rich collection of templates"}, {"start": 208.0, "text": "your app does not need to manage the layout of UI elements"}, {"start": 211.0, "text": "for different screen resolutions,"}, {"start": 212.0, "text": "or support different input hardware"}, {"start": 214.0, "text": "such as touchscreens, knobs, or touch pads."}, {"start": 217.0, "text": "We have a sample app called Landmarks,"}, {"start": 219.0, "text": "which lets people explore interesting sites around the world."}, {"start": 223.0, "text": "For CarPlay, I wanted to listen to narrated audio stories"}, {"start": 226.0, "text": "that tell the history and key facts of the landmarks."}, {"start": 230.0, "text": "Using the CarPlay framework, I built a list of the stories"}, {"start": 233.0, "text": "that worked great for browsing and then playing the audio stories in my car."}, {"start": 238.0, "text": "But with this new car that supports the video in car feature"}, {"start": 241.0, "text": "now I can also watch videos of these amazing landmarks."}, {"start": 245.0, "text": "Landmarks is checking if the CPSessionConfiguration supports video"}, {"start": 249.0, "text": "and if so, adds a videos tab."}, {"start": 252.0, "text": "This list of videos showcases many of the other new APIs"}, {"start": 255.0, "text": "available in CarPlay framework."}, {"start": 257.0, "text": "Let's take a closer look."}, {"start": 259.0, "text": "Lists can now show images with portrait or landscape aspect ratios."}, {"start": 264.0, "text": "Card elements take that even further with thumbnails,"}, {"start": 267.0, "text": "which can have overlays, playback progress, and sports information right on the image."}, {"start": 273.0, "text": "Landmarks uses an overlay with a title that describes the video"}, {"start": 276.0, "text": "as newly added or live streaming."}, {"start": 279.0, "text": "For custom badges, overlays can also be an image."}, {"start": 282.0, "text": "The CPPlaybackConfiguration API"}, {"start": 284.0, "text": "is how your app provides metadata about playable items to CarPlay framework."}, {"start": 289.0, "text": "For content you'd prefer to play as a video,"}, {"start": 292.0, "text": "set preferred presentation to video."}, {"start": 294.0, "text": "Otherwise set the preferred presentation to audio."}, {"start": 297.0, "text": "The playback configuration's elapsed time and duration"}, {"start": 300.0, "text": "are shown a progress bar for your playable item…"}, {"start": 304.0, "text": "… and the playback action indicates if selecting this item"}, {"start": 306.0, "text": "will play, pause, or replay this item."}, {"start": 310.0, "text": "Make sure to update the thumbnail's playback configuration"}, {"start": 313.0, "text": "on any playback state changes"}, {"start": 315.0, "text": "…to keep the thumbnail accurately"}, {"start": 316.0, "text": "representing the state of playback for that item."}, {"start": 320.0, "text": "An additional overlay is available for showing sports teams and scores."}, {"start": 324.0, "text": "The sports overlay has a left team,..."}, {"start": 326.0, "text": "… a right team, …"}, {"start": 327.0, "text": "… and event status."}, {"start": 329.0, "text": "Use a details header when you want to present one item prominently"}, {"start": 333.0, "text": "at the top of a list of additional items."}, {"start": 335.0, "text": "This works great for showing the current episode at the top of a list of episodes,"}, {"start": 340.0, "text": "or for summarizing a movie with bonus content shown below."}, {"start": 343.0, "text": "The details header combines together a single thumbnail …"}, {"start": 347.0, "text": "… with a title …"}, {"start": 348.0, "text": "… body text, …"}, {"start": 349.0, "text": "… playback configuration, …"}, {"start": 351.0, "text": "… and action buttons."}, {"start": 353.0, "text": "Here the Landmarks app added a thumbnail overlay,"}, {"start": 356.0, "text": "configured playback as an unplayed item,"}, {"start": 358.0, "text": "and setup action buttons for play and add to playlist."}, {"start": 362.0, "text": "The playback configuration's current progress is automatically combined"}, {"start": 365.0, "text": "with the first action button."}, {"start": 367.0, "text": "As with the playback configuration on thumbnails,"}, {"start": 370.0, "text": "update the playback configuration in the details header"}, {"start": 373.0, "text": "as the playback state changes."}, {"start": 375.0, "text": "This ensures that the state and progress are correct"}, {"start": 378.0, "text": "when the details header becomes visible again."}, {"start": 382.0, "text": "New in iOS 27 is a MiniPlayer for the now playing template."}, {"start": 386.0, "text": "The MiniPlayer makes it easy to see what's playing and on a larger display"}, {"start": 390.0, "text": "you can even play, pause, or skip."}, {"start": 392.0, "text": "All apps that show now playing will automatically show the MiniPlayer."}, {"start": 396.0, "text": "The MiniPlayer is the best option for now playing in CarPlay,"}, {"start": 399.0, "text": "but if your app doesn't want to show the MiniPlayer …"}, {"start": 402.0, "text": "… set the now playing template's \"allowsMiniPlayer\" property to false,"}, {"start": 407.0, "text": "and the now playing icon"}, {"start": 408.0, "text": "will appear in the navigation bar instead of the MiniPlayer."}, {"start": 412.0, "text": "Earlier this year we launched support for voice-based conversational apps."}, {"start": 416.0, "text": "If your app has its own voice features,"}, {"start": 418.0, "text": "you can respond to questions and perform actions in the car."}, {"start": 422.0, "text": "The Voice Control template presents a UI"}, {"start": 424.0, "text": "that shows status and control during voice conversations."}, {"start": 428.0, "text": "Starting in iOS 27, the Voice Control template"}, {"start": 431.0, "text": "is available for all CarPlay app categories."}, {"start": 434.0, "text": "The Voice Control template includes a prompt,"}, {"start": 436.0, "text": "and an animated icon to indicate the state of the conversation."}, {"start": 440.0, "text": "Both the prompt and the icon are optional."}, {"start": 443.0, "text": "Your app can now add up to two action buttons,"}, {"start": 446.0, "text": "plus leading and trailing navigation bar buttons."}, {"start": 449.0, "text": "If your app is used to ask questions about destinations or contact information,"}, {"start": 454.0, "text": "action buttons are a good way to offer to start navigation or place a phone call."}, {"start": 459.0, "text": "To use URLs to perform those tasks,"}, {"start": 461.0, "text": "open the URL with CPTemplateApplicationScene to perform that request in CarPlay."}, {"start": 467.0, "text": "The Voice Control template is also available as an overlay."}, {"start": 470.0, "text": "Instead of occupying the entire display,"}, {"start": 473.0, "text": "your Voice Control elements can appear overlaid on top of another template,"}, {"start": 477.0, "text": "such as the Map Template in a navigation app."}, {"start": 479.0, "text": "Use the CPInterfaceController to show the voice control template as an overlay."}, {"start": 484.0, "text": "Although the overlay supports the same text and buttons"}, {"start": 487.0, "text": "as the full voice control presentation,"}, {"start": 489.0, "text": "provide shorter text variants to better fit the available space"}, {"start": 493.0, "text": "when presented as an overlay."}, {"start": 495.0, "text": "When supporting voice conversations,"}, {"start": 497.0, "text": "try using audio feedback to indicate the status of the conversation."}, {"start": 500.0, "text": "Feedback sounds such as waiting sounds"}, {"start": 503.0, "text": "while the app is still preparing the conversation"}, {"start": 505.0, "text": "and processing sounds when the app is still preparing a response"}, {"start": 509.0, "text": "are helpful cues when interacting with an app primarily through speaking."}, {"start": 513.0, "text": "Setup your AVAudioSession with the play and record category,"}, {"start": 517.0, "text": "use the default mode, and disable mixing."}, {"start": 520.0, "text": "In addition to the new template APIs,"}, {"start": 522.0, "text": "we've expanded the availability of existing templates to more categories of apps."}, {"start": 527.0, "text": "For details about app categories and available templates,"}, {"start": 531.0, "text": "check the CarPlay Developer Guide."}, {"start": 534.0, "text": "We covered a lot of new UI enhancements available for apps in CarPlay."}, {"start": 539.0, "text": "The easiest way for me to see all the improvements I made in Landmarks"}, {"start": 542.0, "text": "is right here on my Mac, using CarPlay Simulator."}, {"start": 545.0, "text": "Let's take a look!"}, {"start": 551.0, "text": "Here is CarPlay Simulator and I've setup the configuration"}, {"start": 554.0, "text": "to represent a vehicle that supports video."}, {"start": 557.0, "text": "For vehicles that support video, an app with only the CarPlay video entitlement"}, {"start": 561.0, "text": "will appear on the CarPlay home screen."}, {"start": 563.0, "text": "Here's the Landmarks app on the home screen,"}, {"start": 565.0, "text": "I'll launch it to browse videos."}, {"start": 569.0, "text": "On the top left, there's a tab bar."}, {"start": 572.0, "text": "I added a new videos tab that only appears when video is supported."}, {"start": 577.0, "text": "The MiniPlayer in the top right"}, {"start": 579.0, "text": "offers a quick way to resume playback on the Alps video I was recently watching."}, {"start": 584.0, "text": "I setup wide thumbnails for the landmarks."}, {"start": 587.0, "text": "Since I was already watching the Alps video,"}, {"start": 589.0, "text": "the thumbnail's playback configuration"}, {"start": 591.0, "text": "shows the remaining time and current progress."}, {"start": 596.0, "text": "Overlays on the thumbnails provide badging for newly added and live streaming videos."}, {"start": 602.0, "text": "The thumbnail for this event has a sports overlay showing the teams and scores."}, {"start": 608.0, "text": "While browsing this list of landmarks,"}, {"start": 610.0, "text": "I wanted to know which landmark has the most visitors every year."}, {"start": 613.0, "text": "I added this list row to activate a voice conversation"}, {"start": 616.0, "text": "where I can ask that question."}, {"start": 620.0, "text": "The voice control template is shown as an overlay,"}, {"start": 622.0, "text": "keeping the list behind it visible."}, {"start": 625.0, "text": "But I want to get straight to watching a video."}, {"start": 632.0, "text": "Selecting a thumbnail pushes into a list template that has a details header."}, {"start": 636.0, "text": "The details header provides this large thumbnail,"}, {"start": 639.0, "text": "and additional information about the landmark using the title,"}, {"start": 642.0, "text": "subtitle, and body text."}, {"start": 645.0, "text": "I also added two buttons for play and add to playlist."}, {"start": 649.0, "text": "The rest of the list is used to show related videos."}, {"start": 653.0, "text": "Landmarks set the preferred presentation to video"}, {"start": 655.0, "text": "in the header's playback configuration."}, {"start": 658.0, "text": "Since video is the preferred presentation"}, {"start": 660.0, "text": "and CarPlay Simulator is currently set to allow video playback,"}, {"start": 663.0, "text": "tapping play will show the video."}, {"start": 666.0, "text": "I'll go ahead and play this video!"}, {"start": 677.0, "text": "The video player has menus to control subtitles and audio language selection,"}, {"start": 684.0, "text": "so your videos should include subtitles and additional languages when available."}, {"start": 688.0, "text": "Notifications can appear over the video,"}, {"start": 690.0, "text": "so there's also a button to enable the Do Not Disturb focus mode"}, {"start": 694.0, "text": "without leaving the video."}, {"start": 696.0, "text": "With thumbnail overlays, the MiniPlayer, voice control, and playback configurations,"}, {"start": 702.0, "text": "Landmarks built a great interface for discovering and playing videos in the car."}, {"start": 706.0, "text": "Now that we've seen all the new UI features in CarPlay framework,"}, {"start": 709.0, "text": "let's change directions to focus on a few more new features for navigation apps."}, {"start": 714.0, "text": "Navigation apps now have more control"}, {"start": 716.0, "text": "over the primary interface area of the Map template,"}, {"start": 719.0, "text": "and Route sharing coordinates your app's routing with the vehicle."}, {"start": 723.0, "text": "In iOS 27, your navigation app can show panels to create your own UI,"}, {"start": 727.0, "text": "independently from the flow of presenting trip and route options."}, {"start": 731.0, "text": "Panels can also include multiple UI elements,"}, {"start": 733.0, "text": "providing more flexibility for your navigation UI."}, {"start": 738.0, "text": "Panels are built by combining together a list of objects"}, {"start": 741.0, "text": "you already use in the CarPlay framework,"}, {"start": 743.0, "text": "such as trips, grids, route choices, route details,"}, {"start": 747.0, "text": "waypoints, and other list items."}, {"start": 750.0, "text": "The panel's button configuration sets up actions"}, {"start": 752.0, "text": "that will appear on the bottom of the panel,"}, {"start": 755.0, "text": "such as a \"Go\" or \"End\" button."}, {"start": 758.0, "text": "When your navigation app uses panels,"}, {"start": 760.0, "text": "you control the primary interface area of the map template."}, {"start": 764.0, "text": "By building up and then pushing panels,"}, {"start": 766.0, "text": "your app can show more content and controls while keeping the map visible."}, {"start": 771.0, "text": "Some vehicles with driver assistance systems work best"}, {"start": 774.0, "text": "when the intended route is known."}, {"start": 776.0, "text": "For example, vehicles may support automatic lane changes,"}, {"start": 779.0, "text": "or adjust their guidance systems to more closely match the route shown in your app."}, {"start": 783.0, "text": "Also, for a certain route,"}, {"start": 785.0, "text": "electric vehicles may suggest charging stops"}, {"start": 787.0, "text": "depending on the vehicle's available range."}, {"start": 792.0, "text": "With Route sharing, these driver assistance features"}, {"start": 795.0, "text": "can work even when people use your CarPlay navigation app to get directions."}, {"start": 800.0, "text": "Route sharing requires iOS 26.4 or later, and a supported vehicle."}, {"start": 806.0, "text": "Your app provides a route to the vehicle as an array of route segments"}, {"start": 810.0, "text": "which are geographic coordinates that are sent to the vehicle"}, {"start": 813.0, "text": "whenever the trip changes."}, {"start": 815.0, "text": "Looking at the Landmarks app has inspired me to go on a camping trip."}, {"start": 819.0, "text": "I'm leaving early in the morning and want to stop at a coffee shop along the way"}, {"start": 822.0, "text": "so I added two stops into a navigation app first coffee then a campground."}, {"start": 828.0, "text": "Using the CarPlay framework,"}, {"start": 829.0, "text": "the navigation app constructed a trip with two route segments."}, {"start": 833.0, "text": "Route sharing sent that trip to the vehicle."}, {"start": 835.0, "text": "Since my car is an electric vehicle,"}, {"start": 837.0, "text": "it estimated the energy consumption along this trip"}, {"start": 840.0, "text": "and determined that this trip requires a charging stop along the way."}, {"start": 844.0, "text": "The vehicle searched for the ideal charging station for this trip"}, {"start": 847.0, "text": "and sent that destination back to iOS."}, {"start": 850.0, "text": "This proposed waypoint is received by the navigation app via the map template."}, {"start": 854.0, "text": "The navigation app then has a choice in how to handle the suggested waypoint."}, {"start": 859.0, "text": "By returning updated travel estimates to the map template,"}, {"start": 862.0, "text": "the map template will automatically prompt the driver"}, {"start": 864.0, "text": "to accept the additional waypoint."}, {"start": 866.0, "text": "Or the navigation app can not return travel estimates"}, {"start": 870.0, "text": "and instead directly manage confirmation of the additional waypoint."}, {"start": 874.0, "text": "Either way, once the driver accepts the waypoint…"}, {"start": 877.0, "text": "… the navigation app updates the trip to have a new route segment."}, {"start": 881.0, "text": "Then the updated trip is again shared with the vehicle."}, {"start": 884.0, "text": "Now I'll stop at the charging station and then the coffee shop"}, {"start": 887.0, "text": "and both me and the car will get there energized."}, {"start": 891.0, "text": "Both the driver and your app control when Route sharing occurs."}, {"start": 895.0, "text": "When pairing with a vehicle,"}, {"start": 896.0, "text": "the driver is prompted to approve Route sharing for that vehicle."}, {"start": 900.0, "text": "The driver's approval allows any navigation app"}, {"start": 902.0, "text": "to share a route when connected to that vehicle."}, {"start": 905.0, "text": "To enable sharing routes from your navigation app,"}, {"start": 908.0, "text": "opt-in to Route sharing using the Map template."}, {"start": 911.0, "text": "If your app determines that certain trips are not eligible,"}, {"start": 914.0, "text": "Route sharing can also be disabled for an individual trip."}, {"start": 919.0, "text": "CarPlay Simulator makes testing your CarPlay app"}, {"start": 921.0, "text": "as easy as connecting to your Mac!"}, {"start": 924.0, "text": "For any category of app in CarPlay,"}, {"start": 926.0, "text": "CarPlay Simulator supports testing different screen sizes"}, {"start": 928.0, "text": "and vehicle configurations."}, {"start": 931.0, "text": "CarPlay Simulator is now available in Device Hub."}, {"start": 934.0, "text": "Navigation app developers should try out the new diagnostic tools for route sharing."}, {"start": 939.0, "text": "For video app developers,"}, {"start": 940.0, "text": "download CarPlay Simulator using the Additional Tools for Xcode package."}, {"start": 946.0, "text": "Now that you've seen the new template options,"}, {"start": 948.0, "text": "consider adding thumbnails, the details header, and voice control to your app in CarPlay."}, {"start": 953.0, "text": "If your app has videos, make them available for browsing in CarPlay."}, {"start": 957.0, "text": "Finally if you have a navigation app, check out the new panels and route sharing."}, {"start": 964.0, "text": "Thanks for following along as I pointed out these new features"}, {"start": 967.0, "text": "and of course I'm looking forward to seeing how you'll use them"}, {"start": 970.0, "text": "to rev up your app in CarPlay!"}]}