iOS Siri Intents Extension“我没有看到用于此目的的应用程序。您需要下载一个。”

时间:2018-10-02 17:09:52

标签: cocoapods sirikit

我正在编写一个Swift框架,其中包含一个Siri intentdefinition文件和从主应用程序,Today扩展和Siri intent扩展中使用的代码。我正在使用Cocoapods分发框架(它在一个私有仓库中,所以我不能共享框架本身)。这对于在应用程序和Today扩展程序内编译,链接和执行代码非常有效。

当用户执行相应操作时,该应用程序(或“今日”扩展程序)成功捐赠了意图。然后,我可以转到“系统设置” /“ Siri /建议的快捷方式”,并记录“个性化短语”以触发意图。

当我使用录制的短语调用Siri时,她的回答是“我没有看到相应的应用。您需要下载一个。”

捐赠意图时,我还注意到以下错误消息:

  

[Intents]-[INIntentResponse init]应用程序代理>不包含意图   nameOfIntent,回退到当前包

在将其移入框架之前,相同的代码可以正常工作,因此我知道代码是正确的。

1 个答案:

答案 0 :(得分:3)

很明显,捐赠的意图中包含的信息不足以使com.apple.notificationcenterui能够解析正确的应用程序以响应该意图,我对此感到困惑。为了使系统成功找到应用程序,intentdefinition文件必须包含在应用程序的主捆绑包中。如果您不使用Cocoapods,只需按照Apple在其Introduction to Siri Shortcuts WWDC video中的建议,只需选中一个复选框即可将intentdefinition文件包含在应用程序的捆绑软件中。

在使用Cocoapods时,这是有问题的,因为框架和intentdefinition文件位于工作空间中的单独项目中,因此您不能仅选中一个复选框以将该文件包含在应用程序的捆绑包中。

为解决使用Cocoapods时出现的问题,我将以下内容添加到应用程序的podfile中:

post_install do |installer|
  require 'fileutils'
  # Copy Siri intentdefinition file from framework to app's resource folder, then use "Copy Bundle Resources" phase to copy it into app's main bundle
  FileUtils.cp_r('Pods/FrameworkName/FrameworkName/Base.lproj/Intents.intentdefinition', 'Resources/Intents.intentdefinition', :remove_destination => true)
end
  1. 运行pod install
  2. 导航至应用程序目标的“构建阶段” /“复制捆绑包资源”
  3. 点击列表底部的“ +”按钮
  4. 点击提示底部的“添加其他...”
  5. 导航到应用程序的“资源”文件夹
  6. 选择Intent.intentdefinition文件,该文件应该已经在步骤#1的文件夹中

现在,每次您pod installpod update时,它将自动将最新的intentdefinition放在编译器可以将其包含在应用程序包中的位置,并且Siri很高兴。