app-intents-code-review

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

App Intents Code Review

App Intents 代码审查

Quick Reference

快速参考

Issue TypeReference
AppIntent protocol, perform(), return typesreferences/intent-structure.md
AppEntity, EntityQuery, identifiersreferences/entities.md
AppShortcutsProvider, phrases, discoveryreferences/shortcuts.md
@Parameter, validation, dynamic optionsreferences/parameters.md
问题类型参考文档
AppIntent协议、perform()、返回类型references/intent-structure.md
AppEntity、EntityQuery、标识符references/entities.md
AppShortcutsProvider、短语、发现机制references/shortcuts.md
@Parameter、验证、动态选项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
    CustomLocalizedStringResourceConvertible
  • 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
    requestValue()
  • @IntentParameterDependency
    not used on iOS 16 targets (crashes)
  • Phrases localized in
    AppShortcuts.strings
    , not
    Localizable.strings
  • App Intents defined in app bundle, not Swift Package (pre-iOS 17)
  • isDiscoverable = false
    for internal/widget-only intents
  • 如果访问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需定义在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

审查问题

  1. Does
    perform()
    handle timeout limits for long-running operations?
  2. Are entity queries self-contained (no
    @Dependency
    injection in Siri context)?
  3. Do phrases read naturally and include the app name?
  4. Are SwiftData models passed by
    persistentModelID
    , not directly?
  5. Would migrating from SiriKit break existing user shortcuts?
  1. perform()
    是否处理了长时间运行操作的超时限制?
  2. 实体查询是否独立(Siri环境中无
    @Dependency
    注入)?
  3. 短语是否自然通顺且包含应用名称?
  4. SwiftData模型是否通过
    persistentModelID
    传递,而非直接传递?
  5. 从SiriKit迁移是否会破坏现有用户快捷指令?