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
相关产品推荐
相关产品推荐

