iOS 快捷指令(Shortcuts)有什么特殊权限
这是非常关键的问题,也是 iOS 快捷指令(Shortcuts)能够实现强大自动化能力的核心所在:快捷指令拥有比普通第三方 App 更高、更特殊的系统权限。
正是这些特殊权限,使得快捷指令能够成为连接系统各个功能模块的“万能胶水”,并能执行普通 App 无法直接完成的操作。
快捷指令的特殊权限与能力
iOS 快捷指令的特殊权限主要体现在它能够直接调用系统服务和整合多个 App 的功能,而无需像普通 App 那样受严格的沙盒和权限模型限制。
-
沙盒穿透能力(有限):
- 普通 App: 受严格的沙盒限制,不能直接访问其他 App 的数据或系统敏感区域。
- 快捷指令: 快捷指令本身不是一个普通的沙盒 App,它更像是一个系统级进程的编排器。它拥有一个特殊的权限集合,可以直接调用系统提供的各种“动作”(Actions)。这些动作由 Apple 预先定义或由开发者通过
SiriKit和Intents框架向系统“捐赠”。 - 体现: 它可以直接“打开 App”(无需 URL Scheme,直接指定 App 名)、“设置音量”、“调整亮度”、“发送信息”、“创建提醒”、“执行网络请求”(无 CORS 限制)、“运行 Shell 脚本”(在 macOS 上)。
-
直接访问系统级 API 和功能:
- 设备硬件和设置: 快捷指令可以直接调整系统音量、屏幕亮度、勿扰模式、低电量模式、飞行模式、Wi-Fi/蓝牙开关等设备设置,而普通 App 通常只能在沙盒内进行受限的调整,或需要弹出到“设置”App。
- 系统服务: 直接与日历、提醒事项、备忘录、通讯录、相册等系统服务进行更深层次的交互,例如:批量创建事件、查找特定联系人、删除多张照片等。
- 网络操作: 快捷指令可以发起网络请求(HTTP Get/Post),并且不受浏览器环境下的 CORS 限制。这意味着它可以在不经过后端代理的情况下,直接请求跨域 API。
-
串联 App 功能:
- App 动作捐赠(Intents): 开发者可以通过
Intents框架将自己 App 的特定功能(“动作”)“捐赠”给系统。一旦捐赠成功,这些动作就可以在“快捷指令”App 中被调用和组合,即使快捷指令本身不知道 App 的内部实现细节。 - 无缝衔接: 用户可以在一个快捷指令中,先调用 A App 的一个动作,然后将结果传递给 B App 的另一个动作,最后再发送一条信息。这一切都可以在“快捷指令”App 内部完成,实现了 App 间的自动化协同。
- App 动作捐赠(Intents): 开发者可以通过
-
与 Siri 的深度集成:
- 任何快捷指令都可以被关联到一个自定义的 Siri 语音短语。用户说出短语后,Siri 就能直接运行该指令。
- 这种集成方式,使得用户可以用自然语言控制复杂的自动化流程。
-
自动化触发(Automations):
- 快捷指令可以设置为在特定条件(如时间、到达某个位置、连接某个 Wi-Fi、打开/关闭某个 App、电量变化等)满足时自动运行。
- 这些自动化可以静默运行,无需用户手动点击。
总结快捷指令的特殊权限:
快捷指令不是一个普通的沙盒 App,它更像是 iOS 系统提供的一个高权限的自动化和编排引擎。它通过预定义的系统动作和第三方 App 捐赠的动作,获得了直接访问和控制系统功能、以及在 App 之间“搭桥”的能力,从而突破了普通 App 的沙盒限制。
它扮演了一个“中间人”的角色,这个中间人拥有系统赋予的特殊通行证,能够协调各个独立的沙盒 App 和系统服务共同完成任务。
这对 JSBox 意味着什么?
- 能力扩展: 当 JSBox 自身无法直接访问某个系统功能(例如直接打开 App 而不通过 URL Scheme)时,可以通过调用一个预设的快捷指令来“借用”快捷指令的特殊权限,从而实现功能。
- 弥补不足: JSBox 的
$app.openURL()无法打开一个未注册 Scheme 的 App,但快捷指令的“打开 App”动作可以直接选择 App,弥补了这一不足。 - 自动化入口: JSBox 可以作为自动化流程的起点或终点,通过调用快捷指令,将复杂任务从 JavaScript 世界延伸到整个 iOS 生态。
理解快捷指令的这些特殊权限,能让你在设计自动化流程时,更灵活地选择工具和方法,突破普通 App 的限制。