使用SiriKit开发汽车门锁应用时设置carName词汇致应用崩溃
解决SiriKit设置carName词汇时崩溃的问题
我之前做SiriKit汽车相关Intent的时候也踩过这个坑,你的崩溃异常NSInternalInconsistencyException加上“Illegal attempt to provide vocabul...”的提示,大概率是词汇配置的类型或时机不符合SiriKit的规则,下面给你几个针对性的解决办法:
1. 确认词汇类型完全匹配
INGetCarLockStatusIntent里的carName对应的Siri词汇类型必须是INVocabularyStringTypeCarName(Swift里简写为.carName),如果你误用了之前教程里的workoutActivityName这类其他类型,就会触发这个崩溃。
正确的调用写法参考:
// 放在主App的启动流程中执行 let myCarNames = ["我的Model 3", "家庭代步SUV"] INVocabulary.shared().setVocabularyStrings(myCarNames, for: .carName)
2. 必须在主App中设置,且时机要早
- 绝对不能在Intent Extension里设置Siri词汇,Extension没有权限修改Siri的词汇库,必须把配置代码放在主App的启动逻辑里(比如
AppDelegate的didFinishLaunchingWithOptions,或者SceneDelegate的scene(_:willConnectTo:options:))。 - 不要等到处理Intent的时候才去设置词汇,这时候SiriKit的上下文已经初始化完成,再修改就会触发内部一致性异常。
3. 检查词汇内容的合法性
虽然这个情况比较少见,但如果你的carName数组里包含空字符串、特殊不可见字符,也可能导致Siri拒绝接收词汇。建议先测试纯文本的简单名称,确认没问题后再扩展复杂内容。
如果还是有问题,可以查看完整的崩溃日志,异常信息后面通常会附带更具体的提示(比如“invalid type for carName intent”),能帮你更快定位问题。
内容的提问来源于stack exchange,提问作者Vidhya Sri
相关产品推荐
相关产品推荐

