'iOS - Intents eligible for in-app handling not work

I have an application with a deployment target on iOS 14 and built entirely with swiftui. I have added an intentdefinition file and added a couple of intents with their respective handlers, and I have added to my app delegate the function to handle them:

struct ...App: App {
 
 @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
...
}

extension AppDelegate {
 
 func application(_ application: UIApplication, handlerFor intent: INIntent) -> Any? {
     switch intent {
     case is NewTaskIntent:
         return NewTaskHandler()
     case is TodayTasksIntent:
         return TodayTasksHandler()
     default:
         return nil
     }
 }
}

The problem is that this function is never called and when I run the shortcut from its app it always launches my app. The info Plist contains the keys correctly:

<key>INIntentsSupported</key>
    <array>
        <string>NewTaskIntent</string>
        <string>TodayTasksIntent</string>
    </array>

Any idea what is happening?



Solution 1:[1]

If you are using SwiftUI, try onContinueUserActivity(_:perform:).

https://developer.apple.com/documentation/swiftui/view/oncontinueuseractivity(_:perform:)

Note: its first argument activityType is defined in your main app's Custom iOS Target Properties with NSUserActivityTypes key. This property seems to be generated by Xcode auto-ly.

Inspired by the "Step Six" in https://toolboxpro.app/blog/adding-shortcuts-to-an-app-part-four


However, it's quite wired that my func application(_ application: UIApplication, handlerFor intent: INIntent) -> Any? triggered yesterday, but makes no sense right now. Is it a 'feature' ?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 IMLeoZhao