Я пытаюсь создать собственный ярлык SiriKit на WatchOS. Я прочитал этот вопрос для проблемы iOS, но я считаю, что решение в watchOS другое.
Чтобы сделать это, я выполнил следующие действия:
- В цели расширения WatchKit я добавил возможность Siri;
- Я создал расширение Intents через: File> New> Target> watchOS> Расширение Intents;
- In the Intent Группа расширений, я создал файл определения намерения SiriKit. В этом файле я сделал некоторые пользовательские изменения и установил флажок «Намерение подходит для предложений Siri»;
- В группе «Расширение намерений» я также создал файл с именем HandWashIntentHandler.swift, который имеет следующий код:
class HandWashIntentHandler: NSObject, HandWashIntentHandling{
func handle(intent: HandWashIntent, completion: @escaping (HandWashIntentResponse) -> Void) {
let activity = NSUserActivity(activityType: "HandWashIntent")
let title = "Hand Wash"
activity.title = title
activity.suggestedInvocationPhrase = "Start hand wash"
activity.isEligibleForPrediction = true
activity.persistentIdentifier = title
let response = HandWashIntentResponse(code: .continueInApp,
userActivity: activity)
completion(response)
}
}
Затем в IntentHandler.swift я добавил следующий код:
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
guard intent is HandWashIntent else {
fatalError("Unhandled intent type: \(intent)")
}
return HandWashIntentHandler()
}
}
Наконец, в Info.plist внутри группы расширений Intent я добавил «HandWashIntent» в IntentsSupported. Точно так же в Info.plist внутри группы расширений WatchKit я добавил «HandWashIntent» в NSUserActivityTypes.
Итак, в общем, я хочу, чтобы голосовой ярлык «Начать руку ва sh "до конца. Этот ярлык откроет приложение и pu sh определенный c контроллер. Я прочитал в вопрос , что WKExtensionDelegate в watchOS «эквивалентен» AppDelegate в iOS. Затем я попытался манипулировать userActivity в ExtensionDelegate, но функции для этого не существует.
Затем я использовал функцию handle (_:) в ExtensionDelegate:
func handle(_ userActivity: NSUserActivity) {
if userActivity.activityType == "HandWashIntent"{
WKExtension.shared().rootInterfaceController?.pushController(withName: "Wash", context: nil)
}
}
но безуспешно. Итак, как мне проверить, запускается ли мое приложение с помощью ярлыка Siri на WatchOS?