article_image

在初学者眼中,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》1之后的大量实践(以及大量文章)让我确信,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 就知道翻开哪一本书的哪一页。

Alt text
点击链接打开 PDF 页面

不过,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 的替代方案,暂不确定是否有必要开源),即便原始文件被移动或重命名,此链接也固若金汤。

Alt text
E652D48C-F494-452F-8774-2142BC8508DD-58015-00019AC675D91EDA

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

四、小结

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

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

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

🔗 付费栏目链接


  1. 为了和 iOS 上的 URL Scheme 区分,我以前习惯将其称为“Deep Link”,不过在两个平台日渐交融的大背景下,这样已无必要。

author_avatar

Lawyer, macOS/iOS Automation Amateur