应用程序在使用Siri Kit设置carName的词汇表时崩溃

时间:2018-05-08 05:21:12

标签: ios11 sirikit xcode9.3

我正在尝试使用SiriKit开发一个应用程序来获取车门锁状态并从Siri设置相同的程序。我按照此博客https://www.appcoda.com/sirikit-introduction/进行了所有设置,将 INStartWorkoutIntent 替换为 INGetCarLockStatusIntent

但是当我尝试为carName设置词汇表时,应用程序会因以下异常而崩溃,

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'非法尝试通过不处理任何可以使用该类型词汇的意图的应用程序提供类型为INVocabularyStringTypeCarName的词汇表

我用来设置词汇表的源代码是,

INPreferences.requestSiriAuthorization { (status) in

  }      
INVocabulary.shared().setVocabularyStrings(["benz", "bmw", "audi"], of: .carName)

AppDelegate 中,我添加了以下方法

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    guard let intent = userActivity.interaction?.intent as? INGetCarLockStatusIntent else {
        print("AppDelegate: Start Workout Intent - FALSE")
        return false
    }
    print("AppDelegate: Start Workout Intent - TRUE")
    print(intent)
    return true
}

还为意图处理程序创建了扩展,并实现了 INSetCarLockStatusIntentHandling INGetCarLockStatusIntentHandling 协议。当我尝试在iPhone 10中运行它时,我遇到了这个问题。

2 个答案:

答案 0 :(得分:0)

检查,是否在构建阶段->嵌入式应用程序扩展中的项目目标中添加了Siri扩展。也许如果将INStartWorkoutIntent替换为INGetCarLockStatusIntent,则旧的INStartWorkoutIntent仍然保留在其中。

我的当机解决此问题。

答案 1 :(得分:0)

我面临着类似的问题。确保扩展程序的 部署目标 设置为适当的iOS版本。使用最新的Xcode创建扩展(当前为10.1)会将 部署目标 设置为 12.1 ,因此在上运行时会导致崩溃> iOS 10 。因此,您应该将其更改为所需的最小值。