如何调试我的 Siri (Intents) 扩展?

Posted

技术标签:

【中文标题】如何调试我的 Siri (Intents) 扩展?【英文标题】:How do I debug my Siri (Intents) extension? 【发布时间】:2016-06-29 08:10:51 【问题描述】:

我正在构建一个 Siri 又名 Intents 扩展程序。 我知道我可以在启动后将调试器附加到正在运行的进程,但是,我从来没有看到我的进程。我确实将我的应用程序的授权设置为活动状态,并且扩展程序必须至少运行一段时间,Siri 会显示明确的响应。

根据 Apple 文档,您应该使用 Siri 作为主机应用程序运行扩展方案。但是,如果我尝试在设备上没有任何反应,它会一直等待连接。 Apple 提到第一个连接可能需要“several minutes”,但不是几个小时......

知道我哪里出错了或如何实现与调试器的连接吗?或者至少有一些控制台输出?

【问题讨论】:

【参考方案1】:

只需选择您的siri扩展方案并点击运行按钮,然后xcode会提示您选择的应用程序列表,只需选择您的应用程序,更多详细信息请查看文章:http://jamesonquave.com/blog/adding-siri-to-ios-10-apps-in-swift-tutorial/

【讨论】:

这可能是正确的开始方式 - 至少某些部分现在可以工作。但我仍然无法调试 - 我正在使用此设置调试主机应用程序,而不是扩展程序! 您需要通过 PID 或名称附加到进程。在开始调试之前输入您的扩展名。至少在 Xcode 8 beta 4 的日子里,这曾经可以工作 您还可以使用 Siri Intent Query 编辑您的 Intent 扩展方案,以避免每次需要调试某些东西时都必须与您的手机通话。【参考方案2】:

    首先在设备中运行您的应用。

    选择在您的设备中运行的 SIRIKIT 扩展方案,从提示的列表中选择您的应用。

    等待 SIRI 激活,将正在运行的 SIRIKIT 扩展发送到后台。(有时您也不需要执行此步骤)。

    再次按下主页按钮激活 SIRI,发出命令,您将看到您的断点在 Intent Handler 中运行。

【讨论】:

在第 2 步中,当我从列表中选择我的应用而不是 Siri 时,它只会启动我的应用,而不会启动 Siri。 ^^^ 同样的事情发生在我身上,只是启动应用程序 - 我的处理程序永远不会运行。它作为处理程序列在扩展的 plist 中。我的断点从不命中,打印语句从不打印。【参考方案3】:

我尝试了所有方法,但没有成功我认为这是因为我的 mac 太旧(2010 年)并且无法处理。

这是一个非常 hack 的调试解决方案,但它确实有效。

使用此站点https://webhook.site创建一个 webhook

然后,如果您想检查您的代码是否在某个时间点,只需添加以下代码: (不要忘记将 URL 更改为与您收到的 webhook 相同的 URL)

let url1 = URL(string: "https://webhook.site/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/your_code_was_here")!
let task1 = URLSession.shared.dataTask(with: url1)
task1.resume()

然后您只需再次查看 webhook 站点以查看 GET 请求是否到达那里。

【讨论】:

以上是关于如何调试我的 Siri (Intents) 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

当我询问 siri 时,我的 Intent UI 扩展不显示

无法在 Swift 2.3 中编译 Siri 扩展

尝试提交带有 Siri 扩展的应用时,来自 App Store 的“Invalid Intent Vocabulary”错误

在 iOS 的 Intents 扩展中访问 Cloud kit/Core Data 条目

获取 Siri 使用的语言

如何在“new Intent(ContactsContract.Intents.Insert.ACTION)”启动的 Activity 完成后刷新我的 ListView?