На Xcode 11, как я могу настроить Intent для запуска в фоновом режиме? - PullRequest
0 голосов
/ 06 января 2020

TL; DR

На iOS 13 и Xcode 11, как я могу настроить Intent для работы в фоновом режиме и просто вернуть результат, чтобы его можно было использовать в качестве ввода для других действий в приложение Shortcuts?

Подробная информация о том, чего я пытаюсь достичь

В моем приложении есть список песен, которые я хочу раскрыть с помощью ярлыков (на самом деле, метаданные о песне, а не песня сам). Идея состоит в том, чтобы дать опытным пользователям возможность интегрировать эту базу данных musi c с другими приложениями или действиями, которые они хотят. Например, может оказаться полезным получить список предстоящих музыки c на следующий месяц и использовать его для создания событий календаря для каждой песни. Доступ к этому списку в приложении ярлыков может позволить им сделать это.

Я создал Intent под названием «Список всех непрочитанных выпусков Musi c» и определил его ответ в виде списка объектов, который содержит информацию о каждой песне. Проблема заключается в том, что когда я go для приложения ярлыков создаю новый ярлык с помощью этого намерения и запускаю его, он открывает мое приложение вместо запуска в фоновом режиме.

Шаги, которые я сделал для создания и настроить Intents

Вот высокоуровневое определение того, что я сделал для настройки Intents в проекте. В следующем разделе будут указаны исходный код и снимки экрана.

  1. Создан новый файл определения намерений SiriKit.
  2. Создан новый замысел.
    • Определили его заголовок, описание, параметры и отключили флажок «Намерение подходит для предложений Siri».
    • Определяли свойство ответа как массив (потому что это будет список песен ), и сконфигурировал Output как свойство этого массива.
  3. Создано новое расширение Intents, с отключенным флажком «Включить расширение UI». Идея здесь состоит в том, чтобы обработать запрос пользователя в фоновом режиме и вернуть список с результатами - пользовательский интерфейс не требуется.
  4. В цели расширения Intents определил массив IntentsSupported внутри Info.plist с именем намерения. создано в шаге 2.
  5. Сделано, чтобы класс IntentHandler реализовал протокол, сгенерированный для намерения, созданного в шаге 2.

Примеры кода и снимки экрана

Мой файл определения намерений SiriKit и намерение GetUnreadReleases:

enter image description here

Ответ намерения GetUnreadReleases:

enter image description here

Расширение содержания IntentHandler класс:

import Intents

class IntentHandler: INExtension, GetUnreadReleasesIntentHandling {

    func handle(intent: GetUnreadReleasesIntent, completion: @escaping (GetUnreadReleasesIntentResponse) -> Void) {
        let response = GetUnreadReleasesIntentResponse(code: .success, userActivity: nil)
        let release1 = IntentRelease(identifier: "1", display: "Teste 1")
        release1.name = "Name test 1"
        release1.artist = "Artist test 1"
        response.releases = [release1]
        completion(response)
    }

    func resolveMediaType(for intent: GetUnreadReleasesIntent, with completion: @escaping (IntentMediaTypeResolutionResult) -> Void) {
        if intent.mediaType == .unknown {
            completion(.needsValue())
        } else {
            completion(.success(with: intent.mediaType))
        }
    }

    override func handler(for intent: INIntent) -> Any {
        // This is the default implementation.  If you want different objects to handle different intents,
        // you can override this and return the handler you want for that particular intent.

        return self
    }

}

Расширение содержания Info.plist file :

enter image description here

Заключение

Итак, я хотел бы, чтобы это намерение работало в фоновом режиме, собрал список песен на основе пользовательских параметров и вернуть этот список для использования в качестве входных данных для других действий в приложении «Ярлыки».

Похоже, что в предыдущих версиях редактора Intents (Xcode <11 / iOS <13.0) был флажок «Поддерживает фоновое выполнение», который делал именно это, но я не могу найти это больше на Xcode 11. </p>

1 Ответ

0 голосов
/ 10 января 2020

Благодаря Эдфорду с Apple Developer Forums я смог заставить его работать. В файле определения намерений флажок «Намерение подходит для предложений Siri» должен быть установлен, чтобы фоновое выполнение работало.

...