# macOS 中的阿拉丁神灯：再谈 URL Scheme

> 本文公开全文。

原文：https://utgd.net/article/20166

在初学者眼中，URL Scheme 是一条捷径，将三步并作两步；在自动化魔法师手里，URL Scheme 是一盏神灯，可以将精灵封印其中。

而在 iOS 和 macOS 两大平台上，URL Scheme 也有着截然不同的命运。曾几何时，URL Scheme 还是 iOS 自动化的主要方向，但自从 Workflow 被 Apple 收购（并更名为 Shortcuts），图形化的自动化就日趋主流，而曾经像魔法杖一样备受吹捧的 Launch Center Pro（基于 URL Scheme），现在几乎成了烧火焜，竟然靠各种主题皮肤续命，不禁让人惋惜。

macOS 上的 URL Scheme 则恰好相反，在自动化工具林立的神木森林中，URL Scheme 几乎只是一丛低矮的灌木，我如此担心这种自动化方式过于不起眼，以至于在网站“创刊”文章中，特意写了一篇《macOS 中的阿里阿德涅之线——Deep Link》。之后的大量实践（以及大量文章）让我确信，macOS 上——以 Keyboard Maestro 为代表——的 URL Scheme，几乎可以作用于任何软件、完成任何任务，而不像 iOS 那样戴着镣铐踽踽独行。点击链接，就像摩擦神灯，将召唤出想象之外的强大魔物。

迷宫的出口暂未可知，但迎面而来的空气流动，似乎说明找对了方向。

## 一

URL Scheme 也是一种链接，和一般的超链接不同，它打开的不是一个网页，而是跳到软件内部的某个页面（比如打开特定的一篇笔记），或者直接执行一个操作（比如新建一篇笔记）。从功能上看，似乎 URL Scheme 与运行一个 Shortcuts 动作无异，既然已经有更方便的图形化自动化工具，为何还要编写晦涩的脚本？在坚持学习 URL Scheme 的自动化玩家身上，似乎能看到拉丁文研习者的身影。

事实是，URL Scheme 绝非其他任何一种自动化方法所能取代，一如想要进入更高深的殿堂，古文绝对绕不开。关键有二：

其一，URL Scheme 是 URL——它是链接，因此你可以将其融入各种场景：插在 Obsidian 笔记里，打开参考文档的任意一页（见前文）；嵌在 Anki 卡片中，方便回溯原始文本（见这篇或这篇）……这种灵活的启动方式，让许多根本和自动化没关系的软件，也能融入自动化网络。

其二，URL Scheme 远不限于单一任务，许多 URL Scheme 都可以添加参数，从而应对一簇任务。我给 IINA 播放器制作过 URL Scheme，只需更改最后几位数字，就能径直跳到视频的任何一秒，此方案稍加修改，又可以应用其他播放器。

而 macOS 上的 URL Scheme 又和 iOS 有着天壤之别：配合恰当的自动化工具，就几乎可以操控任何软件。盖 iOS 上的 URL Scheme，无论开发者如何细心，也只是在自己的一亩三分地上耕耘，但 macOS 上的不少自动化工具都可以控制其他软件，这就让许多 URL Scheme 支持不佳甚至不支持 URL Scheme 的软件，也能够用上 URL Scheme。

## 二、最佳实践：Keyboard Maestro

URL Scheme 不如说是召唤精灵的途径，就像神灯或者咒语，而魔物本身依旧是自动化动作。想要成为 macOS 自动化魔法师，就要选一个功能强大且支持 URL Scheme 的工具，而 Keyboard Maestro 当之无愧是首选。Keyboard Maestro 本身可以直接和软件菜单栏交互，也可以模拟键鼠操作间接控制其他软件，这意味着 Keyboard Maestro 是一个全能仆役。

Keyboard Maestro URL Scheme 的可靠写法如下，其中那一场串玩意儿 A85376CA\-5403\-457E\-B88F\-068AC054683A 是 Keyboard Maestro Macro 的唯一识别符，可以右键 Macro 后获取；而 \[value\] 则是 Macro 接受的参数。

```
kmtrigger://macro=A85376CA-5403-457E-B88F-068AC054683A&value=[value]
```

千万不要古板，你可以把多个参数写在一起，然后再让 Keyboard Maestro 把它们切开，例如在为 PDF 制作 URL Scheme 时，我就附上 cb2019\#9 格式的参数，井号前面的 cb2019 表示书籍的识别码，之后的 9 则是页码，两个参数组合起来，Keyboard Maestro 就知道翻开哪一本书的哪一页。

不过，Keyboard Maestro UUID 实在太长，基于此的链接也不雅观，我更习惯使用名称来召唤精灵：kmtrigger\://macro=pdfurl。惟需注意，一旦设置好，以后就不要改动了，不然以前的 URL Scheme 就会失效；此外，如果你的动作名中有空格或东亚字符，最好先将其进行 URL 编码，以免无法识别。至于编码方法，可搜 URL Encode，也可以使用\[这个 Shortcuts\]\(\(https\://www\.icloud\.com/shortcuts/dd21b399897944709577ac3a76464e56\)。

## 三、替代方案：Shortcuts

部分读者可能介意 Keyboard Maestro 要花钱，或者已经有了其他自动化工具，担心再装一个 Keyboard Maestro，会有太多功能重叠。这些我也想过，管见以我的所作所为——我为 LaunchBar、Alfred 和 Automator 各写过几百个插件——姑且不加说明地推荐 Keyboard Maestro。不过，我确实也在考虑替代方案，倒不是为了取代 Keyboard Maestro，而仅仅是作为智力体操。探索的答案近在眼前：Shortcuts。

和 Keyboard Maestro 类似，Shortcuts 动作也可以通过 URL Scheme 运行，并且同样支持添加参数。同样，Shortcuts 也可以用 AppleScript 等脚本控制其他软件。只要具备这两点，后续不过是设计 Shortcuts 动作的工程细节。

Shortcuts URL Scheme 格式如下，其中的 \[name\] 为动作名，\[input\] 和 \[text\] 分别为其接受的数据类型和具体内容。

```
shortcuts://run-shortcut?name=[name]&input=[input]&text=[text]
```

我设计过一个打开任意文件的 Shortcuts URL Scheme（由于只是 Keyboard Maestro 的替代方案，暂不确定是否有必要开源），即便原始文件被移动或重命名，此链接也固若金汤。

至于更复杂的场景，例如翻开 PDF 的某一页，理论上可以写一段 AppleScript 来模拟翻页操作，不过在已有成熟 Keyboard Maestro 方案时，Shortcuts 这边我就不再一一编写动作或脚本实例了。

## 四、小结

iOS 上的 URL Scheme，或许早已被图形化自动化工具掩去光辉；而在 macOS 上，借助 Keyboard Maestro 或 Shortcuts 等通用自动化工具，URL Scheme 几乎可以作用于任何软件，而不必仰开发商之鼻息。

如今再问 URL Scheme 有何用处，这只自动化精灵大概可以理直气壮地回答：请说出您的愿望！

🛍 我撰写的付费栏目《信息管理，文件为本位的方案》正在 UNTAG 售卖，对本文话题有进一步讨论，欢迎选购。

🔗 付费栏目链接

---

[前往标准阅读页](https://utgd.net/article/20166?audience=web)
