iOS App Intents
概述
向系统暴露最小但有用的操作与实体表面。先确定人们真正希望在应用之外使用的动词与对象,再实现一个范围较窄的 App Intents 层,必要时能干净地深链回主应用或交接给主应用。
按需阅读以下参考文件:
references/first-pass-checklist.md:用于选择第一版 intent 与实体表面
references/example-patterns.md:可复制并改写的具体示例形态
references/code-templates.md:通用化的 App Intents 代码模板
references/system-surfaces.md:思考快捷指令、Siri、聚焦搜索、小组件及其他系统入口的方式
核心工作流
1)从操作而非界面出发
找出 1-3 个最有价值、应在应用 UI 之外可用的操作。
优先使用 compose(撰写)、open(打开)、find(查找)、filter(筛选)、continue(继续)、inspect(查看)、start(开始)等动词。
不要把整个应用导航树都镜像成 intent。
2)定义较小的实体表面
只为系统需要理解或路由的对象添加 AppEntity 类型。
保持实体形态比应用的持久化模型更窄。
仅在消歧或建议确实有用处时添加 EntityQuery 或其他查询类型。
3)判断操作是在原地完成还是打开应用
对于可直接从系统界面完成的操作,使用不打开应用的 intent。
当用户应落到特定的应用内工作流时,使用 openAppWhenRun 或打开式 intent。
当应用必须在主场景内响应时,添加一条清晰的运行时交接路径,而不是散布临时路由逻辑。
若操作在两种模式下都能工作,可考虑同时提供内联版本与打开应用版本,而不必强行二选一。
4)让操作可被发现
为第一批高价值 intent 添加 AppShortcutsProvider 条目。
选择在快捷指令、Siri 与聚焦搜索中都合理的标题、短语和符号。
保持快捷指令短语直接且面向任务。
当小组件配置或由 intent 驱动的控件已经需要相同参数时,为小组件与控件复用同一套操作模型。
5)验证运行时交接
构建应用并确认 intents target 可干净编译。
验证 intent 运行后应用能打开或路由到预期位置。
总结当前暴露了哪些操作、由哪些实体支撑、应用如何处理调用。
推荐的默认做法
优先为面向系统的层使用专门的 intents target 或模块。
保持 intent 类型轻量;业务逻辑应留在应用服务或领域模型中。
保持 AppEntity 小巧且适合展示。
对于标签页、模式、可见性等级等固定应用选项,先使用 AppEnum,再考虑完整实体类型。
在主应用场景或根路由中优先使用单一可预测的 app-intent 路由表面。
把 App Intents 视为系统集成基础设施,而不仅是快捷指令功能。
反模式
在没有真实用户价值的情况下把每个屏幕或标签页都暴露为独立 intent。
把整个模型图镜像为 AppEntity 类型。
把运行时交接隐藏在全局副作用中,缺少清晰的应用入口路径。
添加短语含糊或标题通用的 App Shortcuts。
把首次 App Intents 工作当成宽泛的分类项目,而不是一个小而实用的发布。
备注
作为主要参考的 Apple 文档:
https://developer.apple.com/documentation/appintents/making-actions-and-content-discoverable-and-widely-available
https://developer.apple.com/documentation/appintents/creating-your-first-app-intent
https://developer.apple.com/documentation/appintents/adopting-app-intents-to-support-system-experiences
除上述链接外,当 App Intents API 或平台行为可能已变化时,可使用网络搜索查阅当前 Apple 开发者文档。
良好的首次实现通常包含:一个打开应用的 intent、一个操作 intent、一两个实体类型,以及一个小型 AppShortcutsProvider。
值得覆盖的示例族包括:
在应用中打开某个目标或编辑器
不打开应用、内联执行轻量操作
从固定枚举(如标签页或模式)中选择
通过 EntityQuery 解析一个或多个实体
用同一个实体表面驱动小组件配置或控件