App Intents Code Review
Quick Reference
| Issue Type | Reference | |------------|-----------| | AppIntent protocol, perform(), return types | references/intent-structure.md | | AppEntity, EntityQuery, identifiers | references/entities.md | | AppShortcutsProvider, phrases, discovery | references/shortcuts.md | | @Parameter, validation, dynamic options | references/parameters.md |
Review Checklist
- [ ]
perform()marked with@MainActorif accessing UI/main thread resources - [ ]
perform()completes within 30-second timeout (no heavy downloads/processing) - [ ] Custom errors conform to
CustomLocalizedStringResourceConvertible - [ ]
EntityQuery.entities(for:)handles missing identifiers gracefully - [ ]
EntityStringQueryused if Siri voice input needed (not plainEntityQuery) - [ ]
suggestedEntities()returns reasonable defaults for disambiguation - [ ]
AppShortcutphrases include.applicationNameparameter - [ ] Non-optional
@Parameterhas sensible defaults or usesrequestValue() - [ ]
@IntentParameterDependencynot used on iOS 16 targets (crashes) - [ ] Phrases localized in
AppShortcuts.strings, notLocalizable.strings - [ ] App Intents defined in app bundle, not Swift Package (pre-iOS 17)
- [ ]
isDiscoverable = falsefor internal/widget-only intents
When to Load References
- AppIntent protocol implementation -> intent-structure.md
- Entity queries, identifiers, Spotlight -> entities.md
- App Shortcuts, phrases, discovery -> shortcuts.md
- Parameter validation, dynamic options -> parameters.md
Review Questions
- Does
perform()handle timeout limits for long-running operations? - Are entity queries self-contained (no
@Dependencyinjection in Siri context)? - Do phrases read naturally and include the app name?
- Are SwiftData models passed by
persistentModelID, not directly? - Would migrating from SiriKit break existing user shortcuts?