代码之家  ›  专栏  ›  技术社区  ›  Paul King

iOS Siri打算扩展“我没有看到这样的应用程序。你需要下载一个。”

  •  4
  • Paul King  · 技术社区  · 6 年前

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

    当我用录制的短语调用Siri时,她回答说:“我没有看到这样的应用程序。你需要下载一个。”

    [意图]-[INIntentResponse init]应用程序代理<com.company.appID公司 文件:///Users/username/Library/Developer/CoreSimulator/Devices/../data/Containers/Bundle/Application/../AppName.app :0>&燃气轮机;不包含意图 nameofinent,返回到当前bundle

    同样的代码在我把它移到一个框架之前工作得很好,所以我知道代码是正确的。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Paul King    6 年前

    显然,捐赠意向中包含的信息不足以让com.apple.notificationcenterui解析正确的应用程序来响应该意向,这让我感到困惑。为了让系统成功地找到应用程序,intentdefinition文件必须包含在应用程序的主捆绑包中。如果你不使用Cocoapods,只需勾选一个框,将intentdefinition文件包含在应用程序包中,就像苹果在其应用程序包中推荐的那样 Introduction to Siri Shortcuts WWDC video

    当使用cooapods时,这是有问题的,因为框架和intentdefinition文件位于工作区中的一个单独的项目中,所以您不能只选中一个框就将该文件包含在应用程序包中。

    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. 选择Intent.intentdefinition文件,该文件应该已经在步骤1的文件夹中

    现在,每次你 吊舱安装 pod update