App Intents Code Review
Quick Reference
references/entities.md |
| AppShortcutsProvider, phrases, discovery |
references/shortcuts.md |
| @Parameter, validation, dynamic options |
references/parameters.md |
Review Checklist
- - [ ]
perform() marked with @MainActor if accessing UI/main thread resources - [ ]
perform() completes within 30-second timeout (no heavy downloads/processing) - [ ] Custom errors conform to INLINECODE3
- [ ]
EntityQuery.entities(for:) handles missing identifiers gracefully - [ ]
EntityStringQuery used if Siri voice input needed (not plain EntityQuery) - [ ]
suggestedEntities() returns reasonable defaults for disambiguation - [ ]
AppShortcut phrases include .applicationName parameter - [ ] Non-optional
@Parameter has sensible defaults or uses INLINECODE11 - [ ]
@IntentParameterDependency not used on iOS 16 targets (crashes) - [ ] Phrases localized in
AppShortcuts.strings, not INLINECODE14 - [ ] App Intents defined in app bundle, not Swift Package (pre-iOS 17)
- [ ]
isDiscoverable = false for 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
- 1. Does
perform() handle timeout limits for long-running operations? - Are entity queries self-contained (no
@Dependency injection 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?
App Intents 代码审查
快速参考
references/entities.md |
| AppShortcutsProvider、短语、发现机制 |
references/shortcuts.md |
| @Parameter、验证、动态选项 |
references/parameters.md |
审查清单
- - [ ] 若访问 UI/主线程资源,perform() 需标记 @MainActor
- [ ] perform() 在 30 秒超时内完成(无繁重下载/处理)
- [ ] 自定义错误遵循 CustomLocalizedStringResourceConvertible
- [ ] EntityQuery.entities(for:) 优雅处理缺失标识符
- [ ] 如需 Siri 语音输入,使用 EntityStringQuery(而非普通 EntityQuery)
- [ ] suggestedEntities() 为消歧返回合理的默认值
- [ ] AppShortcut 短语包含 .applicationName 参数
- [ ] 非可选 @Parameter 具有合理默认值或使用 requestValue()
- [ ] iOS 16 目标上不使用 @IntentParameterDependency(会导致崩溃)
- [ ] 短语本地化在 AppShortcuts.strings 中,而非 Localizable.strings
- [ ] App Intents 定义在应用包中,而非 Swift Package(iOS 17 之前)
- [ ] 内部/仅小组件意图设置 isDiscoverable = false
何时加载参考文档
- - AppIntent 协议实现 -> intent-structure.md
- 实体查询、标识符、Spotlight -> entities.md
- App Shortcuts、短语、发现机制 -> shortcuts.md
- 参数验证、动态选项 -> parameters.md
审查问题
- 1. perform() 是否处理长时间运行操作的超时限制?
- 实体查询是否自包含(Siri 上下文中无 @Dependency 注入)?
- 短语是否读起来自然且包含应用名称?
- SwiftData 模型是否通过 persistentModelID 传递,而非直接传递?
- 从 SiriKit 迁移是否会破坏现有用户快捷指令?