从锁定的设备启动 CarPlay 音频应用程序时无法启动

CarPlay audio app can't start when launched from locked device

我们有一个音频应用程序,我们想给它添加 CarPlay。该应用基本上有一个广播流列表,用户可以select播放哪个。

如果我在连接到 CarPlay 时从 phone 启动应用程序,或者如果我从 CarPlay 启动它并且设备已解锁,一切都很好。如果设备已锁定,应用程序将启动,我可以在 CarPlay 中看到列表中的元素,但是当其中之一被 selected 时,什么也没有发生。

我已经实施了 MPPlayableContentDelegateMPPlayableContentDataSource 并且应用程序具有音频背景模式 selected。流从网络获取,然后缓存到磁盘。

大家有没有遇到同样的问题,或者有什么解决办法的提示吗?你知道 Apple 是否有一个简单的工作音频应用程序支持 CarPlay 来测试吗?

我解决了将代码移动到 AppDelegate 以设置和激活音频会话的问题。以前是在管理所有流的单例中处理的,是 MPPlayableContentDelegateMPPlayableContentDataSource.

将其移至 AppDelegate 解决了问题,但我仍然不知道为什么:

func startAudioSession() {
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(.playback, mode: .default)
        try audioSession.setActive(true, options: AVAudioSession.SetActiveOptions.notifyOthersOnDeactivation)
    } catch let error as NSError {
        print("Unable to activate audio session:  \(error.localizedDescription)")
    }
}

我还在 Info.plist 中的 App Transport Security 条目中添加了 stremaming 的域以允许 HTTP (NSExceptionAllowsInsecureHTTPLoads)。之前只有 Allow Arbitrary Loads stetted too true。不知道有没有帮助。