【发布时间】:2018-10-22 09:41:06
【问题描述】:
我们的应用还包含一个 Watch Extension。应用程序的部分功能是在任一设备上启动或停止进程,并通过发送事件及其发生日期来通知其对应方。我们现在还想为此使用带有自定义意图的 Siri 快捷方式。 目前我们没有运行 watchOS 5 的手表,所以我们只能在模拟器中进行测试。
在 Apples SoupChef 示例应用程序之后,我们设法让快捷方式在两台设备上运行,并根据需要在后台执行任务。但是激活 WCSession 以将消息发送到其他设备失败并出现错误
[WC] -[WCXPCManager onqueue_reconnect]_block_invoke 由于 NSXPCConnectionInterrupted 重新连接到守护进程时出错
被反复调用。
在尝试将消息发送到 IntentHandler 中的其他设备之前
func handle(intent: OurIntent, completion: @escaping (OurIntentResponse) -> Void)
我们正在尝试在其一开始就激活会话
func confirm(intent: OurIntent, completion: @escaping (OurIntentResponse) -> Void) {
let _ = Communicator.sharedInstance
// ...
}
Communicator 实现为单例,尝试在其 intit 方法中激活会话,如下所示:
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate() // fails with error mentioned above
}
我们知道 Apple documentation 中提到的 App Extensions 中可用 API 的限制,但这里似乎并非如此,因为我们通过了 WCSession.isSupported()。
不在后台运行快捷方式但让它们打开应用程序当然可以解决问题,但这会使快捷方式在我们的案例中毫无用处。
有谁知道我们是否错过了在这里使用 WCSession 的任何先决条件,还是根本不可能?就像之前说的,我们目前只能在模拟器中测试。会不会是这个问题?
非常感谢任何帮助
【问题讨论】:
-
嗨。你找到解决问题的方法了吗?我可能有类似的问题。在执行快捷方式后,我设法从我的句柄方法激活会话,并且可以在那里执行我的逻辑。但在那之后,当我启动普通的手表应用程序时,它不再按预期工作。似乎会话以某种方式搞砸了,因为它无法正确发送消息。
-
嘿@Thorsten 我正在努力解决同样的问题。尝试在原始意图处理程序的
handler方法中更早地激活会话。但是,我得到与您相同的错误。您对此有任何更新吗?