#AppIntent
Today’s learning has been both frustrating but rewarding. I delved deeper into AppIntent and its integration with Shortcuts, enabling Spotlight to recognise alternative phrasings of my AppIntent. The results are subtle yet quite effective! 👏
#swiftUI #iOS #beginner #code #keeplearning
February 9, 2025 at 4:41 PM
I had much fun 🤩 adding Spotlight search 🔍 using #CoreSpotlight to search and play back ▶️ content right within the app!
#BuildInPublic, #Swift, #SwiftUI, #AppIntent, #Navidrome, #iOS, #macOS
November 19, 2025 at 12:46 PM
So much have been added to AppIntent and AppEntity since I added them to the app. But as long as I'm still supporting iOS 15+, using all the new stuff would be a mess of `#`available, I'll do that later. 😅 #BuildInPublic #IndieDev
July 16, 2026 at 2:55 PM
Regarding AppIntents: If you add a `requestValueDialog` to your AppIntent Parameter, Siri will actually say what you type there. Otherwise she seems to just say "Which one?". At least for the case of picking from an AppEnum.
August 18, 2026 at 3:57 PM
Yes. I don't refresh arbitrarily, it's updated reactively from DB changes in the main app process.

For interactive widgets, use ForegroundContinuableIntent: stackoverflow.com/a/76673642/1...
How to add AppIntent to app target and use it in an interactive widget
How do you create an AppIntent that will run in your app's process and use it in your widget's Button? I created a new file, added it to my app's target, created my AppIntent struct, then added a b...
stackoverflow.com
April 25, 2025 at 2:04 PM
Very excited for this one - how to use the new onscreen Apple Intelligence features with Siri ✨

I'll cover AppIntent, AppEntity, NSUserActivity, the new assistant schemas and Transferable. More importantly, I'll show you how they all work together: superwall.com/blog/how-to-...
Superwall
Superwall - Paywalls made easy
superwall.com
December 3, 2024 at 9:11 PM
Today's task: Fix a few translations and localize all AppIntent-related strings to prepare for the launch of support for App Shortcuts.

#iOSDev
January 2, 2025 at 7:10 AM
Another awesome App Intents feature I discovered: @IntentParameterDependency! 🎉 Add it to an EntityQuery, targeting an AppIntent, and you can dynamically provide entities based on the intent. E.g., a GetSongsIntent lets you filter by band first, then by their release years.

#iOSDev
February 25, 2025 at 2:18 PM
In this video we are continuing on with the MyTallies app series were the focus is on Widget and App Intents and in this video, we’ll be creating our 1st Widget with an interactive AppIntent so that we can update our first tally by tapping on the widget.
youtu.be/hycExiDHjIo
MyTallies Widgets AppIntents Siri Shortcuts Part 2 SimpleWidget with Interactive Intent
YouTube video by Stewart Lynch
youtu.be
November 17, 2024 at 2:42 PM
I’ve been working on and off on the widget for a good while now. At the moment, it’s just a static list. I will look into AppIntent soon so I can start incorporating some interaction into the widget. 🔥
#swiftUI #iOS #beginner #code #keeplearning
February 2, 2025 at 5:22 PM
TIL: Your App Shortcut might not work as expected if all parameters aren’t included in the AppIntent parameterSummary. My AppEnum parameter was requested, but my Double parameter wasn’t—neither were in the summary. Adding both fixed the issue.

#iOSDev
February 14, 2025 at 12:12 PM
It’s very cool to see Matthew working directly with dev’s - and a smart move on your part to work with a leader in this part of the industry on such an AppIntent-focused update 😀
March 19, 2025 at 3:59 PM
Noooo! Tried using a Swift macro to generate an App Intent and Xcode fails to compile because it can't find its own generated file (I think?). Tested in Xcode 26b3 and 16.4. I really needed this to work for my new project 😢 (FB18843876)

Example project: github.com/simonbs/App...
July 14, 2025 at 8:03 PM
Ok, so I'm migrating the Update Widgets intent to #AppIntent. Here are some questions:
1. Is it still the best practice to reload all timelines?
2. Are there any ways to avoid being rate limited?
3. Has anyone mapped how that limit works?

#Swift #iOS
January 29, 2025 at 1:59 PM
- AppIntent should integrate with Siri in the same way modern LLM's have 'tools' defined

I think that's it. That's not too much to ask, is it?
June 9, 2025 at 2:32 PM
🎁 𝘖𝘱𝘦𝘯 𝘐𝘯𝘵𝘦𝘯𝘵 𝘪𝘯 𝘪𝘖𝘚 26 by @jordanmorgan10.bsky.social

With 𝑖𝑂𝑆 26 comes the enhanced 𝑂𝑝𝘦𝘯𝐼𝑛𝑡𝑒𝑛𝑡 API. This concise guide shows how to properly implement 𝑂𝑝𝘦𝘯𝐼𝑛𝑡𝑒𝑛𝑡 instead of custom 𝐴𝑝𝑝𝐼𝑛𝑡𝑒𝑛𝑡 types, demonstrating the new 𝑇𝑎𝘳𝘨𝘦𝑡𝐶𝑜𝑛𝑡𝘦𝑛𝑡𝑃𝑟𝑜𝑣𝘪𝑑𝘪𝑛𝑔𝐼𝑛𝑡𝑒𝑛𝑡 conformance and 𝑜𝑛𝐴𝑝𝑝𝐼𝑛𝑡𝑒𝑛𝑡𝐸𝑥𝑒𝑐𝑢𝑡𝑖𝑜𝑛 modifier.
Open Intent in iOS 26
Open Intents are easy peezy in iOS 26. A few API tweaks makes them quick to implement.
www.swiftjectivec.com
September 10, 2025 at 1:03 PM
Making Widgets Interactive using App Intents

This article explains how to make iOS widgets interactive using the App Intents framework.

tiagohenriques.vercel.app/blog/interac...

by Tiago Henriques
#ios #iosdevelopment #swift #swiftui #swiftlang #Widget #AppIntent
tiagohenriques.vercel.app
April 10, 2025 at 4:48 AM
Adding some new AppIntent support to Brainstorm/AI, and getting a bunch of Swift 6 Concurrency errors, especially around the `properties` and `sortingOptions` fields on EntityPropertyQuery.

Is `@preconcurrency import AppIntents` the only way forward here for now, or is there a better way?
May 2, 2025 at 7:42 PM
Another interesting AppIntent quirk: Why do your non-optional parameters require manual requesting in the perform method when used as AppShortcuts but not as actions? Because implementing defaultResult in your entity queries supplies a default and suppresses prompts.

#iOSDev
June 18, 2025 at 8:50 AM
one interesting side effect of #AppIntent `supportedModes`, when set to `foreground`: it also opens a window of the default scene in a multi-window environment. Fixed by using foreground(dynamic), which allowed me to foreground the app with openURL using the appropriate scene for the url. #iosdev
December 4, 2025 at 8:39 PM
Hastings is what Siri would’ve been if it worked by simply picking the right AppIntent or like what Apple promised with AppleIntelligence.

It uses the person’s context, and natural language input to pick the right action, and then shows a snippet for it.
June 6, 2025 at 6:48 PM
Going with a simpler, read-only view to avoid the AppIntent issue - being able to see what specific bills are due, without exposing that info on the top-level notification is a nice value add!

(plus, this is something I've personally wanted since the beginning!)
March 20, 2025 at 6:20 PM
Today I’ll be giving the AppIntent framework and shortcut automations another look for a side project I’m working on. I’m trying to build an Intent that conditionally opens the app, which seems possible with SiriKit but I haven’t yet found a way to achieve it with AppIntents. #iosdev
January 9, 2025 at 5:53 PM
Hot take: Foundation Models custom tools should be AppIntents 🤔

Or we should at least be able to create a tool from an AppIntent or provide app intents to the LLM session.

It’d be like using Siri or the Shortcuts app from within the app, in a prompt-based conversational way.
June 21, 2025 at 8:19 AM
App Intents: One Java Declaration for Siri, Spotlight, and Shortcuts
`@AppIntent` can expose a public static Java method to Siri, Spotlight, and Shortcuts. The same declaration can also drive an Android launcher shortcut or an internal application command. **What is Codename One?** Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at codenameone.com. PR #5559 adds `com.codename1.intents` and the build-time annotations behind that integration. The build generates only the native declarations each target supports. For encrypted SQLite and the rest of this week's work, see the weekly release overview. ## A handler is a public static method An app intent can run in a process the system started only to answer it. There may be no application object and no visible form. private static final Object WORKOUT_TOTAL_LOCK = new Object(); @AppIntent(value = "log_workout", title = "Log a workout", description = "Records a completed workout", phrases = {"Log a workout in ${applicationName}"}, headless = true, timeoutSeconds = 5) public static IntentResult logWorkout( @IntentParam(value = "kind", title = "What kind of workout?", options = {"run", "ride", "swim"}) String kind, @IntentParam(value = "minutes", title = "How many minutes?") int minutes) { int total; synchronized (WORKOUT_TOTAL_LOCK) { total = Preferences.get("totalMinutes", 0) + minutes; Preferences.set("totalMinutes", total); } return IntentResult.value(String.valueOf(total)) .withDialog("Logged " + minutes + " minutes."); } The method is static because the build generates a direct call. Runtime annotation lookup is unavailable in translated iOS code, and dead-code elimination removes methods with no Java caller. A reflection-based dispatcher could compile successfully and disappear from the shipped application. Intent handlers can run concurrently, so the preference update protects its read-modify-write sequence. The Maven plugin validates declarations and generates native metadata during the build. A malformed phrase, missing entity query, or invalid route fails the build instead of producing a shortcut that silently vanishes. ## Intents and routes answer different questions A route maps a URL to a screen. An intent accepts typed parameters, can ask the user to choose an entity, and returns a result. A route has no return channel. They meet when the intent should open a screen. `opensRoute` passes bound parameters through the existing route table: @AppIntent(value = "show_workout", title = "Show a workout", phrases = {"Show my ${workout} in ${applicationName}"}, opensRoute = "/workouts/{workout}") public static IntentResult showWorkout( @IntentParam(value = "workout", title = "Which workout?") Workout workout) { return IntentResult.ok(); } @Route("/workouts/:id") public static Form workoutForm(@RouteParam("id") String id) { return buildWorkoutForm(id); } The `{workout}` placeholder expands to the selected entity's stable ID before the router matches `/workouts/:id`. The screen keeps one address. A deep link and a system intent reach it through the same router. ## Entities let the platform ask which object you meant An entity parameter represents an application noun such as a workout, playlist, or invoice. The platform can search those entities and ask the user to choose before the handler runs. @IntentEntity(value = "workout", title = "Workout", indexed = true) public static class Workout { @EntityId public String getId() { return id; } @EntityTitle public String getName() { return name; } @EntityQuery(EntityQuery.Kind.BY_ID) public static Workout byId(String id) { return WorkoutStore.find(id); } @EntityQuery(EntityQuery.Kind.SEARCH) public static List<Workout> matching(String query) { return WorkoutStore.search(query); } } The `BY_ID` query is required because an entity crosses the native boundary as its identifier. The identifier must survive releases and data reordering. A list position or content hash can later resolve to the wrong object without producing an error. `Intents.index(...)` publishes entities to device search. Remove them when the underlying content disappears, or stale results remain visible after the application data is gone. ## Headless means no window A headless handler can use `Storage`, `Preferences`, `Database`, networking, logging, surfaces publishing, and indexing. It cannot use `Form`, `Dialog`, the camera, capture, or anything else that needs a window. Platform-dispatched handlers do not run on the event dispatch thread. A foreground handler that needs to update the UI must use `Display.callSerially(...)`. `Intents.invoke(...)` is synchronous and runs on the calling thread, which makes it useful as an internal command layer but also means a long handler can freeze the UI if invoked from the event thread. Each invocation has a deadline. Cancellation is cooperative through `IntentContext.isCancelled()`. Commit durable changes as the work proceeds because a result returned after the platform deadline can be discarded. ## Android shortcuts are not Siri Android has no equivalent to Siri's typed invocation contract and spoken result channel. The API does not label launcher shortcuts as voice parity. Capability | iOS | Android ---|---|--- Declared intent | App Intent and App Shortcut | Launcher shortcut Voice phrases | Siri | Not available Entity disambiguation | System picker | Application picker Device search | Core Spotlight | Long-lived launcher shortcuts Donation | Learned suggestions | Dynamic shortcuts Headless execution | Background application launch | Service without an activity Branch on `Intents.isVoiceInvocationSupported()` before telling a user to speak to the application. `areIntentsSupported()` answers a broader question. `Intents.invoke(...)` works on every port because it calls the generated Java dispatcher. A desktop or web application can use the same intent as an internal command even when the operating system provides no external intent surface. Widget actions use the separate surfaces API. A tap arrives through `Surfaces.setActionHandler(...)`; that handler can call `Intents.invoke(...)` when a widget should reuse an intent. Declaring `@AppIntent` alone does not generate a widget action. ## System integrations stay out when unused An application that never references `com.codename1.intents` gets no native intent plumbing, shortcut resources, frameworks, manifest entries, or deployment-target change. Spotlight indexing and donation use older Objective-C APIs and do not raise the iOS deployment target. Declaring an `@AppIntent` generates the newer Swift declarations. `ios.intents.appIntents=false` keeps indexing and donation while suppressing those declarations. `ios.intents.minDeploymentTarget` lets the project choose whether an intent contributes a floor. The simulator's **Simulate > App Intents** window lists the generated declarations, builds parameter forms, fills entity pickers from the real query methods, and invokes the same dispatch table used by the native ports. A workout handler remains one piece of Java application logic. Siri can invoke it by voice, Spotlight can find its entities, Android can publish it as a shortcut, and the application can call it directly through `Intents.invoke()`. Each platform integration remains native to that platform. Return to the parent post for the database, watch, web, smart-home, camera, and security work that shipped with it.
dev.to
September 3, 2026 at 5:14 PM