Highlight
iOS 27 为 CarPlay 引入视频应用、语音对话应用、导航面板和路线共享四大新能力,开发者可以用 CarPlay 框架在车机屏幕上直接构建视频浏览 UI、语音交互界面和更灵活的导航面板,同时让车辆辅助驾驶系统读取导航路线。
核心内容
视频应用:从 AirPlay 到原生浏览
以前,用户想在车里看视频,只能在 iPhone 上播放后通过 AirPlay 投到车机屏幕。操作路径长,而且无法在车机上直接浏览内容。
iOS 27 新增了 CarPlay 视频应用类别。只要车辆支持 video in car 功能,你的应用就可以在车机屏幕上直接展示视频列表、缩略图和详情页。用户停车时可以在车机上完成从浏览到播放的完整流程,比如充电等待时看视频。
视频应用需要两个条件:支持 AirPlay 视频串流,同时使用 CarPlay 框架提供浏览界面。如果车辆当前不允许视频播放,内容会自动降级为音频-only 继续播放,这对播客和体育直播很有用。
语音对话应用:从导航专属到全类别开放
语音对话应用在年初已经推出,但最初仅限特定类别。iOS 27 将其开放给所有 CarPlay 应用类别。
你的应用现在可以在车机上响应语音指令并执行操作。Voice Control 模板支持全屏和浮层两种展示方式。浮层模式特别适合导航应用,可以叠加在地图模板上方,用户边看地图边语音交互。
导航面板:从固定模板到自由组合
以前的 CarPlay 导航应用受限于固定的模板流程,展示路线选项和行程信息的灵活性不足。
iOS 27 的 Panel 让导航应用可以在地图主界面上自由组合多种 UI 元素,包括行程(trip)、网格(grid)、路线选择(route choice)、途经点(waypoint)和列表项。面板底部还可以配置操作按钮,比如”开始导航”或”结束”。地图始终可见,内容叠加在上方。
路线共享:让车辆辅助驾驶系统读懂你的导航
这是一个容易被忽略但影响深远的能力。很多带辅助驾驶系统的车辆需要知道你的行驶路线,才能做自动变道、调整引导系统,或者为电动车规划充电站。
以前 CarPlay 导航应用和车辆系统是割裂的。iOS 27 的路线共享(Route Sharing)让导航应用把路线以地理坐标数组的形式同步给车辆。车辆可以据此建议充电站等途经点,导航应用收到建议后可以选择自动提示用户确认,或者自己管理确认流程。
详细内容
视频浏览 UI 的新 API
(02:16)CarPlay 框架为视频浏览提供了完整的 UI 组件。
列表现在支持纵向和横向两种比例的图片。Card 元素更进一步,支持缩略图叠加层(overlay)、播放进度和运动信息。
// 创建带叠加层的缩略图
let overlay = CPImageOverlay(image: badgeImage)
let thumbnail = CPImageSet(
light: landmarkImage,
dark: landmarkImage
)
// 配置播放元数据
let playbackConfig = CPPlaybackConfiguration(
elapsedTime: 120,
duration: 600,
playbackAction: .play
)
playbackConfig.preferredPresentation = .video
// 组合到列表项
let item = CPListItem(
text: "Alps",
detailText: "Switzerland"
)
item.setImage(thumbnail)
item.imageOverlay = overlay
item.playbackConfiguration = playbackConfig
关键点:
CPImageOverlay可以是文字或图片,用于标记”新上线”或”直播中”等状态CPPlaybackConfiguration的preferredPresentation决定内容优先以视频还是音频形式播放playbackAction控制点击后的行为:播放、暂停或重播- 播放状态变化时要及时更新
playbackConfiguration,缩略图上的进度条才会同步
(05:29)Details Header 适合在列表顶部突出展示单个内容:
let header = CPDetailsHeader(
title: "Eiffel Tower",
subtitle: "Paris, France",
body: "Completed in 1889...",
image: thumbnail
)
header.playbackConfiguration = playbackConfig
header.actionButtons = [
CPBarButton(type: .text, title: "Play", handler: { _ in }),
CPBarButton(type: .text, title: "Add to Playlist", handler: { _ in })
]
let template = CPListTemplate(title: "Landmarks", sections: [
CPListSection(items: relatedVideos, header: header)
])
关键点:
- Details Header 把缩略图、标题、正文、播放配置和操作按钮组合在一起
- 播放进度会自动与第一个操作按钮结合展示
- 状态变化时更新
playbackConfiguration,确保用户返回时看到正确的进度
MiniPlayer 控制
(06:22)iOS 27 为 Now Playing 模板新增了 MiniPlayer,所有使用 Now Playing 的应用自动获得这个能力。大屏设备上可以直接在 MiniPlayer 上播放、暂停和跳过。
如果你的应用不需要 MiniPlayer,可以关闭:
// 关闭 MiniPlayer,改用导航栏图标
CPNowPlayingTemplate.shared.allowsMiniPlayer = false
关键点:
- 默认开启,无需额外代码
- 关闭后,Now Playing 入口以导航栏图标形式出现
Voice Control 模板
(07:08)Voice Control 模板现在对所有应用类别开放,支持全屏和浮层两种模式。
// 以浮层方式展示语音控制
let voiceTemplate = CPVoiceControlTemplate(
title: "Ask about landmarks",
subtitle: nil,
image: nil,
actionButtons: [
CPBarButton(type: .text, title: "Navigate", handler: { _ in })
]
)
interfaceController.presentTemplate(voiceTemplate, animated: true)
// 作为 overlay 展示
interfaceController.presentTemplate(
voiceTemplate,
animated: true,
presentationStyle: .overlay
)
关键点:
- 浮层模式下文字要更简短,因为可用空间更小
- 支持最多两个操作按钮,加上导航栏的 leading/trailing 按钮
- 可以用 URL 打开方式触发导航或拨打电话:
CPTemplateApplicationScene.shared.open(url) - 建议配置
AVAudioSession使用 playAndRecord 类别,用音频反馈提示对话状态
导航 Panel
(12:03)导航应用可以用 Panel 组合多种元素:
let panel = CPPanel(
items: [
trip,
routeChoice,
waypointList,
gridItem
],
buttonConfiguration: CPButtonConfiguration(
primaryAction: .go,
secondaryAction: .end
)
)
mapTemplate.pushPanel(panel, animated: true)
关键点:
- Panel 的
items可以混合CPTrip、CPRouteChoice、CPWaypoint、CPGridButton等多种类型 buttonConfiguration配置面板底部的操作按钮- 推送 Panel 后,导航应用控制地图模板的主界面区域
- 地图始终可见,Panel 内容叠加在上方
路线共享
(15:06)导航应用通过 Map Template 代理方法启用路线共享:
// 启用路线共享
func mapTemplateShouldProvideRouteSharing(_ mapTemplate: CPMapTemplate) -> Bool {
return true
}
对单个行程禁用:
// 此行程不参与路线共享
trip.routeSegmentsAvailableForRegion = false
关键点:
- 需要 iOS 26.4 以上和受支持的车辆
- 用户首次配对车辆时需要授权路线共享
- 路线以地理坐标数组(route segments)的形式发送给车辆
- 车辆可以建议充电站等途经点,通过
CPMapTemplate代理方法接收 - 导航应用返回更新后的行程估计时间,地图模板会自动提示用户确认;也可以不返回估计时间,自己管理确认流程
核心启发
为充电等待场景做视频内容
做什么:电动车充电通常需要 20-40 分钟。如果你的应用有视频内容(教程、新闻、体育),做成 CarPlay 视频应用,用户在充电等待时可以直接在车机屏幕上浏览和播放。
为什么值得做:充电等待是车内使用屏幕的高频场景,但以前用户只能通过 AirPlay 投屏,操作路径长且无法在车机上直接浏览内容。原生 CarPlay 视频应用让浏览到播放的完整流程都在车机上完成。
怎么开始:申请 CarPlay video entitlement,使用 CPTabBarTemplate 添加视频标签页,确保应用同时支持 AirPlay 视频串流。
用语音对话替代复杂的列表操作
做什么:在驾驶场景下,让用户说出”播放我最喜欢的播客”比层层点击列表更安全。用 CPVoiceControlTemplate 把搜索或推荐功能做成语音交互。
为什么值得做:驾驶时分心操作屏幕有安全隐患。语音交互让用户视线不离开路面就能完成操作,浮层模式可以叠加在现有界面上,不会打断当前操作流。
怎么开始:使用 CPVoiceControlTemplate 创建语音控制界面,配置 AVAudioSession 使用 playAndRecord 类别,用音频反馈提示对话状态。
让导航应用与车辆辅助驾驶协作
做什么:开启路线共享后,带辅助驾驶系统的车辆可以基于你的路线做自动变道、充电规划。
为什么值得做:以前 CarPlay 导航应用和车辆系统是割裂的,车辆辅助驾驶不知道你的行驶路线。路线共享让导航应用把路线同步给车辆,车辆可以据此建议充电站等途经点,提升驾驶体验。
怎么开始:实现 mapTemplateShouldProvideRouteSharing 返回 true,把 CPTrip 的 routeSegments 设置好,通过 CPMapTemplateDelegate 接收车辆建议的途经点。
用 Details Header 做内容推荐
做什么:视频或音频应用可以用 CPDetailsHeader 在列表顶部突出展示”今日推荐”或”继续观看”,下面列出相关内容。
为什么值得做:平铺列表缺乏层次感,用户需要滚动很久才能发现重点内容。Details Header 把缩略图、标题、正文、播放配置和操作按钮组合在一起,用户一眼看到重点。
怎么开始:创建 CPDetailsHeader 实例,设置标题、副标题、正文和图片,配置 playbackConfiguration 和 actionButtons,将其作为 CPListSection 的 header。
用 Panel 做更丰富的导航界面
做什么:导航应用不再局限于固定的路线预览和选择流程,用 Panel 在地图上同时展示路线概览、途经点列表和快捷操作按钮。
为什么值得做:以前的 CarPlay 导航应用受限于固定模板,展示路线选项和行程信息的灵活性不足。Panel 让多种 UI 元素自由组合,地图始终可见,用户在一屏内看到更多信息。
怎么开始:创建 CPPanel,在 items 中混合 CPTrip、CPRouteChoice、CPWaypoint 等类型,用 buttonConfiguration 配置底部操作按钮,调用 mapTemplate.pushPanel 展示。
关联 Session
- SwiftUI — 如果你的 CarPlay 应用同时有 iPhone 版本,可以用 SwiftUI 共享 UI 代码
- Live Activities — CarPlay 支持所有应用的 Live Activities 和小组件,不需要专门做 CarPlay 适配
- Design principles — 车机界面设计需要遵循特定的安全性和可读性原则
- App Intents new — 语音对话应用可以结合 App Intents 让 Siri 理解更复杂的用户指令
- Xcode 27 — CarPlay Simulator 已集成到 Device Hub,可以在 Xcode 27 中直接测试
评论
GitHub Issues · utterances