我很抱歉,如果我没有正确张贴,因为我是一个新的张贴在这里。我目前正在尝试在我的应用程序中添加一个siri快捷方式。我已经创建了意图,并且能够正确地处理它,并使用虚拟数据创建响应。
然而,我无法从应用程序访问我的服务类和其他对象,尽管将我的应用程序添加到意图处理程序类的目标中。
class IntentHandler: INExtension, TestIntentHandling {
@available(iOS 12.0, *)
func confirm(intent: TestIntent, completion: @escaping (TestIntentResponse) -> Void) {
print("HERE")
completion(TestIntentResponse.init(code: .ready, userActivity: nil))
}
@available(iOS 12.0, *)
func handle(intent: TestIntent, completion: @escaping (TestIntentResponse) -> Void) {
let response = TestIntentResponse.init(code: .success, userActivity: nil)
//Trying to reach into service here to get real values
response.workout = "Bench Press"
response.weight = 150
completion(response)
}
}我想进入我的应用程序服务,在我的handle函数中填充我的锻炼和体重字段,但是我一直收到一个错误,说我的服务类不存在,并且希望有人能给我指明正确的方向。谢谢!
发布于 2019-10-03 13:54:22
根据文献资料
当用户使用Siri或Maps向应用程序发出请求时,SiriKit将加载意图应用程序扩展并创建其INExtension子类的实例。扩展对象的工作是为SiriKit提供用于处理特定意图的处理程序对象。从扩展对象的处理程序(for:)方法中提供这些对象。
您需要调用handler(for:)方法并返回适当的处理程序类(这将是您创建的类)。您的意图处理程序类(例如TestIntentHandler )将子类NSObject并符合您的TestIntentHandling协议。TestIntentHandler是你处理你的意图的地方。
发布于 2019-12-17 14:18:43
您需要创建一个应用程序组,并将您需要在应用程序和意图中使用的任何类和方法移动到两个应用程序之间共享的框架中。对于一些小数据,您可以使用UserDefaults(suiteName:"your.app.group")使用共享的your.app.group。
如果您的应用程序和应用程序扩展共享服务,请考虑以以下方式构造代码: ·在私有共享框架中实现核心服务。私有共享框架允许您将访问服务的代码放在一个代码模块中,并从多个目标中使用该代码。共享框架最小化了两个可执行文件的大小,并通过确保每个可执行文件使用相同的代码路径来简化测试。 使用共享容器存储公共资源。将相关图像和数据文件放入共享容器中,以便应用程序和应用程序扩展可以使用它们。在每个目标的“功能”选项卡中启用共享容器支持。
https://stackoverflow.com/questions/52822951
复制相似问题