如何在 CarPlay 车载仪表盘中支持 Route Guidance
2020 年 4 月 9 日
CarPlay 车载仪表盘将音乐、地图和 Siri 建议整合到车内显示屏中,为你带来更安全、更智能的体验。从 iOS 13.4 开始,你也可以在你的导航 App 中添加对 CarPlay 车载仪表盘的支持:通过采用 CarPlay 车载框架内的一些新功能,让你的地图、导航和仪表盘按钮一目了然。
注意:为了将你的 App 与 CarPlay 车载仪表盘融为一体,你的 CarPlay 车载导航 App 需要支持 UIScene。有关采用 UIScene 的更多信息,请查看“iPad 上多窗口简介”。
开始使用 CarPlay 车载仪表盘
为了在你的导航 App 中支持 CarPlay 车载仪表盘,你需要更新到 Xcode 11.4。
iOS 13.4 提供了 CarPlay 车载框架内的新功能:CPDashboardButton
、CPDashboardController
和 CPTemplateApplicationDashboardScene
。
CPTemplateApplicationDashboardScene 是一个新的 UIScene 子类。当 CarPlay 决定你的 App 应该出现在 CarPlay 车载仪表盘中时,它会创建这个子类。
CPDashboardController 和 CPDashboardButton 让你能够管理出现在 CarPlay 车载仪表盘中的控件。
如何添加对 CarPlay 车载仪表盘的支持
为了使用 CarPlay 车载仪表盘,你首先需要支持 CPTemplateApplicationDashboardScene 及其相关协议 CPTemplateApplicationSceneDelegate。
注意:你需要使用 CPTemplateApplicationSceneDelegate 而不是 CPApplicationDelegate 来支持该功能。
下面我们将带你完成每一步。此外,我们还提供了一个 UIApplicationSceneManifest 的例子供你参考。
```xml
<key>UIApplicationSceneManifest</key>
<dict>
<key>CPSupportsDashboardNavigationScene</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>CPTemplateDashboardScene</string>
<key>UISceneConfigurationName</key>
<string>CarPlay-Dashboard</string>
<key>UISceneDelegateClassName</key>
<string>MyAppCarPlayDashboardSceneDelegate</string>
</dict>
</array>
</dict>
</dict>
```
步骤 1:创建一个场景委托
首先,为 CPTemplateApplicationSceneSessionRoleApplication 定义一个场景委托。你可以在你的 UIApplicationDelegate 中,通过在 application:configurationForConnectingSceneSession:options: 中返回一个配置来动态完成,或者提前在你的 Application Scene Manifest 中的 Info.plist 中完成。
这个委托必须遵循 CPTemplateApplicationSceneDelegate,它要被赋予 CPInterfaceController 和 CPWindow 的实例,就像你已熟悉的 CPApplicationDelegate 一样。
此外,为了支持 CPTemplateApplicationDashboardScene,你需要在你的 Application Scene Manifest 中包含一个新的 key 来声明对 CarPlay 车载仪表盘的支持:CPSupportsDashboardNavigationScene,其值为 true。
步骤 2:定义仪表盘委托
接下来,定义你的仪表盘场景的委托,就像你定义主模板应用场景一样。这个委托遵循 CPTemplateApplicationDashboardSceneDelegate,并会被赋予一个 CPDashboardController 和 UIWindow 的实例。