iOS Siri意图扩展:“我没有看到相关应用程序,请下载一个。”

6
我正在编写一个Swift框架,其中包含Siri intentdefinition文件和代码,这些代码既可以从主应用程序中使用,也可以从Today扩展程序和Siri intent扩展程序中使用。我使用Cocoapods分发框架(它位于私有存储库中,因此无法共享框架本身)。这对于在应用程序和Today扩展程序中编译、链接和执行代码非常有效。
当用户执行相应操作时,应用程序(或Today扩展程序)成功捐赠了意图。然后,我可以进入系统设置/Siri/建议的快捷方式,并记录一个“个性化短语”来触发该意图。
当我使用记录的短语调用Siri时,她会回答“我没有看到相关的应用程序,请下载一个”。
我还注意到在捐赠意图时出现了以下错误消息:
[Intents] -[INIntentResponse init] App proxy < com.company.appID file:///Users/username/Library/Developer/CoreSimulator/Devices/.../data/Containers/Bundle/Application/.../AppName.app :0>> doesn't contain intent nameOfIntent, falling back to current bundle 同样的代码在移动到框架之前运行良好,因此我知道代码是正确的。
1个回答

7
显然,捐赠的意图中包含的信息不足以让com.apple.notificationcenterui能够解析正确的应用程序来响应该意图,这让我感到困惑。为了使系统成功找到应用程序,必须将意图定义文件包含在应用程序的主要捆绑包中。如果您没有使用Cocoapods,只需勾选一个框即可将意图定义文件包含在应用程序的捆绑包中,正如苹果在其Introduction to Siri Shortcuts WWDC video中推荐的那样。
使用Cocoapods时,这是有问题的,因为框架和意图定义文件位于工作区内的单独项目中,所以您无法只勾选一个框即可将文件包含在应用程序的捆绑包中。
当使用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. 进入您的应用程序目标的 "Build Phases"/"Copy Bundle Resources"
  3. 在列表底部单击 "+" 按钮
  4. 在提示的底部单击 "Add Other..."
  5. 导航到您的应用程序的 "Resources" 文件夹
  6. 选择 Intent.intentdefinition 文件,该文件应已经在第1步的文件夹中

现在,每次您运行 pod installpod update ,它都会自动将最新的 intentdefinition 放在编译器可以将其包含在应用程序包中且 Siri 可以使用的位置。


如果您将其包含在框架中并且没有使用pods进行链接,那么它是相同的。但是您可以将引用添加到项目中并添加到复制阶段。感谢解决方案。 - MetaImi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接