【问题标题】:Adding CarPlay to a SwiftUI lifecycle app将 CarPlay 添加到 SwiftUI 生命周期应用程序
【发布时间】:2022-08-16 17:21:16
【问题描述】:

将 CarPlay 集成到使用 SwiftUI 生命周期的应用程序中的推荐方法是什么?

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

我如何在这里使用CPTemplateApplicationSceneDelegate

  • 根据您的要求:CarPlay 有自己的委托和模板(又名用户界面视图、按钮、列表)。您从信息文件中定义初始委托。
  • 检查this
  • @PtitXav 您的链接描述了场景委托生命周期的过程,这是一个典型的 UIKIt 生命周期。如果你用 SwiftUI 启动一个项目,你有继承自 App 的结构,没有场景委托
  • 检查 [thsi}(stackoverflow.com/questions/71524945/…) :它使用 UIHostingController
  • @PtitXav 但这不是应用程序生命周期。他使用 AppDelegate。

标签: ios swift swiftui carplay


【解决方案1】:

如果您没有自定义应用程序委托和/或场景委托(您最终可能需要它来处理推送通知等内容),那么通过 info.plist 让您的应用程序知道就足够了。您需要 CarPlay 场景的场景委托,并将以下内容添加到您的 info.plist:

<dict>
    <key>UIApplicationSupportsMultipleScenes</key>
    <true/>
    <key>UISceneConfigurations</key>
    <dict>
        <key>CPTemplateApplicationSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneClassName</key>
                <string>CPTemplateApplicationScene</string>
                <key>UISceneConfigurationName</key>
                <string>TemplateSceneConfiguration</string>
                <key>UISceneDelegateClassName</key>
                <string>AppFeature.CarPlaySceneDelegate</string>
            </dict>
        </array>
    </dict>
</dict>

UISceneConfigurationName 的值在场景委托的 scene(_:willConnectTo:options:) session.configuration.name 中传递给您。 UISceneDelegateClassName 的值必须与 CarPlay 场景代理的类型名称相匹配。请注意,如果您将 CarPlay 代码封装在包/框架中,则需要在代理名称前加上模块名称(在本例中为 AppFeature)。如果委托在您的应用目标中,只需使用CarPlaySceneDelegate

场景委托的摘录可能如下所示:

class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate {
  let templateManager = TemplateManager() // see Apple's sample code

  func templateApplicationScene(_: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController) {
    templateManager.connect(interfaceController)
  }

  func templateApplicationScene(_: CPTemplateApplicationScene, didDisconnectInterfaceController _: CPInterfaceController) {
    templateManager.disconnect()
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多