iOS Siri Intents Extension «Я не вижу приложения для этого. Вам нужно скачать его». - PullRequest
0 голосов
/ 02 октября 2018

Я пишу инфраструктуру Swift, содержащую файл определения Siri и код, который используется как из основного приложения, из расширения Today, так и из расширения намерений Siri.Я использую Cocoapods для распространения фреймворка (он находится в частном репозитории, поэтому я не могу поделиться фреймворком сам).Это хорошо работает для компиляции, компоновки и выполнения кода из приложения и расширения Today.

Приложение (или расширение Today) успешно передает намерение, когда пользователь выполняет соответствующее действие.Затем я могу зайти в «Системные настройки» / «Siri» / «Предлагаемые ярлыки» и записать «персонализированную фразу», чтобы вызвать намерение.

Когда я вызываю Сири, используя записанную фразу, она отвечает: «Я не вижу приложения для этого. Вам нужно будет загрузить его».

Я также заметил следующую ошибкусообщение при пожертвовании намерения:

[Intents] - [INIntentResponse init] прокси приложения <файл com.company.appID: /// пользователи / имя пользователя / библиотека / разработчик / CoreSimulator / Devices / .../data/Containers/Bundle/Application/.../AppName.app: 0 >> не содержит намерения nameOfIntent, возвращаясь к текущему пакету

Тот же код работал нормально, пока я не переехалэто в рамках, так что я знаю, что код правильный.

1 Ответ

0 голосов
/ 02 октября 2018

Очевидно, что информация, содержащаяся в намерении, которое было пожертвовано, недостаточна для того, чтобы com.apple.notificationcenterui смог найти правильное приложение для ответа на намерение, которое я нахожу сбивающим с толку.Чтобы система успешно нашла приложение, файл определения намерений должен содержаться в основном комплекте приложения.Если вы не используете Cocoapods, просто установите флажок, чтобы включить файл intentdefinition в комплект приложения, как рекомендует Apple в своем Знакомстве с Siri Shortcuts WWDC video .

При использовании Cocoapodsэто проблематично, поскольку каркас и файл intentdefinition находятся в отдельном проекте в рабочей области, поэтому нельзя просто установить флажок, чтобы включить файл в комплект приложения.

Чтобы решить эту проблемупри использовании Cocoapods я добавил следующее в подфайл моего приложения:

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. Перейдите к «Ресурсам» вашего приложения"folder
  6. Выберите файл Intent.intentdefinition, который уже должен находиться в папке, начиная с шага # 1

Теперь, каждый раз, когда вы pod install или pod update, он будетавтоматически ставитсяпоследнее определение намерения, где компилятор может включить его в комплект приложения, и Сири рада.

...