iOS SwiftUI CarPlay“Hello World”

jat*_*jat 2 ios carplay swiftui

我有一个完整的 SwiftUI 项目/应用程序(在 AppStore 中),我想添加一些 CarPlay 功能。我已正确设置权利,并且能够在 CarPlay 模拟器上看到该图标。

我已经尝试了具有各种类配置的各种 info.plist 配置,并且仅在模拟器中启动应用程序时才发生崩溃。

我对显示视图的方式有点困惑。我想从一个简单的“Hello world”开始,但即使这样也很有挑战性:)

这个问题似乎是我需要的,但没有详细介绍 AppDelegate 配置。

iOS 15.4 - SwiftUI + CarPlay - 状态未更新

这看起来很有希望,但对我来说又不够详细:

https://dev.to/nitricware/adding-carplay-to-a-swiftui-life-cycle-app-h9h

这也是,但我怀疑这是一种较旧的显示视图的方式。

https://www.adapptor.com.au/blog/enhance-existing-apps-with-carplay

如果我能通过简单的“Hello World”获得帮助,我将不胜感激!

来自信息.plist

 <key>UIApplicationSceneManifest</key>
        <dict>
            <key>UIApplicationSupportsMultipleScenes</key>
            <true/>
            <key>UISceneConfigurations</key>
            <dict>
                <key>CPTemplateApplicationSceneSessionRoleApplication</key>
                <array>
                    <dict>
                        <key>UISceneDelegateClassName</key>
                        <string>$(PRODUCT_MODULE_NAME).CarPlaySceneDelegate</string>
                    </dict>
                </array>
            </dict>
        </dict>
Run Code Online (Sandbox Code Playgroud)

CarPlaySceneDelegate.swift

import Foundation
import CarPlay

class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate {
    
  func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene,
                                  didConnect interfaceController: CPInterfaceController) {
    
    let screen = CPInformationTemplate(title: "Root", layout: .leading, items: [CPInformationItem(title: "Hello", detail: "CarPlay")], actions: [])
    
    interfaceController.setRootTemplate(screen, animated: true, completion: { _,_ in
        // Do nothing
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Sco*_*ist 7

我一直遇到与上述相同的问题。我试图将 CarPlay 功能添加到现有的 SwiftUI 应用程序中;但是,在 CarPlay 中启动应用程序会导致“NSGenericException”,原因是:“应用程序未在其场景委托中实现 CarPlay 模板应用程序生命周期方法。” 错误。

我下载了 Paulw11 的 CPHelloWorld 项目(谢谢 Paul!)并让它按预期运行。然后我将 CPHelloWorld 的权利、info.plist、CarPlaySceneDelegate 等与我的进行了比较,一切似乎都是一样的。然而,他的工作有效,而我的却没有。然后,我启动了一个新的 SwiftUI 模板项目,并从 CPHelloWorld 引入了 CarPlay 功能,并确认其有效。然后,我引入了项目中的所有源代码、包依赖项和项目设置 - 每一步都检查 CarPlay 应用程序是否仍然正确启动。最终,我在这个新项目中将我的应用程序与功能正常的 CarPlay 场景重新组合在一起。

那么为什么我最初的尝试仍然失败呢?我开始比较构建设置,发现一些涉及不同场景的内容。在与 CarPlay 配合使用的应用程序中,“应用程序场景清单(生成)”设置为“否”。在我原来的应用程序中(尽管权利、info.plist 和 CarPlaySceneDelegate 相同,但该应用程序无法正常工作),这被设置为 YES。不知道它是什么时候打开的,但它就在那里。

我回到不使用 CarPlay 的应用程序并关闭此构建设置(“应用程序场景清单(生成)”== NO),然后我可以在 CarPlay 中启动我的应用程序并在模拟器中查看根模板。

目标 -> 构建设置 -> “应用程序场景清单(生成)”== NO