Обработка намерений Sirikit

Прошу прощения, если я отправляю сообщения неправильно, так как я немного новичок в публикации здесь. В настоящее время я пытаюсь добавить в свое приложение ярлык siri. Я создал намерение, и я могу правильно его обработать и создать ответ с фиктивными данными.

Однако я не могу получить доступ к своим классам обслуживания и другим объектам из приложения, несмотря на добавление моего приложения в цель класса обработчика намерений.

class IntentHandler: INExtension, TestIntentHandling {
        @available(iOS 12.0, *)

    func confirm(intent: TestIntent, completion: @escaping (TestIntentResponse) -> Void) {
        print("HERE")
        completion(TestIntentResponse.init(code: .ready, userActivity: nil))
    }


    @available(iOS 12.0, *)
    func handle(intent: TestIntent, completion: @escaping (TestIntentResponse) -> Void) {
        let response = TestIntentResponse.init(code: .success, userActivity: nil)

        //Trying to reach into service here to get real values

        response.workout = "Bench Press"
        response.weight = 150
        completion(response)

    }

}

Я хотел бы обратиться к своим службам приложения, чтобы заполнить поля тренировки и веса в моей функции дескриптора, но я продолжаю получать сообщение об ошибке, в котором говорится, что мои классы обслуживания не существуют, и я надеялся, что кто-то сможет указать мне в правильном направлении. Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
666
2

Ответы 2

Согласно документация:

When a user makes a request of your app using Siri or Maps, SiriKit loads your Intents app extension and creates an instance of its INExtension subclass. The job of your extension object is to provide SiriKit with the handler objects that you use to handle specific intents. You provide these objects from the handler(for:) method of your extension object.

Вам нужно вызвать метод handler(for:) и вернуть соответствующий класс обработчика (это будет класс, который вы создаете). Ваш класс обработчика намерений, например TestIntentHandler, будет подклассом NSObject и соответствовать вашему протоколу TestIntentHandling. TestIntentHandler - это то место, где вы бы справились со своими намерениями.

Вам необходимо создать группу приложений и переместить любые классы и методы, которые необходимо использовать как в приложении, так и в намерении, в общую платформу для обоих. Для таких вещей, как небольшие биты данных, вы можете использовать общие UserDefaults, используя UserDefaults (suiteName: "your.app.group").

Из документов:

If your app and app extension share services, consider structuring your code in the following way:

• Implement your core services in a private shared framework. A private shared framework lets you place the code for accessing your services in one code module and use that code from multiple targets. Shared frameworks minimize the size of both executables and make testing easier by ensuring that each executable uses the same code path.

• Use a shared container to store common resources. Put relevant images and data files into a shared container so your app and app extension can use them. You enable shared container support in the Capabilities tab of each target.

Другие вопросы по теме

Выберите документы Google с помощью UIDocumentPickerViewController
Nil возвращается каждый раз, когда я пытаюсь получить доступ к текстовой метке UITableViewCell
Как мне продолжать вращать изображение до тех пор, пока сервер не получит быстрый ответ
JSONDecoder - декодирование строковых значений для правильных типов
Найдите трехмерные координаты точки на линии, спроецированной из другой точки в трехмерном пространстве
Ничего не происходит, когда я быстро устанавливаю значение дочернего элемента в базе данных Firebase
Ошибка LinkedIn sdk iOS, если вы уже вошли в приложение LinkedIn
Изменение управления памятью ARC на примере
Как обойти пользовательский интерфейс экрана приветствия и отобразить только экран пользовательского интерфейса аутентификации телефона в Firebase Auth?
Как предоставить только функцию обратного вызова или блок вместо создания объекта, соответствующего UIPickerViewDelegate?