Прошу прощения, если я отправляю сообщения неправильно, так как я немного новичок в публикации здесь. В настоящее время я пытаюсь добавить в свое приложение ярлык 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)
}
}
Я хотел бы обратиться к своим службам приложения, чтобы заполнить поля тренировки и веса в моей функции дескриптора, но я продолжаю получать сообщение об ошибке, в котором говорится, что мои классы обслуживания не существуют, и я надеялся, что кто-то сможет указать мне в правильном направлении. Спасибо!





Согласно документация:
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.