app_intents_codegen
Code generator for Flutter AppIntents. Produces Swift and Dart code from @IntentSpec and @EntitySpec annotations.
0.15.0
359 downloads/mo
#942 most downloaded on pub.dev
touyou/flutter_intents
What this package is like to depend on
Last release 3 days ago
21 Aug 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 30 of 30 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
30 releases · first in 2026
30 releases in the last 12 months
see the full history below
Release timeline
30 releases · Jan 2026 to Aug 2026Releases
latest 30-
0.15.021 Aug 2026Release notes
Open source →Two follow-ups to the
AppIntentsBridgedistribution work in v0.14.0. If you added the Swift package by path in 0.14.0, see Migration below.app_intents
Fix:
import AppIntentsBridgedid not resolve on the CocoaPods route (#105)app_intents_bridge.podspechad nos.module_name, so CocoaPods derived the module name froms.nameand emittedframework module app_intents_bridge. Everygenerate_widget_swiftoutput opens withimport AppIntentsBridge, so the generated code could not be built as generated by a CocoaPods consumer.The failure was easy to misread: the import line itself often reported nothing, and only the types surfaced, as
Cannot find 'AppIntentsEntityCache' in scope.Fixed by declaring
s.module_name = 'AppIntentsBridge'. All three routes now take the same import line. Verified against the generated modulemap, which now readsframework module AppIntentsBridge.AppIntentsBridgeis now a product of the plugin's own Swift packagev0.14.0 recommended adding the bridge from
ios/.symlinks/plugins/…, but.symlinksis created only byflutter_install_all_ios_podswhile CocoaPods evaluates a Podfile. An app that had migrated to Swift Package Manager and runpod deintegrate— which the Flutter tool itself suggests once every plugin is a Swift Package — had no version-following local path at all, and was left with.package(url:), the one route that is not pinned to the pub version.AppIntentsBridgeis now a second product of the plugin's own Swift package, so the recommended route is:File → Add Package Dependencies… → Add Local… →
ios/Flutter/ephemeral/Packages/.packages/app_intents→ add theAppIntentsBridgelibraryFlutter's Swift Package Manager integration generates that symlink, so the path needs no Podfile and survives
app_intentsupgrades. Add onlyAppIntentsBridgeto an extension target — the siblingapp-intentslibrary links Flutter.It has to be that package rather than a sibling directory: Xcode normalizes local-package paths lexically, so
…/.packages/app_intents/../AppIntentsBridgecollapses to.packages/AppIntentsBridgeand fails to resolve.Route Needs a Podfile? Follows the pub version? Local Swift package (recommended) no yes CocoaPods app_intents_bridgepodyes yes Remote .package(url:)no no — pin the vX.Y.ZtagThe CocoaPods pod and the root-manifest
.package(url:)route are otherwise unchanged.app_intents.podspecstill globsapp_intents/Sources/app_intents/**only, so the two pods carry no duplicate symbols.Migration
If you added the Swift package by path in 0.14.0 (
ios/.symlinks/plugins/app_intents/ios/AppIntentsBridge), re-point it atios/Flutter/ephemeral/Packages/.packages/app_intentsand select theAppIntentsBridgelibrary.CocoaPods and
.package(url:)users need no change beyond the version bump — though CocoaPods users can now drop anyimport app_intents_bridgeworkaround.app_intents_codegen / app_intents_annotations
No code changes; released in lockstep.
Also in this release
The example app gained a real
TaskWidgetapp-extension target.app/ios/TaskWidgetwas previously a bare directory of generated Swift verified only byswiftc -typecheck; it now compiles in a genuine extension target, links theAppIntentsBridgeproduct over the path above, and carries its own App Groups entitlement — so the downstream integration story is exercised on every example-app build.Note for contributors:
swift testin the bridge directory is gone. The plugin's package is iOS-only because it links Flutter, so the Swift tests run viaxcodebuild test -scheme AppIntentsBridgeon a simulator, which is what CI already did.Full Changelog: v0.14.0...v0.15.0
Release notes
Open source →- No codegen changes. The
import AppIntentsBridgeline thatgenerate_widget_swiftemits now resolves on the CocoaPods route too (#105), and the module ships as a product of the plugin's Swift package (#102 follow-up) — see theapp_intentschangelog anddocs/usage.md→ "Consuming AppIntentsBridge". - Bumps
app_intents_annotationsdependency to^0.15.0.
- No codegen changes. The
-
0.14.021 Aug 2026Release notes
Open source →app_intents
-
Fix:
AppIntentsBridgecould not be reached from a downstream app (#102). The Swift package now ships inside the pub package atios/AppIntentsBridge/, soimport AppIntentsBridge— which thegenerate_widget_swiftoutput requires — resolves without a separately versioned dependency. Three consumption routes, all building the same sources:Route How Local Swift package (recommended, projects with a Podfile) File → Add Package Dependencies… → Add Local… → ios/.symlinks/plugins/app_intents/ios/AppIntentsBridgeCocoaPods pod 'app_intents_bridge', :path => '.symlinks/plugins/app_intents/ios'Remote Swift package (required for Podfile-less SPM projects) https://github.com/touyou/flutter_intents→AppIntentsBridgeA new standalone
app_intents_bridgepodspec carries no Flutter dependency, so an App Extension target — which must not link Flutter and therefore sits outsideflutter_install_all_ios_pods— can take it.app_intents.podspecdeliberately does not include these sources, so a target may take both pods without duplicate symbols. The repository rootPackage.swiftkeeps the sameAppIntentsBridgeproduct, so existing.package(url:)consumers are unaffected.Previously the package lived only in the repository's
ios-spm/subdirectory, which neither pub nor CocoaPods shipped and which SPM cannot resolve over a Git URL — a Widget Extension target failed withNo such module 'AppIntentsBridge'. -
Docs:
AppIntentsEntityCacheKey.forEntitynow states that its result is the cache key, not the rawUserDefaultskey. The plugin namespaces it asapp_intents.<storageIdentifier>.cache.<cacheKey>; reading with the un-namespaced key returnsnilsilently, which only surfaces as an empty widget configuration picker. Same note added todocs/usage.md/docs/usage.ja.md.
app_intents_codegen
- Widens the
analyzerconstraint to>=7.0.0 <15.0.0, so the package can be used alongsideanalyzer14.x. Verified againstanalyzer14.1.0 /_fe_analyzer_shared105.0.0: analysis clean, full test suite passing, andbuild_runner,generate_swift,generate_widget_swiftandgenerate_kotlinall producing byte-identical output to the 13.x resolution. - Bumps
app_intents_annotationsto^0.14.0.
app_intents_annotations
- No user-facing changes; released in lockstep.
Also in this release
- Example app: removed three stale, never-compiled copies of
AppIntentsBridgesources (#104). - Toolchain: AGP 9.2.1 → 9.3.1, Gradle wrapper 9.6.1 → 9.7.0,
build4.0.8,build_test3.5.17,dart_style3.1.12. RELEASING.mdnow lists the two podspecs, the three per-package READMEs, and the^X.Y.Zpins indocs/— all of which the checklist had been omitting.
Full Changelog: v0.13.0...v0.14.0
Release notes
Open source →- Widens the
analyzerconstraint to>=7.0.0 <15.0.0, so this package can be used alongsideanalyzer14.x. Verified againstanalyzer14.1.0 /_fe_analyzer_shared105.0.0: analysis is clean, the full test suite passes, andbuild_runner,generate_swift,generate_widget_swiftandgenerate_kotlinall produce byte-identical output to the 13.x resolution. - Bumps
app_intents_annotationsdependency to^0.14.0. - Docs: the Swift emitted by
generate_widget_swiftopens withimport AppIntentsBridge; that package now ships inside theapp_intentspub package, so a Widget Extension target can resolve it. Seedocs/usage.md→ "Consuming AppIntentsBridge" (#102).
-
-
0.13.021 Aug 2026Release notes
Open source →- feat: App Extension entity access + WidgetConfigurationIntent codegen (#97/#98, #99)
- fix(codegen): normalize entity id property to
idfor AppEntity conformance (#100)
Also fixes version references that were missed in the 0.12.0 release:
the iOS podspec (left at 0.11.0) and the^0.11.0dependency snippets in
docs/ and the per-package READMEs.Co-Authored-By: Claude Opus 5 [email protected]
Release notes
Open source →- Fix: entity
@EntityIdfields not namedidgenerated Swift that does not compile.AppEntityrefinesIdentifiable, which requires a stored property literally namedid;SwiftGeneratoremitted the Dart field name verbatim, so@EntityIdon e.g.teamIdproducedtype 'X' does not conform to protocol 'AppEntity'/'Identifiable'(and a confusing'ObjectIdentifier' does not conform to 'EntityIdentifierConvertible'). The Swift identifier property is now always emitted asid, while the Dart field name survives as the cache/dictionary key (dict["teamId"]) — matching what the Dart cache projection writes, and matching the rest of the generator, which already read<entity>.idunconditionally when serializing entity-typed intent parameters. Entities whose field is already namedidgenerate byte-identical output. The unnormalizable case (@EntityIdon a non-idfield plus a separate field namedid) now throwsInvalidGenerationSourceErrorinstead of emitting twovar iddeclarations. @WidgetConfigurationSpeccodegen + thegenerate_widget_swiftCLI — emits aWidgetConfigurationIntentplus a cache-backedEntityQueryfor a Widget Extension target, which reads the App Group entity cache instead of going throughFlutterBridge(#98).WidgetSwiftGeneratorapplies the sameidnormalization described above.- Bumps
app_intents_annotationsdependency to^0.13.0.
-
0.12.020 Jun 2026Release notes
Open source →Follow-up release after
v0.11.0reflecting the matsudate WWDC 2026 review #4 survey: three additive, opt-in items (#55 intent donation, #52IntentParameter.ValueState, and thesystem.searchInAppschema rename) plus the deferred-items punch list inCLAUDE.md. All three packages are released together at the same version.app_intents 0.12.0
- New API
AppIntents().donateIntent(identifier, params)(#55): wrapsAppIntent.donate()(stable iOS 16+) so the Dart side can record an executed intent for Siri / Apple Intelligence to learn from. The call is forwarded throughAppIntentsPlugin.intentDonationForwarder(set in AppDelegate, mirroringrelevantEntitiesDonationForwarder) toFlutterBridge.shared.donateIntent, which invokes the per-intent reverse-executor emitted by@IntentSpec(donatable: true)codegen. iOS-only; a no-op on other platforms. - iOS native:
AppIntentsPlugin.intentDonationForwarderstatic hook for AppDelegate wiring. ThedonateIntentMethodChannel case returnsDONATION_NOT_CONFIGUREDwhen the forwarder is not set.FlutterBridge.shared.registerIntentDonator(intentIdentifier:_:)/donateIntent(intentIdentifier:params:)/hasIntentDonator(for:); the donators dictionary is cleared byclearExecutors()alongside the other executor slots.
- Docs (
docs/usage.md): adds theintentDonationForwarderwiring example next to the existingrelevantEntitiesDonationForwarderblock, plus the matchingregister<Intent>Donator()call site.
app_intents_annotations 0.12.0
@IntentSpec(donatable: true)— opt-in forAppIntent.donate()so Siri / Apple Intelligence learns the user performed the action in-app (#55). Inert unless thedonationexperimental feature is enabled inapp_intents_codegen. MVP restricts to primitive parameter types (String/int/double/bool/DateTime, optionals allowed); entity / file / enum / union / collection params are rejected at codegen time.@IntentParam(useValueState: true)— opt-in forIntentParameter.ValueState(@available(iOS 18.2, *)stable — no#ifgating required). Distinguishesunset/set/clearedfor an optional update parameter so the Dart handler can tell "don't touch" from "explicitly cleared." Only valid on a nullable Dart type; analyzer rejects use on non-optional params.AppSchemas.system.searchInApp— typed accessor for the iOS 27 system search-in-app schema (iOS 17 used.system.search; iOS 27 renamed it). The iOS-17 identifier remains reachable viaAppSchemas.of(AppSchemaDomain.system, 'search'). Also addsAppSchemas.system.open.
app_intents_codegen 0.12.0
@IntentSpec(donatable: true)(#55, requires--experimental=donation): emits a#if APP_INTENTS_WWDC26-gatedregister<Intent>Donator()reverse-executor that reconstructs the concrete intent from a[String: Any]params dict and callsintent.donate()(stable iOS 16+). Analyzer enforces the MVP primitive-only contract; rejectsentityType/enumType/fileType/entityCollectionType/@UnionValue/ non-primitive Dart types at codegen time.@IntentParam(useValueState: true)(#52): emitsif #available(iOS 18.2, *) { switch $field.valueState { … @unknown default … } }inperform()and adds a sibling"<field>State": "unset" | "cleared" | "set"entry to the wire dict. The state key is added viaif letin both FlutterBridge and cache-mode emit paths, so it is absent on iOS < 18.2 and the Dart handler can distinguish "no state info" from a present state. Analyzer rejects opt-in on non-optional Dart params. The Swift output uses@unknown defaultto future-proof against Swift 6's non-frozen enum errors. No experimental flag — this is a normal feature (the SDK symbol is stable iOS 18.2).AppSchemas.system.searchInApp— codegen consumes the schema string verbatim through the existing@AppIntent(schema:)/@AppEntity(schema:)macro emission (theapp-schemaexperimental gate is unchanged); no codegen change beyond the typed accessor that lives inapp_intents_annotations.- Bumps
app_intents_annotationsdependency to^0.12.0.
Repo meta
CLAUDE.mdadds a new Deferred WWDC26 punch list section reserving ADR numbers 0005–0010 for the seven defer-with-ADR items uncovered by the matsudate review #4 audit (snippetView, dialogFullSupporting, requestValue, PlaceDescriptor export, LongRunningIntent progress/cancel forwarding, SyncableEntityIdentifier dual-id, @AppIntentsPackage). One document-only item (notificationEntity) is also tracked.Verification
- All three Dart unit-test suites green (annotations, codegen, plugin), Swift
AppIntentsBridgesuite green (26 tests,.serializedtrait fixed the shared-singleton race when adding the new intent-donator tests). swiftc -typecheckof theuseValueStateemit pattern against the Xcode 27 beta iOS 27 SDK (target iOS 17.0): exit 0, no warnings.- The example app's regenerated Swift is byte-identical to the previous commit — the opt-in design means existing intents that don't opt in are completely unaffected.
Release notes
Open source →@IntentSpec(donatable: true)(#55, requires--experimental=donation): emits a#if APP_INTENTS_WWDC26-gatedregister<Intent>Donator()reverse-executor that reconstructs the concrete intent from a[String: Any]params dict and callsintent.donate()(stable iOS 16+). Analyzer enforces the MVP primitive-only contract; rejectsentityType/enumType/fileType/entityCollectionType/@UnionValue/ non-primitive Dart types at codegen time.@IntentParam(useValueState: true)(#52): emitsif #available(iOS 18.2, *) { switch $field.valueState { … @unknown default … } }inperform()and adds a sibling"<field>State": "unset" | "cleared" | "set"entry to the wire dict. The state key is added viaif letin both FlutterBridge and cache-mode emit paths, so it is absent on iOS < 18.2 and the Dart handler can distinguish "no state info" from a present state. Analyzer rejects opt-in on non-optional Dart params. The Swift output uses@unknown defaultto future-proof against Swift 6's non-frozen enum errors. No experimental flag — this is a normal feature (the SDK symbol is stable iOS 18.2).AppSchemas.system.searchInApp— codegen consumes the schema string verbatim through the existing@AppIntent(schema:)/@AppEntity(schema:)macro emission (theapp-schemaexperimental gate is unchanged); no codegen change beyond the typed accessor that lives inapp_intents_annotations.- Bumps
app_intents_annotationsdependency to^0.12.0.
- New API
-
0.11.009 Jun 2026Release notes
Open source →First release since v0.10.1 to ship the accumulated WWDC26 App Intents work (opt-in, default OFF), plus a documentation audit pass. All three packages are released together at the same version.
app_intents 0.11.0
- WWDC26 experimental bridges (opt-in; exercised only when experimental Swift generation is enabled):
- IntentValueQuery (#51):
registerValueQueryHandler+ platformqueryValuesAsync(generic inbound value query; the visualSemanticContentDescriptorvariant is out of scope) - Donations & discovery (#55):
donateRelevantEntities(id, entities, context:)via a reverse executor, wired throughAppIntentsPlugin.relevantEntitiesDonationForwarder - Onscreen-awareness scaffold (#56):
setOnscreenEntity(typeId, instanceId, title:)/clearOnscreenEntity()backed byNSUserActivity, plusAppIntentsPlugin.onscreenEntityBinder - Extended the platform interface, method channel, and iOS
AppIntentsPlugin.swiftaccordingly
- IntentValueQuery (#51):
- Docs: fix the Android setup README (
compileSdk/targetSdk37,minSdk36 — the previous "36" would fail theappfunctions:1.0.0-alpha09AAR-metadata check) and replace the placeholder example app READMEs with real content
app_intents_annotations 0.11.0
- WWDC26 App Intents annotation surfaces (opt-in; inert unless experimental code generation is enabled in
app_intents_codegen):- Intent execution control (#52):
@IntentSpec(longRunning:, cancellable:, executionTargets:)+ theIntentExecutionTargetenum - App Schema (#49):
schema:on@EntitySpec/@IntentSpec/@EnumSpec, plus theAppSchemascatalog (messages/mail/photos) - Semantic indexing (#50):
@EntityProperty(title:, indexingKey:) - Entity ownership (#55):
@EntitySpec(ownership:)+EntityOwnershipState - Rich parameter types (#53):
Durationparameters, the newPersonNamevalue type,@IntentParam(entityCollectionType:), and@UnionValueSpec/@UnionCase(which codegen lowers to a native@UnionValueenum) - Cross-app export (#54):
@EntitySpec(exportAs:)+EntityExportType - IntentValueQuery (#51) and donations/discovery (#55):
@EntitySpec(valueQuery:, syncable:, relevantEntities:)
- Intent execution control (#52):
app_intents_codegen 0.11.0
- WWDC26 experimental code generation (opt-in, default OFF). Master switch
--experimental-wwdc26+ per-feature--experimental=<flag>(app-schema,ownership,long-running,rich-types,value-query,value-representation,donation). Experimental Swift is emitted inside#if APP_INTENTS_WWDC26with a mandatory stable#elsefallback, so released-SDK builds (without the flag) still compile.- Intent execution control (#52):
LongRunningIntent/CancellableIntent/ execution targets - App Schema (#49) + semantic indexing (#50):
@AppEntity/@AppIntent/@AppEnum(schema:)and@Property(indexingKey:)(indexing ships as a normal iOS 18.4 feature) - Entity ownership (#55): additive
OwnershipProvidingEntityconformance - Rich parameter types (#53): native
Duration/PersonNameComponents/EntityCollection/@UnionValueparameters with compile-everywhere fallbacks, plus a generated unionfromMapfactory - IntentValueQuery (#51), cross-app export (#54,
IntentPerson), andSyncableEntity/RelevantEntitiesdonation (#55) - Dual-branch output verified via
swiftc -typecheck(with and withoutAPP_INTENTS_WWDC26) against the Xcode 27 beta SDK; seescripts/verify_experimental_swift.sh
- Intent execution control (#52):
- AppIntentsTesting scaffold for the example app (#57, compile-checked, inert on stable Xcode)
- Docs: correct the
@EnumSpec/@EnumCaseDisplayexamples, the Dart SDK constraint (^3.10.0) and dependency ranges, the Android toolchain versions, and add theownershipexperimental flag to the feature tables
Published to pub.dev:
- https://pub.dev/packages/app_intents/versions/0.11.0
- https://pub.dev/packages/app_intents_annotations/versions/0.11.0
- https://pub.dev/packages/app_intents_codegen/versions/0.11.0
Full Changelog: v0.10.1...v0.11.0
Release notes
Open source →- WWDC26 experimental code generation (opt-in, default OFF). Master switch
--experimental-wwdc26+ per-feature--experimental=<flag>(app-schema,ownership,long-running,rich-types,value-query,value-representation,donation). Experimental Swift is emitted inside#if APP_INTENTS_WWDC26with a mandatory stable#elsefallback, so released-SDK builds (without the flag) still compile.- Intent execution control (#52):
LongRunningIntent/CancellableIntent/ execution targets. - App Schema (#49) + semantic indexing (#50):
@AppEntity/@AppIntent/@AppEnum(schema:)and@Property(indexingKey:)(indexing ships as a normal iOS 18.4 feature). - Entity ownership (#55): additive
OwnershipProvidingEntityconformance. - Rich parameter types (#53): native
Duration/PersonNameComponents/EntityCollection/@UnionValueparameters with compile-everywhere fallbacks, plus a generated unionfromMapfactory. - IntentValueQuery (#51), cross-app export (#54,
IntentPerson), andSyncableEntity/RelevantEntitiesdonation (#55). - Dual-branch output verified via
swiftc -typecheck(with and withoutAPP_INTENTS_WWDC26) against the Xcode 27 beta SDK; seescripts/verify_experimental_swift.sh.
- Intent execution control (#52):
- AppIntentsTesting scaffold for the example app (#57, compile-checked, inert on stable Xcode).
- Docs: correct the
@EnumSpec/@EnumCaseDisplayexamples, the Dart SDK constraint (^3.10.0) and dependency ranges, the Android toolchain versions, and add theownershipexperimental flag to the feature tables.
- WWDC26 experimental bridges (opt-in; exercised only when experimental Swift generation is enabled):
-
0.10.105 Jun 2026Release notes
Open source →app_intents 0.10.1
- Fix Android build on Kotlin 2.3+ / AGP 9.1.0+: migrate the plugin's
android/build.gradle.ktsfrom the deprecatedkotlinOptionsDSL to the moderncompilerOptionsDSL (#20, thanks @cpbritton)- The
kotlinOptionsblock now causes "Script compilation errors" with recent Kotlin Gradle Plugin / AGP toolchains;compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }is the supported replacement
- The
- Maintenance: dependency bumps and OSS infrastructure hardening (CI, issue/PR templates, Dependabot)
app_intents_annotations 0.10.1 / app_intents_codegen 0.10.1
- No API changes; version-aligned with
app_intents0.10.1 - codegen: dependency maintenance (
analyzer,source_gen,build,build_test,dart_style,test)
Published to pub.dev:
- https://pub.dev/packages/app_intents/versions/0.10.1
- https://pub.dev/packages/app_intents_annotations/versions/0.10.1
- https://pub.dev/packages/app_intents_codegen/versions/0.10.1
Full Changelog: v0.10.0...v0.10.1
Release notes
Open source →- No codegen changes; version bump aligns with
app_intents0.10.1 (AndroidcompilerOptionsDSL fix for Kotlin 2.3+ / AGP 9.1.0+, #20) - Maintenance: dependency bumps (
analyzer,source_gen,build,build_test,dart_style,test)
- Fix Android build on Kotlin 2.3+ / AGP 9.1.0+: migrate the plugin's
-
0.10.027 May 2026Release notes
Open source →app_intents 0.10.0
- Add Swift Package Manager (SPM) support for the iOS plugin (#29, #30)
- New manifest at
ios/app_intents/Package.swift; native sources moved toios/app_intents/Sources/app_intents/(SPM-standard layout) app_intents.podspecnow pointssource_files/resource_bundlesat the sharedSources/location, so CocoaPods and SPM build the same files (both remain supported during the transition)- Fixes Flutter reporting
app_intentsas "does not support Swift Package Manager" when host apps enable SPM - Host apps that enable SPM need Flutter 3.24+; CocoaPods users are unaffected (
flutter: '>=3.3.0'unchanged) - The privacy manifest is now actually bundled (previously commented out in the podspec)
- New manifest at
- Declare the
NSPrivacyAccessedAPICategoryUserDefaultsrequired-reason API inPrivacyInfo.xcprivacy- Reasons
CA92.1(UserDefaults accessible only to the app itself) and1C8F.1(UserDefaults shared within the App Group, for cross-process cache/EntityQuery data) - Required for App Store review of downstream apps that bundle the plugin
- Reasons
app_intents_annotations 0.10.0 / app_intents_codegen 0.10.0
- No API changes; version-aligned with
app_intents0.10.0
Published to pub.dev:
Release notes
Open source →- No codegen changes; version bump aligns with
app_intents0.10.0 (Swift Package Manager support for the iOS plugin, #29)
- Add Swift Package Manager (SPM) support for the iOS plugin (#29, #30)
-
0.9.021 May 2026Release notes
Open source →- @AppShortcutsBuilder annotation in generated AppShortcuts (#25)
- App Group UserDefaults fallback for EntityQuery cold-start (#26)
- New @EntitySpec.persistedCacheKey field
- Defaults to app_intents.entities. when enumerable/indexed
Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]
Release notes
Open source →- Generated Swift
EntityQuerynow reads cached entities from App GroupUserDefaultsbefore waiting on the Flutter executor, mitigating the cold-startentityQueryNotConfigurederror when iOS has killed the host app (#26) SwiftGeneratoremits the new App Group fallback path when@EntitySpec(persistedCacheKey: ...)is set, or whenenumerable: true/indexed: trueprovides a default keyapp_intents.entities.<identifier>- Generated Swift
AppShortcutsstruct now uses the@AppShortcutsBuilderresult builder annotation per Apple'sAppShortcutsProviderprotocol requirement (#25)
-
0.8.020 May 2026Release notes
Open source →Bump all packages to v0.8.0 to publish the AppFunctions alpha09
upgrade (#23). Downstream Android hosts need AGP 9.1.0+, Gradle
9.3.1+, compileSdk 37, and the android.newDsl=false /
android.builtInKotlin=false shims in gradle.properties. Regenerate
Kotlin output withdart run app_intents_codegen:generate_kotlin
after upgrading.Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]
Release notes
Open source →- Upgrade
androidx.appfunctionsfrom1.0.0-alpha07to1.0.0-alpha09in the example app (#23) KotlinGeneratornow emits@AppFunction(isDescribedByKDoc = true)and@AppFunctionSerializable(isDescribedByKDoc = true)(uppercaseD) to match the renamed parameter introduced in alpha08- Breaking for downstream Android hosts: alpha09's AAR metadata requires AGP 9.1.0+, Gradle 9.3.1+, and
compileSdk = 37. Hosts also needandroid.newDsl=false(Flutter Gradle plugin compatibility) andandroid.builtInKotlin=false(KSP compatibility) inandroid/gradle.properties. Regenerate Kotlin output withdart run app_intents_codegen:generate_kotlinafter upgrading. Seedocs/usage.mdfor the full setup.
- Upgrade
-
0.7.811 May 2026Release notes
Open source →Fix: Android AppIntentsPlugin now handles iOS-only cache methods
(getCachedValue/setCachedValue/clearCachedValue/configureStorage/
processPendingActions) as no-ops returning null, instead of throwing
MissingPluginException. Prevents silent failures in release builds
where PlatformDispatcher.onError swallows the exception (#22).Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]
Release notes
Open source →- No codegen changes; version bump to align with plugin fix release (Android cache no-op handlers)
-
0.7.705 Apr 2026 -
0.7.630 Mar 2026Release notes
Open source →- No codegen changes; version bump to align with plugin bug fix release (App Group storage fix)
-
0.7.505 Mar 2026Release notes
Open source →- Fix: Kotlin codegen file parameter (
IntentFile) now includesmimeTypeandfilenamein generated map (#15) - Docs: Add
waitForPlugin()pattern explanation with timeout rationale and failure behavior (#16) - Docs: Document
processPendingActions()initialization order and cold start race condition (#17) - Docs: Add
updateAppShortcutParameters()migration guide for users migrating from other libraries (#18)
- Fix: Kotlin codegen file parameter (
-
0.7.404 Mar 2026Release notes
Open source →- Fix: Use
${param}placeholder format in xcstrings keys for ParameterSummary and AppShortcut phrases (#14)- Swift key-path syntax
\(\.$param)requires${param}in xcstrings keys, not{param} - YAML translations support both
{param}and${param}key formats
- Swift key-path syntax
- Revert: Remove
LocalizedStringResourcewrapper fromIntentDescription(unnecessary for localization)
- Fix: Use
-
0.7.304 Mar 2026Release notes
Open source →- Fix: Wrap
IntentDescriptionwithLocalizedStringResourcefor proper localization support (#14)
- Fix: Wrap
-
0.7.203 Mar 2026Release notes
Open source →- Fix: Escape newlines in Swift
IntentDescription("...")string literal to prevent compile errors
- Fix: Escape newlines in Swift
-
0.7.103 Mar 2026Release notes
Open source →- Fix: Kotlin KDoc multiline description now correctly adds
*prefix to continuation lines - Fix: Add missing
import AppIntentsBridgein generated Swift code for FlutterBridge mode and entity queries
- Fix: Kotlin KDoc multiline description now correctly adds
-
0.7.003 Mar 2026Release notes
Open source →- Add
.xcstringsString Catalog generation for iOS localization- New
XcstringsGeneratorclass collects all localizable strings from annotations - Translations YAML file support for multi-language localization
- Merge mode preserves existing translations when regenerating
{param}placeholders converted to%@/%1$@format;${applicationName}preserved
- New
- Add CLI options to
generate_swift:--xcstrings,--translations,--source-language - Add
yamlpackage dependency
- Add
-
0.6.228 Feb 2026Release notes
Open source →- Fix:
_toUpperSnakeCaseno longer prepends underscore to uppercase-starting enum names in KotlinGenerator - Fix: Add missing
returnkeyword indisplayRepresentationfor entities without nullable image - Fix: Deduplicate
generateAppShortcutsProvider/_generateShortcutsProviderBodyin SwiftGenerator - Fix: Simplify
_cleanClassNameto single-passSpecsuffix removal - Fix: Extract
_isNullableParamhelper to eliminate triple-computation in DartGenerator - Fix: Remove unnecessary intermediate
StringBufferingenerateAll - Fix: Add temp file cleanup in generated Swift code for FlutterBridge execution mode
- Improve: Analyzer error reporting —
InvalidGenerationSourceErrorinstead of silent null for missing required fields - Improve: Fix
_toDisplayTitledocstring accuracy in EnumAnalyzer - Improve: Inline
_formatTypedead abstraction in EntityAnalyzer - Improve: Type
_extractPhrasesparameter asDartObject?instead ofdynamicin ShortcutAnalyzer
- Fix:
-
0.6.127 Feb 2026Release notes
Open source →- Fix: Map
IntentFile/IntentFile?toString/String?in KotlinGenerator for KSP compatibility (#11)- KSP compiler does not support
IntentFileas@AppFunctionparameter type - File parameters now generate
mapOf("path" to value)for Dart-sideIntentFile.fromMap()compatibility
- KSP compiler does not support
- Documentation fixes: correct outdated code examples and API references
- Fix: Map
-
0.6.027 Feb 2026Release notes
Open source →- BREAKING: Remove
inputType/outputTypefromIntentInfomodel - Generate type-safe
XxxParamsclass for each intent with parametersfromMap(Map<String, dynamic>)for MethodChannel / cache modefromQueryParameters(Map<String, String>)for URL scheme deep links- Supports String, int, double, bool, DateTime, IntentFile types
- Handler registration now uses Params class and always returns empty map
- Remove
_extractTypeArguments()from IntentAnalyzer
- BREAKING: Remove
-
0.5.227 Feb 2026Release notes
Open source →- Fix Swift 6 strict concurrency errors in
FlutterBridge.swiftwhen used as SPM package- Add
sendingkeyword to all non-Sendable parameters and return types crossing actor boundaries - Affects
invoke(),queryEntities(),suggestedEntities(), and all executor/handler closures
- Add
- Fix Swift 6 strict concurrency errors in
-
0.5.127 Feb 2026Release notes
Open source →- Add root
Package.swiftso AppIntentsBridge can be fetched via standard SPM from repository URL
- Add root
-
0.5.027 Feb 2026Release notes
Open source →- Fix AppShortcut phrase
{paramName}to generate\(\.$paramName)Swift syntax - Add
imageNamesupport in@EnumCaseDisplaycode generation (asset bundle image) - Add
displayImageNamesupport in@EntitySpecfor entityDisplayRepresentationimage- Static image via
named:for entity type, per-instance@EntityImageviasystemName:takes priority
- Static image via
- Add
EnumerableEntityQueryextension generation whenenumerable: true - Add
IndexedEntityextension generation whenindexed: true(iOS 26+,import CoreSpotlight) - Update
EnumAnalyzerto extractimageNamefrom@EnumCaseDisplay - Update
EntityAnalyzerto extractdisplayImageName,indexed,enumerablefrom@EntitySpec - 189 tests (28 new tests for all new features)
- Fix AppShortcut phrase
-
0.4.127 Feb 2026Release notes
Open source →- Widen dependency constraints to resolve conflicts with other codegen packages (e.g.,
go_router_builder)source_gen: ">=2.0.0 <5.0.0"(was^2.0.0)analyzer: ">=7.0.0 <11.0.0"(was^7.0.0)build: ">=2.4.0 <5.0.0"(was^2.4.0)build_test: ">=2.2.0 <4.0.0"(was^2.2.0)
- Migrate to
TypeChecker.fromUrl()for compatibility with source_gen 4.x - Migrate to
LibraryElement.classes/.enumsAPI for compatibility with analyzer 10.x - Fix nullable
element.namehandling for analyzer 10.x
- Widen dependency constraints to resolve conflicts with other codegen packages (e.g.,
-
0.4.027 Feb 2026Release notes
Open source →- Add
supportedModessupport in SwiftGenerator- Generates
@available(iOS 26.0, *) static var supportedModes: IntentModes { .foreground } - Generates
static var openAppWhenRun: Bool { true }for backward compatibility - Both properties generated when
supportedModes: foregroundorurlSchemeis set
- Generates
- Add
IntentFileparameter support in SwiftGenerator@Parameter(supportedTypeIdentifiers:)for file type parameters- File serialization code generation (write to temp file, extract path/mimeType/filename)
import UniformTypeIdentifierswhen file params present
- Add cache mode in SwiftGenerator (
_writeCachePerformMethod)- Auto-generated when
supportedModes: foregroundwithouturlScheme - Caches params to UserDefaults via
AppIntentsPlugin.setPendingAction() processPendingActions()delivers cached actions via existingexecuteIntentmechanism
- Auto-generated when
- Add
IntentFile.fromMap()extraction in DartGenerator for file parameters - Fix: Use
Map.from()for IntentFile params from MethodChannel (avoid type cast errors) - Add
IntentModeTypeenum andfileTypefield to codegen models - Update IntentAnalyzer to parse
supportedModesandfileTypeannotations
- Add
-
0.3.027 Feb 2026Release notes
Open source →- Add
KotlinGeneratorfor Android AppFunctions code generation@AppFunction(isDescribedByKdoc = true)annotated methods@AppFunctionSerializabledata classes for entitiesAppFunctionsBridgesingleton for MethodChannel communication- Enum class generation with
fromValue()companion object
- Add CLI command
generate_kotlinfor Kotlin file output - Extract shared
analyzeSources()utility for Swift/Kotlin CLI commands - 154 tests (38 new Kotlin generator tests)
- Update documentation for cross-platform support
- Add
-
0.2.127 Feb 2026 -
0.2.027 Feb 2026Release notes
Open source →- BREAKING: Raise iOS minimum to 17.0
- Add
IntentResult & ProvidesDialogsupport viaresultDialogTemplate - Add
ParameterSummarygeneration viaparameterSummary - Add
AppEnumcode generation (@EnumSpec,EnumAnalyzer,_generateEnumBody) - Add entity image support in
DisplayRepresentation(SF Symbol icons) - Add
{applicationName}to\(.applicationName)phrase conversion for AppShortcuts - Fix AppShortcutsProvider to use Swift result builder pattern (no array literals)
- Fix error handling:
throw AppIntentError.custom(...)instead of silentreturn .result() - Fix double-quote escaping in dialog templates
- Fix shortcut
intentIdentifiertoclassNameresolution in CLI - 116 tests covering all analyzers, generators, and builder
-
0.1.003 Jan 2026Release notes
Open source →- Initial release
IntentAnalyzerandEntityAnalyzerfor annotation parsingShortcutAnalyzerfor@AppShortcutand@AppShortcutsProvidersupportSwiftGeneratorfor iOS 17+ App Intent Swift code generationDartGeneratorfor handler initialization code generation- CLI tool
generate_swiftfor Swift code output - Integration with
build_runnerviaAppIntentsBuilder