app-intents-code-review
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseApp Intents Code Review
App Intents 代码审查
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 |
| 问题类型 | 参考文档 |
|---|---|
| AppIntent协议、perform()、返回类型 | references/intent-structure.md |
| AppEntity、EntityQuery、标识符 | references/entities.md |
| AppShortcutsProvider、短语、发现机制 | references/shortcuts.md |
| @Parameter、验证、动态选项 | references/parameters.md |
Review Checklist
审查检查清单
- marked with
perform()if accessing UI/main thread resources@MainActor - completes within 30-second timeout (no heavy downloads/processing)
perform() - Custom errors conform to
CustomLocalizedStringResourceConvertible - handles missing identifiers gracefully
EntityQuery.entities(for:) - used if Siri voice input needed (not plain
EntityStringQuery)EntityQuery - returns reasonable defaults for disambiguation
suggestedEntities() - phrases include
AppShortcutparameter.applicationName - Non-optional has sensible defaults or uses
@ParameterrequestValue() - not used on iOS 16 targets (crashes)
@IntentParameterDependency - Phrases localized in , not
AppShortcuts.stringsLocalizable.strings - App Intents defined in app bundle, not Swift Package (pre-iOS 17)
- for internal/widget-only intents
isDiscoverable = false
- 如果访问UI/主线程资源,需标记
perform()@MainActor - 需在30秒超时时间内完成(禁止繁重的下载/处理操作)
perform() - 自定义错误需遵循协议
CustomLocalizedStringResourceConvertible - 需优雅处理缺失的标识符
EntityQuery.entities(for:) - 如果需要Siri语音输入,需使用(而非普通的
EntityStringQuery)EntityQuery - 需返回合理的默认值以消除歧义
suggestedEntities() - 短语需包含
AppShortcut参数.applicationName - 非可选需设置合理默认值或使用
@ParameterrequestValue() - iOS 16目标版本中禁止使用(会导致崩溃)
@IntentParameterDependency - 短语需在中本地化,而非
AppShortcuts.stringsLocalizable.strings - App Intents需定义在App包内,而非Swift Package(iOS 17之前的版本)
- 内部/仅小组件使用的意图需设置
isDiscoverable = false
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
- AppIntent协议实现 -> intent-structure.md
- 实体查询、标识符、Spotlight -> entities.md
- App快捷指令、短语、发现机制 -> shortcuts.md
- 参数验证、动态选项 -> parameters.md
Review Questions
审查问题
- Does handle timeout limits for long-running operations?
perform() - Are entity queries self-contained (no injection in Siri context)?
@Dependency - Do phrases read naturally and include the app name?
- Are SwiftData models passed by , not directly?
persistentModelID - Would migrating from SiriKit break existing user shortcuts?
- 是否处理了长时间运行操作的超时限制?
perform() - 实体查询是否独立(Siri环境中无注入)?
@Dependency - 短语是否自然通顺且包含应用名称?
- SwiftData模型是否通过传递,而非直接传递?
persistentModelID - 从SiriKit迁移是否会破坏现有用户快捷指令?