App Intents are Limited to Thirty Seconds: Extend Execution as Live Activity with LongRunningIntent
Normally, App Intents have a 30-second limit to finish running โ LongRunningIntent helps developers get beyond that by moving to a Live Activity. Plus, CancellableIntent makes sure it can be ended gracefully.
Everything weโve covered so far makes your entities and parameters more expressive and efficient. Now, letโs talk about execution.
When your intent runs โ from Siri, Shortcuts, or any system surface โ it only has 30 seconds to finish. That works for most everyday actions, but not every intent is that quick.
Now that my app supports tagging and organizing photosโฆ
โฆI wanted to let people share their travel photos โ uploading them to a shared album without opening the app.
So I created an upload intent and added a button to my widget to trigger it.
But with large photos, the upload takes time โ and the intent kept failing because it couldnโt finish within the 30-second limit.
LongRunningIntent fixes this. It lets your intent run beyond the 30-second limit โ and manages the background task lifecycle of your app.
And as your intent runs, progress updates appear automatically as a Live Activity.
Now, letโs check out the code.
Hereโs the intent I wrote to upload my photos.
Iโm conforming to LongRunningIntent.
I take a photo file as input.
Then, I wrap my work in performBackgroundTask for extended execution.
LongRunnningIntent requires the intent to report progress, so the system knows itโs still working and hasnโt stalled. And because it builds on ProgressReportingIntent, I get a built-in progress object to track my work.
I calculate the number of chunks for the fileโฆ
โฆand set the total count.
Then, upload each chunkโฆ
โฆand update the progress as I go.
Hereโs what happens when my intent runs. It can run longer and thereโs a stop button right on the Live Activity, so the person can cancel it at anytime.
Though, itโd be great if my intent got a heads-up before being stopped.
CancellableIntent lets your intent clean up gracefully when cancelled โ whether the person tapped cancel, the system timed out, or needed to reclaim resources.
Hereโs how I can add cancellation support.
I add CancellableIntentโฆ
โฆand implement the onCancel handler. When cancellation reason happens, handler gives me the reasonโฆ
โฆand I can use it to clean up partial uploads or cancel in-flight requests.
LongRunningIntent also supports background GPU access on supported devices for tasks like photo processing or on-device inference. Just make sure to add GPU access to your appโs entitlement.
As tasks being handled by App Intents become more and more complex, LongRunningIntent will be helpful in making things run smoothly for developers and users. Plus, itโs especially helpful for agents to finish their responses โ like Codex for iOSโ release today.
App Intents: Grouping Parent Parameters Using a Unified Entity Approach
Streaks developer Quentin Zervaas shared this great technique for working with complex parent parameters in App Intents โ grouping them into a single, separate entity.
Blackbox: Rebooting an Inventive Puzzle Game for VisionOS ยป
Developer Ryan McLeod is featured on the Apple Developer blog to talk about bringing his app Blackbox to Apple Vision Pro and turn his game into a spatial computing experience.