Не удается загрузить динамически предоставляемые значения параметров, и метод обработки не вызывается в намерениях в 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 — облегченный, чтобы быстро.

  1. Файл -> Создать -> Цель..

  1. Сделайте доступным намерение для расширения.

  1. Реализовать протокол

  2. Вернуть 3) реализованный класс в методе обработчика в расширении.

  3. Убедитесь, что ваше намерение включено в plist-файл расширения в разделеIntentsSupported. (иначе добавить)


B. Предоставьте обработчик в своем приложении - необходимо разбудить все ваше приложение (со всеми операторами импорта, чтобы оно работало медленно)

  1. Осуществлять<IntentName>IntentHandlingпротокол

  2. В приложении iOS или приложении, созданном с помощью Mac Catalyst, реализуйтеapplication(_:handlerFor:)на вашеUIApplicationDelegate.

Если вы используете SwiftUI, используйте UIApplicationDelegateAdaptor.

  1. Убедитесь, что ваше намерение включено в plist-файл приложения в разделеIntents eligible for in-app handling. (иначе добавить<Name Of The Intent>Intent)

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