Не удается загрузить динамически предоставляемые значения параметров, и метод обработки не вызывается в намерениях в iOS
я осознаюAn unknown error occurred.
когда я нажимаю на параметр, который динамически предоставляется в моем ярлыке в приложении Apples Shortcut. Иhandle(intent: TestIntent) async -> TestIntentResponse
не звонят.
Реализован протокол Handing, предоставленный и сгенерированный Xcode.
class SiriKitAppClosingIntentHandler: NSObject, LogAppClosingIntentHandling {
func provideAppOptionsCollection(for intent: LogAppClosingIntent, searchTerm: String?) async throws -> INObjectCollection<SiriKitIntentAppName> {
let appOptionsCollection = AppName.appOptionsCollection
if let searchTerm = searchTerm, !searchTerm.isEmpty {
return INObjectCollection(items: appOptionsCollection.filter({ $0.displayString.contains(searchTerm) }))
} else {
return INObjectCollection(items: appOptionsCollection)
}
}
func handle(intent: LogAppClosingIntent) async -> LogAppClosingIntentResponse {
print(" closing intent \(intent) \(#file) \(#line)")
return LogAppClosingIntentResponse(code: .success, userActivity: nil)
}
}
1 ответ
Основная причина в том, что не все правильно подключено. Вот краткое введение и контрольные списки.
SiriKit требуется обработчик, соответствующий соответствующему протоколу обработки намерений.
Каждый объект намерения имеет связанный протокол, основанный на имени намерения. Пример: (имя намерения: указано в определении намерения SiriKit). И этот протокол создается Xcode (если вы не можете его найти, вам нужно создать свое приложение после того, как вы добавите одно из своих намерений в файл определения намерения)
Протокол определяет методы, которые ваш обработчик реализует для разрешения любых параметров намерения и предоставления SiriKit информации о том, как ваше приложение обработало намерение.
Есть два способа сообщить Sirikit вашему обработчику, что вы соответствуете протоколу.
A. Предоставьте обработчик в расширении приложения Your Intents — облегченный, чтобы быстро.
- Файл -> Создать -> Цель..
- Сделайте доступным намерение для расширения.
Реализовать протокол
Вернуть 3) реализованный класс в методе обработчика в расширении.
Убедитесь, что ваше намерение включено в plist-файл расширения в разделе
IntentsSupported
. (иначе добавить)
B. Предоставьте обработчик в своем приложении - необходимо разбудить все ваше приложение (со всеми операторами импорта, чтобы оно работало медленно)
Осуществлять
<IntentName>IntentHandling
протоколВ приложении iOS или приложении, созданном с помощью Mac Catalyst, реализуйте
application(_:handlerFor:)
на вашеUIApplicationDelegate
.
Если вы используете SwiftUI, используйте UIApplicationDelegateAdaptor.
- Убедитесь, что ваше намерение включено в plist-файл приложения в разделе
Intents eligible for in-app handling
. (иначе добавить<Name Of The Intent>Intent
)