本文是对 WWDC22|10016 – Get more mileage out of your app with CarPlay 的梳理。

关键词:CarPlay Simulator、Fueling App、Driving Task App、Instrument Cluster; 字数:4k+

概要

时隔 2 年,CarPlay 总算更新了。以下是该 session 的主要内容:

  • 介绍 iOS16 中新增的两种支撑 CarPlay 的 App 类型:Fueling App 和 Driving Task App
  • 探究 Navigation App 如安在受支撑车辆中的数字外表盘上实时制作地图
  • CarPlay Simulator:全新的 CarPlay App 开发与测验工具。它能够协助你在不离开办公桌的情况下衔接 iPhone Device 来开发和测验 CarPlay App,模仿真实环境,而无需常常来回跑到你的车上或购买售后商场主机进行测验
  • 简略演示运用 CarPlay Simulator 对 CarPlay App 进行测验

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

|本文中除 CarPlay App 外,单独出现的 App 均指 iPhone App

新增两种支撑 CarPlay 的 App 类型:Fueling App 和 Driving Task App

题外话|CarPlay 是为驾驭员打造的,当你在构建 CarPlay App 时,你应该考虑的主要用户是驾驭员。因而,你应该只在 CarPlay 上启用与驾驭时相关的功用,疏忽在驾驭时不应该做的任何功用,疏忽复杂的、不常见的功用。比如一次性装备、登录或阅览条款等作业最好在驾驭之前或之后执行,因而它们不应该出现在你的 CarPlay App 中。请留意,你的 App 需求授权才干显现在 CarPlay 中。你能够在 Apple CarPlay Developer 上依据你的 App 类型申请授权。

在这之前,有 6 种支撑 CarPlay 的 App 类型:

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

本年,Apple 新增了 2 种支撑 CarPlay 的 App 类型:Fueling App 和 Driving Task App。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

题外话|Templates

Templates(模版)是在 CarPlay App 出现 UI 的方法。你的 CarPlay App 担任供给数据,Templates 担任代表你将 UI 制作到轿车的显现屏上。你的 CarPlay App 能够很便利地接入 Templates,并且有几个好处:

  • Templates UI 不像 UIKit UI 那样可高度定制化,不用忧虑规划给你花里胡哨的界面了。Templates UI 的复杂度低,经过简略的 Templates API 即可让你在 CarPlay App 中出现 UI
  • 不必忧虑字体巨细问题,Templates 会自己适配不同的轿车显现屏
  • 运用 Templates,你的 CarPlay App UI 与其他 CarPlay App UI 风格坚持一致,能够让你的用户更容易上手运用你的 CarPlay App
  • Templates 会担任保证你的 CarPlay App UI 在任何支撑 CarPlay 的轿车中都能正常出现和运用,不管轿车中运用的显现屏类型和巨细怎么

总之,Templates 会为你处理大部分作业。

在构建 CarPlay App 时,有多种 Templates 可供挑选。例如,显现按钮数组的 Grid Template(下图第 1 行第 4 个),显现表格的 List Template (下图第 2 行第 1 个)等等。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

不管作为开发人员还是 iOS 用户,你都应该了解这些 Templates。最重要的是,你的 CarPlay 用户会了解它们,由于它们出现在整个 CarPlay 车载中。

有些 Templates 是一切 App 类型通用的,而有些 Templates 仅限于特定类型的 App 才干运用。具体能够经过以下图表检查。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Fueling App

EV Charging App|EV Charging App 是 Apple 在 iOS14 新增的支撑 CarPlay 的 App 类型。这类 App 能够用于查找电车充电站的方位,还能够协助驾驭员将轿车衔接到正确的充电站并发动它。

这种类型的功用不只适用于电车,它还适用于油车。于是 Apple 本年让 Fueling App 也支撑了 CarPlay,主要用于协助驾驭员给轿车加油。请留意,Fueling CarPlay App 除了支撑查找加油站方位外,还应该有发动加油机等功用。

Driving Task App

Driving Task App 是一种新式 CarPlay App,它能够支撑各式各样能够完结简略使命的 App。 但你依然需求留意的是,这些 CarPlay App 的主要意图有必要是完成驾驭员在驾驭时需求完结的使命,它是用于真实有助于驾驭的使命,而不只仅是在你(开发者)驾驭时需求完结的使命。

以下是归于此类型的一些 App 示例:

  • 协助控制轿车配件的 App
  • 供给驾驭或路途状态和信息的 App
  • 在驾驭开始或结束时协助完结使命的 App

下面让我们看一些更具体的例子。

Road Status App

Road Status App 能够告诉用户重要的路途信息。这个 CarPlay App 是运用 CPPointOfInterestTemplate 构建的。留意,运用此 CarPlay App 的用户正在开车,因而这样的 CarPlay App 应该供给一个十分简略的用户当时所在方位邻近的重要的路途信息列表。这不适用于协助用户在开车前进行完整道路规划的 App。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

在这个 CarPlay App 中,这是用户在挑选方位时看到的内容,提示信息主张言简意赅。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Trailer Controller App

Trailer Controller App 能够用于控制轿车配件。这个 CarPlay App 运用 CPInformationTemplate 供给有关已衔接配件的基本信息,并供给了两个按钮来给用户采取操作。这个 CarPlay App 的 UI 和功用便是如此简略。当然,该 iPhone App 还有许多其他功用,但与驾驭不相关的功用不在 CarPlay App 中供给。用户能够在离开车辆或泊车时运用该 iPhone App 中的更多功用。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Mileage Logger、Express Lane

最终,让我们看几个运用 CPGridTemplate 的示例。

Mileage Logger 是一个十分简略的 CarPlay App,就只有两个按钮。它支撑让驾驭员将他们的路程记录为个人路程或商务路程。此 App 十分适合新的 Driving Task App 类型,由于它能够让用户在驾驭时十分便利地完结简略的使命。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Express Lane App 与 Mileage Logger App 的 UI 近似,它是一个快速车道收费应答器 CarPlay App,运用 CPGridTemplate 让用户挑选车内有多少名乘客。这个 CarPlay App 的功用也十分简略便利,也是一个完美的 Driving Task App。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

小结

回顾一下,在规划你的 Driving Task App 时,你需求留意以下几点:

  • 一定要考虑制作一个单屏 CarPlay App,供给在驾驭时所需的最少功用
  • 只供给能够在几秒钟内完结的功用
  • 防止供给复杂或不常用的功用,例如首次设置或具体装备等
  • 不应该供给驾驭时不需求的功用,即使它与轿车相关

探究 Navigation App 如安在受支撑车辆中的数字外表盘上实时制作地图

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

CarPlay Dashboard|在 iOS 13 中,Apple 增加了 API 以支撑 Navigation App 在 CarPlay Dashboard 中制作地图。你能够修正 Info.plist 来增加声明对 Dashboard 的支撑,并增加所需的 Scene session role,然后完成所需的 delegate。当 Navigation CarPlay App 在 Dashboard 中出现或消失时,体系会告诉你的 delegate,并将 UIWindow 传递给你,你能够在其间制作地图内容。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

假如你之前现已对 Dashboard 做了支撑,那么增加对 Instrument Cluster 的支撑将是小菜一碟,由于它的完成方法与 Dashboard 类似。

首先在 Info.plist 的 Application scene manifest 中增加声明对 Instrument Cluster 的支撑(CPSupportsInstrumentClusterNavigationScene = true),并增加所需的 Scene session role。

<key>UIApplicationSceneManifest</key>
<dict>
    <!-- Indicate support for CarPlay dashboard -->
    <key>CPSupportsDashboardNavigationScene</key>
    <true/>
    <!-- Indicate support for instrument cluster displays -->
    <key>CPSupportsInstrumentClusterNavigationScene</key>
    <true/>
    <!-- Indicate support for multiple scenes -->
    <key>UIApplicationSupportsMultipleScenes</key>
    <true/>
    <key>UISceneConfigurations</key>
    <dict>
        <!-- For device scenes -->
        <key>UIWindowSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneClassName</key>
                <string>UIWindowScene</string>
                <key>UISceneConfigurationName</key>
                <string>Phone</string>
                <key>UISceneDelegateClassName</key>
                <string>MyAppWindowSceneDelegate</string>
            </dict>
        </array>
        <!-- For the main CarPlay scene -->
        <key>CPTemplateApplicationSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneClassName</key>
                <string>CPTemplateApplicationScene</string>
                <key>UISceneConfigurationName</key>
                <string>CarPlay</string>
                <key>UISceneDelegateClassName</key>
                <string>MyAppCarPlaySceneDelegate</string>
            </dict>
        </array>
        <!-- For the CarPlay Dashboard scene -->
        <key>CPTemplateApplicationDashboardSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneClassName</key>
                <string>CPTemplateApplicationDashboardScene</string>
                <key>UISceneConfigurationName</key>
                <string>CarPlay-Dashboard</string>
                <key>UISceneDelegateClassName</key>
                <string>MyAppCarPlayDashboardSceneDelegate</string>
            </dict>
        </array>
        <!-- For the CarPlay instrument cluster scene -->
        <key>CPTemplateApplicationInstrumentClusterSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneClassName</key>
                <string>CPTemplateApplicationInstrumentClusterScene</string>
                <key>UISceneConfigurationName</key>
                <string>CarPlay-Instrument-Cluster</string>
                <key>UISceneDelegateClassName</key>
                <string>MyAppCarPlayInstrumentClusterSceneDelegate</string>
            </dict>
        </array>
    </dict>
</dict>

然后完成你的 Application instrument cluster scene delegate。API 会供给一个 UIWindow 给你来制作你的地图内容,并在 Instrument Cluster 发动和封闭时告诉你。你能够将你的地图实时制作到 Instrument Cluster 中。

extension TemplateApplicationSceneDelegate: CPTemplateApplicationInstrumentClusterSceneDelegate {
    func templateApplicationInstrumentClusterScene(
        _ templateApplicationInstrumentClusterScene: CPTemplateApplicationInstrumentClusterScene,
        didConnect instrumentClusterController: CPInstrumentClusterController) {
        // Connected to Instrument Cluster
        TemplateManager.shared.clusterController(instrumentClusterController, didConnectWith: templateApplicationInstrumentClusterScene.contentStyle)
    }

    func instrumentClusterControllerDidConnect(_ instrumentClusterWindow: UIWindow) {
        // Window in which to draw instrument cluster contents 
       self.instrumentClusterWindow = instrumentClusterWindow
    }
}

虽然对 Instrument Cluster 与 Dashboard 增加支撑的完成十分类似,但有一些特定于 Instrument Cluster 的留意事项。

  • 首先,Instrument Cluster 支撑用户放大和缩小地图,因而你需求运用 CPInstrumentClusterControllerDelegate 在你的 CarPlay App 中完成此功用。
  • 同样,假如你的 CarPlay App 支撑显现指南针或速度约束,体系会在适当的时刻告诉你的 delegate 来制作它们。
  • 最终,请留意,你的 Instrument Cluster 视图或许会被轿车 Instrument Cluster 中的其他元素部分遮挡。当然,iOS 现已有了一流的机制来处理这种作业,那便是安全区域。你能够在视图控制器上重写 viewSafeAreaInsetsDidChange 来监听安全区域的改变,并在 Cluster View 上运用 safeAreaLayoutGuide 以保证视图区域中的关键内容可见而不被遮挡。

CarPlay Simulator

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

这是本年 CarPlay 更新的重磅,一切类型的 CarPlay App 都能用上它。

在这之前,你有 2 种方法来测验 CarPlay App:

  1. Xcode iPhone Simulator 内置有 CarPlay Window,能够很便利地快速测验你的 CarPlay App
  2. 经过将你的 iPhone Device 衔接到支撑 CarPlay 的轿车或售后商场主机上来测验 CarPlay App,这是之前在你的 iPhone Device 上测验 CarPlay App 的仅有方法

本年,Apple 给我们带来了 CarPlay Simulator,它是一个 Mac App,可模仿轿车中的 CarPlay 的完整环境。你能够在 Apple 开发者网站上下载 Xcode 附加工具包 – Additional Tools for Xcode 14 beta。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

然后翻开它,在 Hardware 文件夹下能够找到 CarPlay Simulator。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

运行该 App,然后将你的 iPhone Device 经过数据线衔接到你的 Mac,即可发动 CarPlay。

|你不需求晋级 MacOS 体系及 Xcode 版本也能运用 CarPlay Simulator。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

运用 CarPlay Simulator 有几个好处:

  • 当你运用 CarPlay Simulator 时,你的 iPhone device 现已衔接到你的 Mac,你能够一起运用 Mac 上的其它开发工具,例如在 Xcode 中调试或在 Instruments 中测验性能。
  • 在现有的 iPhone Simulator 内置的 CarPlay Window 上无法测验某些场景。例如,你需求测验你的 Navigation App 的语音指令是否与轿车的原生音频源(如 FM radio)正确混合,在这之前,你或许要常常来回跑到你的车上或购买售后商场主机进行测验。而现在,你能够运用 CarPlay Simulator,CarPlay 实际上是在你的 iPhone Device 上运行的,就像在轿车中一样。这意味着你现在能够很便利的在办公位上进行测验。
  • 你还能够运用 CarPlay Simulator 来测验多种不同装备的轿车,例如在不同尺度的显现屏上进行测验。

下面来介绍下 CarPlay Simulator 怎么运用。它的窗口界面由 3 个部分组成:

  • 窗口中间是 CarPlay 视图,模仿轿车显现屏
  • 窗口底部是模仿轿车中各种不同硬键和旋钮的按钮
  • 窗口顶部有一些按钮
    • Configure:装备按钮,点击将弹出一个具有更高档功用的辅助窗口,稍后具体解说
    • Limit UI Off/On:模仿约束 CarPlay 上的某些内容,例如缩短音频 CarPlay App 中列表的内容
    • Light/Dark UI:模仿在轿车的 CarPlay 中切换 UI 的深淡色外观
    • Light/Dark Map:模仿在轿车的 CarPlay 中切换地图的深淡色外观
    • Connected/Disconnected:模仿 iPhone Device 与轿车 CarPlay 断开衔接或从头衔接,而不需求拔插数据线。由于当你运用此按钮时你的 iPhone Device 仍将坚持与 Mac 的衔接,所以你能够运用它在 Xcode 调试 CarPlay Scene 的断开衔接或从头衔接。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Configure

点击主窗口中的 Configure 按钮即可翻开一个具有更高档功用的辅助窗口。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

在 General tab 中,你能够设置 CarPlay 显现屏的尺度。假如你的 CarPlay App UI 仅由 Templates 组成,Templates 会担任保证你的 UI 在任何支撑 CarPlay 的轿车都能正常出现和运用,不过你依然能够尝试装备不同的尺度来检查你的 UI 在不同轿车中的显现作用。但是,假如你的 App 是 Navigation App,那么尝试装备不同的尺度巨细和宽高比来测验并保证地图制作的代码正常作业是至关重要的。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

以下是一些引荐的用于测验 Navigation App 的显现尺度:

  • 800 x 480(default)
  • 1280 x 720
  • 900 x 1200

在 Cluster Display tab 中,你能够勾选 Instrument Cluster Display enabled 并点击 Restart Session 按钮,这时候会翻开一个新的窗口,它用于模仿轿车的外表盘显现屏。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

这个功用是与 Navigation App 相关的,外表盘显现屏用于在轿车外表盘的视野中为驾驭员显现地图或转向卡。

Restart Session 按钮用于当你修正 Configure 中的装备后,使其当即收效,而不需求从头发动 CarPlay Simulator。

以上便是 CarPlay Simulator 的相关内容,更多功用就交由你自己探究。

运用 CarPlay Simulator 对 CarPlay App 进行测验

发动 CarPlay Simulator。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

衔接你的 iPhone Device 到 Mac,CarPlay 会随之发动。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

假如你的 CarPlay App 为深淡色外观供给了两套 icon,那么你能够经过 Light/Dark UI 按钮来切换深淡色外观,以进行测验。不过在此之前,你需求先到 CarPlay 设置中设置外观形式为 自动,而不是 始终深色形式

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

你能够在 Configure – General tab 中设置 CarPlay 显现屏的尺度,然后点击 Restart Session 按钮就能使其当即收效,而无需重启 Carplay Simulator,这很便利。你能够经过此功用来测验你的 CarPlay App 特别是 Navigation App 是否杰出地适配了不同尺度的轿车显现屏。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

你能够在 Cluster Display tab 中启用 Instrument Cluster Display 来测验你的 Navigation App 对轿车 Instrument Cluster 的支撑。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

在你运用 CarPlay Simulator 对你的 CarPlay App 进行全面测验且情况杰出后,你能够完全相信你的 CarPlay App 会在真实的轿车中运行杰出。不过主张你还是去车上试一试。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

Templates 会担任保证你的 CarPlay App UI 在任何支撑 CarPlay 的轿车中上都能正常出现和运用。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

一些用户或许会喜爱运用轿车的旋钮来操作 CarPlay App。假如你现已运用 CarPlay Simulator 中的模仿旋钮进行测验,那么它在轿车中的体现也一定是不错的。Templates 会帮你处理好旋钮事件。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

你还能够测验下你的 Navigation App 对轿车数字外表盘的支撑作用。对驾驭员来说,将实时地图显现在他的视野范围内是十分棒的,运用你的 Navigation App 的驾驭员一定会喜爱它。

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

iOS CarPlay|WWDC22 - 通过 CarPlay 让你的 App 发挥更大的作用

参阅

  • WWDC22|10016 – Get more mileage out of your app with CarPlay
  • Apple|CarPlay App Programming Guide
  • iOS CarPlay|与你分享 CarPlay 音频 App 的开发进程与细节