You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS15 CarPlay调用setRootTemplate崩溃提示Allowed classes: (null)问题求助

这个崩溃的核心原因是CarPlay系统服务未识别到当前App的可用模板权限集合,所以返回Allowed classes为null,按照以下步骤逐一排查即可解决:

1 权限配置校验

  • 确认entitlements文件中CarPlay权限键的正确性:iOS15+ 音频类CarPlay App的正确键为com.apple.developer.carplay-audio,类型为Boolean,值为YES,不要使用旧版废弃的权限键,且不要同时添加多个未申请的CarPlay权限类型,避免系统识别混乱。
  • 确认Info.plist中添加了CFBundleSupportedCarPlayTypes数组,数组中添加对应类型的字符串值Audio,类型不匹配会导致系统无法匹配可用模板列表。
  • 确认当前使用的描述文件是申请CarPlay权限后重新生成的,所属开发团队和你申请CarPlay权限的团队完全一致,无混用其他团队描述文件的情况。

2 开发环境校验

  • 确认使用Xcode 13及以上版本编译项目,低于该版本的Xcode搭载的CarPlay SDK和iOS15系统不兼容,会出现模板识别异常。
  • 确认测试设备/模拟器的系统版本为正式版iOS15,不要用beta版本系统,beta版本常出现CarPlay权限相关的底层bug。

3 代码逻辑校验

  • iOS15上CPListTemplate初始化不允许传入空的sections数组,你可以修改初始化代码,传入至少1个非空的CPListSection测试:
func templateApplicationScene(_ templateApplicationScene: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController) {
    CPLogger.log("in templateApplicationScene didConnect")
    self.interfaceController = interfaceController
    // 新增非空section
    let testSection = CPListSection(items: [], header: "测试分组", footer: nil)
    let screen = CPListTemplate(title: "CarPlay", sections: [testSection])
    self.interfaceController?.setRootTemplate(screen, animated: true, completion: { _,_ in
    })
}
  • 可临时替换根模板为CPNowPlayingTemplate.shared测试,如果替换后不崩溃,说明权限配置正常,问题出在CPListTemplate的初始化参数上;如果仍崩溃,回到权限配置步骤重新排查。

内容的提问来源于stack exchange,提问作者WoffOVkee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:36:05