Shortcut(快捷指令) — Apple的Shortcuts应用程序中的自动化场景,无需编写代码即可连接多个应用程序和服务。Shortcuts通过Siri语音启动、按计划、在进入或离开地理围栏时、通过点击小组件或触碰NFC标签来启动。场景通过Actions构建器以可视化方式拖拽块创建。更多信息请参阅Shortcuts用户指南。
要点
Shortcut — 在iOS、iPadOS、macOS和watchOS上自动执行任务的一系列操作(Actions)组合成一个场景。与普通应用程序不同,Shortcut没有固定界面——它在后台运行或仅显示快速输入数据的对话框。用户在Shortcuts应用程序中通过组合Actions图库中的块来创建场景,并通过一次触摸、语音或通过触发器自动启动。
Shortcuts应用程序 — Apple内置的自动化构建器,适用于所有运行iOS 13+、iPadOS、macOS 12+和watchOS的设备。Actions库包含300多个内置块:系统(发送消息、拨打电话、打开应用程序)、多媒体(照片、音乐、播客)、互联网(通过Get Contents of URL使用REST API)、文件和文档操作。图库包含来自Apple和社区的现成场景——从向联系人发送预计到达时间到批量重命名文件。
Actions库由第三方应用程序通过App Intents框架补充。开发者在Intents.intentdefinition中注册意图,它们会自动出现在Shortcuts图库中。例如,Things 3应用程序添加了「创建任务」和「显示今日任务」操作,而CARROT Weather添加了「今日天气预报」及其位置参数。
Shortcuts工作在iOS沙盒中——场景在后台进程shortcuted中以有限权限运行。每个Action都是对预定义处理程序的调用,该处理程序接收输入参数、执行操作并返回结果。系统通过管道将一个Action的输出数据传递给下一个Action的输入——用户在编辑器中将其视为块的蓝色连接点。
Shortcut的执行流是线性的:Actions按从上到下的顺序依次执行。条件跳转通过If块实现——系统评估条件并执行相应分支。可用的循环有Repeat(重复N次)、Repeat with Each(按列表元素)和For Each。一个Action中的错误会中断整个场景,除非添加了Try/Catch块。
import Intents
class OrderCoffeeIntentHandler: NSObject, OrderCoffeeIntentHandling {
func handle(intent: OrderCoffeeIntent,
completion: @escaping (OrderCoffeeIntentResponse) -> Void) {
let order = Order(coffee: intent.coffee, size: intent.size)
placeOrder(order) { success in
let response = success
? OrderCoffeeIntentResponse.success(coffee: intent.coffee)
: OrderCoffeeIntentResponse.failure(error: "Order failed")
completion(response)
}
}
}
每个Intents处理程序通过INIntentsSupported键在Info.plist中注册。当通过Siri启动Shortcut时,系统找到相应的IntentHandler并异步执行。响应以INIntentResponse对象形式返回,包含状态、消息和可选数据以显示给用户。
创建Shortcut从在Shortcuts应用程序图库中按「+」开始。用户从类别中选择Actions:应用程序、场景、互联网、文件、健康、音乐等。每个Action都需要配置——输入字段、开关、列表。组装后,场景通过Play按钮测试,如有错误,问题块会高亮显示。发布时,Shortcut导出为.shortcut文件,通过AirDrop或iMessage发送。
变量与魔法 Shortcuts支持变量——一个Action的输出数据可以传递给另一个。魔法变量(Magic Variables)自动确定:如果前一个Action返回图像,系统会在下一个的参数中建议该图像。用户还可以通过Set Variable块创建命名变量,并在场景中的任何位置使用它们。
import AppIntents
struct CreateTaskIntent: AppIntent {
static var title: LocalizedStringResource = "Create Task"
static var description = IntentDescription(
"Creates a new task in your to-do list"
)
@Parameter(title: "Task Title")
var taskTitle: String
func perform() async throws -> some IntentResult {
let task = TaskModel(title: taskTitle)
try await Database.shared.save(task)
return .result(dialog: "Task created")
}
}
App Intents — Apple(iOS 16+,SwiftUI)的现代框架,已取代Intents用于自定义意图。与旧的SiriKit不同,App Intents无需Objective-C运行时即可工作,通过async/await支持异步,并自动为Siri生成对话框。CreateTaskIntent结构体用AppIntent协议标记,参数用@Parameter属性标记。框架在Shortcuts图库中自动创建操作。
Shortcuts触发器 — 场景自动启动的条件。配置在Shortcuts应用程序的Automation标签页中完成。触发器分为个人(时间、位置、充电)、触觉(NFC、摇动)、系统(应用程序打开、专注模式、连接CarPlay)和事件(收到电子邮件、日历事件、通知)。每个触发器可以设置为立即执行或需确认执行。
| 触发器 | 启动条件 | 使用示例 |
|---|---|---|
| 时间 | 特定时间、日出/日落 | 在22:00开启「请勿打扰」模式 |
| 地理围栏 | 进入或离开区域 | 下班时发送「正在回家」 |
| NFC | 触碰NFC标签 | 触碰标签时启动「智能家居」场景 |
| 应用 | 打开或关闭应用程序 | 关闭YouTube时提醒关闭计时器 |
| 专注 | 切换专注模式 | 激活睡眠专注时开启深色主题 |
| 充电 | 连接/断开电源 | 连接MagSafe时打开充电小组件 |
自动化 — Shortcuts的关键功能,普通应用程序没有开发者权限则无法使用。用户配置一次触发器即可忘记——场景在后台自动运行无需参与。例如,「当我到家时,打开Wi-Fi并关闭静音模式」的自动化在进入家庭地理围栏时启动。系统在首次配置时请求自动化权限,如果使用不频繁可能会禁用它。
macOS上的Shortcuts — 从macOS 12 Monterey开始,Shortcuts在Mac上可用。场景通过iCloud在所有Apple设备之间同步。在Mac上支持系统操作Finder、终端、自动操作和AppleScript。macOS开发者可以通过App Intents添加操作,与iOS类似。
App Intents — 在iOS 16+和macOS 13+上将应用程序与Shortcuts集成的主要框架。开发者创建实现AppIntent协议的结构体,通过属性包装器描述参数,并实现perform()方法。系统自动在Shortcuts、Siri和Spotlight中注册意图。为了支持旧版iOS(10-15),使用带有INIntent和IntentHandler的Intents框架。
import Intents
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> AnyObject? {
if intent is OrderCoffeeIntent {
return OrderCoffeeIntentHandler()
}
return .none
}
}
测试App Intents — 意图的调试通过Xcode完成:选择应用程序方案,在Arguments中传递-intents,模拟器将提供已注册意图列表供测试。要在接近真实的环境中测试Shortcut,构建应用程序存档并通过TestFlight安装到设备上。应用程序中的Shortcuts在首次启动后出现在图库中。
高级功能 App Intents支持带自动完成的参数(动态选项)、执行前确认(confirmation)、Siri意图(语音快捷指令)以及创建带启动按钮的小组件。Indexed intents(iOS 17+)——Siri根据上下文自动向用户建议的意图:时间、位置和操作历史。
常见问题
Shortcut — 是连接不同应用程序操作的场景,而不是独立的应用程序。用户不编写代码,而是从现成的Actions块组装场景。Shortcut由触发器启动,无需打开Shortcuts应用程序即可执行,而普通应用程序需要通过屏幕上的图标启动。
Shortcuts支持以下触发器:按计划的时间、进入或离开区域时的地理围栏、触碰iPhone时的NFC标签、打开应用程序、点击小组件、Siri语音命令、连接充电器、睡眠模式和专注模式,以及来自应用程序的特定通知。配置在Automation标签页中完成。
可以,Shortcut导出为.shortcut文件,通过AirDrop、iMessage发送或在iCloud上的Shortcuts图库中发布。接收者导入场景即可使用。从互联网下载时,iOS会要求确认并警告运行未经验证的场景存在潜在安全风险。
第三方应用程序通过iOS 16+上的App Intents框架或旧版本上的Intents框架添加操作。开发者在Intents.intentdefinition中注册操作,它们会出现在Shortcuts应用程序的Actions图库中。用户组合不同应用程序的操作——例如,从Safari发送链接到Bear笔记。
不需要,Shortcuts以可视化方式无需代码即可创建。用户从列表中拖拽Actions块,配置参数并按顺序连接。对于高级场景,可以使用Run Script Over SSH、Get Contents of URL以及Control Flow If、Repeat、For Each等块,但编程经验不是必需的。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。