I want to use SiriKit to start a workout. Starting the workout requires opening the main app from the app extension.
The boilerplate that Apple provides for the INStartWorkoutIntentHandling
handler is
func handle(startWorkout startWorkoutIntent: INStartWorkoutIntent, completion: (INStartWorkoutIntentResponse) -> Void) {
let userActivity = NSUserActivity(activityType: NSStringFromClass(INStartWorkoutIntent))
let response = INStartWorkoutIntentResponse(code: .success, userActivity: userActivity)
completion(response)
}
How can I open my own app from here? Something like myapp://workout?action=start&name=pushups
This answer doesn't seem relevant, as I don't have a UIViewController
with a extensionContext
property for this extension type.
Last related bit: For the other actions (pause, end) I’d prefer to not open the main app, but to simply pause the workout which is running in the main app. I could use a similar custom URL to pause it, but that would open up the app which is an extra unnecessary step. Any good way to tell the main app to take a specific action from the INExtension without opening the app?
failureRequiringAppLaunch
response code, which almost implies that this is not a valid use-case from Apple's perspective. Seems unreasonable to require the app extension to re-implement the core use-case of my app (e.g. workouts involve more than just audio). I'd like to have users able to say "Siri, start a 10 minute upper body workout from MY-APP" using my custom vocabulary, and it would just start the workout in the app. – Liquesce