WWDC Quick Look 💓 By SwiftGGTeam
Design App Intents for system experiences

Design App Intents for system experiences

观看原视频

Highlight

iOS 18 改变了 App Intents 的设计原则:从「暴露最常用操作」变为「App 做的所有事都应该是 Intent」,让 Spotlight、Action Button、Siri、Controls 等系统入口都能调用你的功能。


核心内容

去年的 App Intents 定位很明确:挑出 App 里最常用的那几个操作,暴露给 Shortcuts 和 Siri。这个策略的问题在于,如果你的 App 只有 3 个 Intent,用户在 Shortcuts 里能组合的空间就非常有限。

iOS 18 解决了这个问题——策略从「精选少数」变成了「全面覆盖」。Apple 在这个 Session 里明确说:你的 App 做的所有事情都应该是 App Intent。这背后的原因是系统的入口越来越多了:Spotlight、Action Button、Siri、Controls、Widgets、Squeeze……每个入口都需要足够丰富的 Intent 才能发挥作用。

但「多」不等于「乱」。Session 花了大部分时间讲设计原则,核心是三个问题:

  1. 哪些功能应该暴露为 Intent? 从动词出发——打开、创建、搜索、设置、删除。避免碎拆,多个 Intent 做同一件事应该合并为一个带参数的 Intent。

  2. 参数怎么设计? 参数摘要在任何参数组合下都要读得通。如果参数是二值状态(开关类),一定要支持 Toggle 作为默认参数,否则每次运行都要问用户。

  3. 什么时候打开 App? 以前是能不打开就不打开,现在变成「打开是常见行为」。如果你的 Intent 会让 App 里发生变化(比如创建了一个新板),应该直接打开 App 让用户看到结果。这通过 OpenIntent 协议或者 openWhenRun 选项实现。


详细内容

Intent 类型:从动词出发

设计 App Intent 时,先从这些基础动词入手(00:35):

  • 打开(Open)—— 打开特定视图、文件夹或文件
  • 创建(Create)—— 创建笔记、事件、草稿
  • 搜索(Search)—— 在 App 内容中搜索
  • 设置(Set)—— 调整开关、状态
  • 删除(Delete)—— 删除项目、草稿

这些动词覆盖了大多数 App 的核心功能。每个功能对应一个 Intent,而不是为每种 UI 操作单独做 Intent。

避免碎拆 Intent

Session 反复强调的一个错误是「碎拆」—— 为同一件事做多个 Intent(00:50)。比如不要为「打开不同类型的提醒」分别做 Intent,而是做一个「打开提醒」的 Intent,把提醒类型作为参数。

正确做法是结构化地组织功能,把可变的部分放进参数:

❌ 打开工作提醒
❌ 打开个人提醒
❌ 打开重要提醒

✅ 打开提醒(参数:提醒类型)

参数摘要要自然可读

Intent 的参数摘要在任何参数组合下都要读得通(04:16)。比如相机的「打开相机到特定模式」Intent,摘要应该确保无论选哪种模式都能读成一句话。

参数类型选择

内置参数:适合简单任务,比如日期、文本、数字(04:42)。

静态参数(Static Parameter):选项固定的场景,比如 App 的标签页(04:55)。

App Entity:选项会动态变化的场景,比如用户会添加新文件夹,需要自动更新选项列表(05:10)。

可选参数 vs 必填参数

可选参数优先05:24):如果用户没有指定参数,Intent 应该直接执行,提供完整的 App 内选择体验。比如「打开笔记到特定文件夹」如果没指定文件夹,就打开文件夹选择界面,而不是每次都问。

必填参数:只在参数为空时 Intent 完全没意义时使用。比如「搜索邮件」必须有搜索词,这个参数就是必填的(06:04)。

二值状态支持 Toggle

如果 Intent 只有两个状态(开/关),必须支持 Toggle 作为默认参数(06:32)。比如「设置手电筒」Intent,应该支持 Toggle 而不是每次都问用户开还是关。

什么时候打开 App

iOS 18 的重大变化是打开 App 变成了常见行为(06:49)。有两种情况:

OpenIntent 协议:Intent 的本质就是打开 App 到特定视图。比如「打开秒表」Intent。

openWhenRun 选项:Intent 执行后会在 App 中产生变化,应该打开让用户看到。比如「创建 Freeform 板」完成后,应该直接打开到新创建的板(07:59)。

这个选项默认开启,用户可以在 Shortcuts 里关闭,适合一个 Shortcut 连续执行多个 Intent 的场景。

后台执行支持

如果你的 App 支持 Live Activity、音频播放或录音,对应的 Intent 应该支持后台执行(06:39)。这意味着用户不需要打开 App 就能完成这些操作。


核心启发

1. 审查现有 Intent 的碎拆问题

如果你已经有 App Intent,检查是否存在多个 Intent 做同一件事的情况。比如「发送给朋友」「发送给群组」「发送给频道」应该合并为「发送消息」Intent,把接收方作为参数。合并后用户在 Shortcuts 里的灵活性会大幅提升。

2. 为二值状态添加 Toggle 支持

检查所有只有两个状态的 Intent(开关类),确保它们支持 Toggle 作为默认参数。比如「勿扰模式」「专注模式」「播放/暂停」这些 Intent,用户期望的是一次切换,而不是每次都弹出选择框。

3. 重新思考「打开 App」的策略

如果你的 Intent 会在 App 中产生变化(创建、修改、删除),考虑添加 openWhenRun 行为。比如「创建笔记」「添加事件」这些操作,完成后直接打开让用户看到结果,体验会更连贯。


关联 Session

评论

GitHub Issues · utterances