article_image

快递发展那么多年,没想到输入收件地址依然那么麻烦。

菜鸟、顺丰、中通、圆通等快递公司山头林立,每家公司还韩信点兵,独立 App、支付宝小程序、微信小程序多多益善,再整出帐号、手机等各种登录方式,结局就是碎片化,永远不知道谁记住了我的常用地址——当然,还有个选择是对它们公开整个通讯录,但估计稍微有点隐私意识的读者都会考虑再三。这也难怪,我分明好几年没搬家,每次朋友给我寄东西时还是习惯问我讨地址。

各立山头的小程序靠不住,开放通讯录又让人有所顾虑,剩下的选择只有自己做一个地址调用工具(不包括每次发微信讨地址)。这个思路看似不自量力,但毕竟,Shortcuts(快捷指令)这类自动化工具的可能性只受限于想象力,做一个“地址名片夹”其实不难。

Alt text
快速调用联系人的收件地址

上图就是我做好的地址名片夹。可以将动作图标搁在桌面上,使用时点击运行,就能像翻名片夹一样浏览通讯录中联系人的的收件地址;如果某位朋友有多个地址或电话,还可以进一步手动选择。选好后,姓名、地址带上电话一起拷贝进剪贴板,粘贴到快递小程序里就能智能识别。

注:本动作在最新系统中可能需要授予通讯录权限。

在 Shortcuts 动作中显示联系人头像

用 Shortcuts 做一个列表不难,但是要把列表做得好看则要动点心思。“名片夹”的特点是图文并茂、能看到联系人头像,绝非黑白单调的文字。回想一下微信通讯录,绝大多数朋友肯定都有标志性的头像,没有头像或者头像是通讯录图标的家伙看上去反而可疑。

Alt text
名片通常有头像和姓名

简言之,有个头像,容易认人。收件地址的数据来源是通讯录,包括头像在内的信息都从通讯录中提取,需要考虑的是这些信息的呈现方式。添加一个“Find Contacts”步骤,并设置过滤条件为“Street Addresses contains”,即可找到所有带有收件地址的联系人。

Alt text
过滤出所有带有收件地址的联系人

类似的展示效果,也见诸《让 iPhone 通讯录中的中文联系人按拼音顺序显示(Shortcuts)》一文,欲求之,则需要一点预备知识,认识一下 Shortcuts 中的变量类型,放心,不会像编程那样复杂。所有变量——就是 Shortcuts 里那些一粒一粒、带有圆角矩形边框、长得像胶囊的玩意儿——都有数据类型,随便点开一个变量,比如本动作中第二步的变量“Contacts”(通讯录),可以看到它的数据类型就是“Contact”。点击“as Contact”可以变更其数据类型,常见的有“Text”文本、“Rich text”富文本、“vCard”名片,等等,如果把“Contact”改为“Text”,就真的只能看到联系人姓名而瞧不见头像了。

Alt text
指定变量类型为 Contact(联系人)

顺便说一句,只有没想到的用法,没有毫无用处的变量类型,例如前述的 vCard,就可以用于将导出为跨平台通用的名片文件,方便迁移通讯录到其他设备。

Shortcuts 遇到不同类型的变量,显示效果也有差异。同样是“Choose from list”(从列表中选择),如果是一系列文本,就只呈现为黑白的文字列表;如果是图片,则展示九宫格视图;而遇到“Contact”这种图文混合的变量,就会在列表每行左侧显示缩略图,右侧显示文字标题,这正是本文所期望的“名片夹头像”效果。

还有一个更有意思的机制,Shortcuts 的列表显示效果是“就高不就低”,如果将图文混合的变量和单纯的图片放在同一个列表里,图片也会呈现为缩略图加标题的样式。以后我们将介绍另一套“二维码名片夹”,用于汇集微信、支付宝和社交媒体上的常用二维码,它就利用了 Shortcuts 的列表显示机制。目前为止,只需要知道选定“Contact”变量类型,就能够获得类似通讯录名片夹的显示效果。

获取姓名、地址和电话信息

方才的步骤用于选中联系人,而最终目的是得到一串“姓名+地址+电话”的文本,以便各种快递小程序智能识别。为了获取这些信息,又要回到变量的话题上。

变量的潜力不仅在于其数据类型多变,也体现在它丰富的属性上。在调整变量类型的按钮(即“as 某某类型”)下方,列着一串当前变量的属性,随便勾选一个,就能将对应的信息从变量里面抽出来。举个例子,通讯录中有位朋友“马杰克”,其属性通常会包括“Last Name”(姓)、“First Name”(名),在文本框中添加两次这个联系人变量,再分别勾上姓名,就能获得 马杰克 这段文字。剩下的地址和联系电话也是如法炮制。

Alt text
在变量属性中抽取联系人姓氏

考虑到部分联系人有多个联系地址,我在 Shortcuts 动作中做了一些简单的逻辑判断,以便遇到这些情况时手动选择。具体步骤乏味枯燥,这里就不展示。

一旦掌握变量类型和变量属性,还可以做更多有趣的事情。在本文动作的基础上稍作修改,就可以做一个“附近有哪些朋友”的动作,每次去一个新城市都可以列出同城好友(思路比较简单,获得当前所在位置,然后去通讯录中查找一番即可),熟络熟络旧交;也可以按照所属单位过滤好友,制作公司同事通讯录,等等。

变量类型和变量属性不仅是制作动作的素材,也是诊断失效动作的良药。每次 Shortcuts 升级,部分变量的数据类型或属性就会发生改动,导致一部分动作无法使用。最容易被殃及的就是“If”这一步骤,我曾经做了一个 Kindle 摘抄动作,其中有一步需要判断“是否已经包含标题”并由此避免重复摘录,问题是此处的“If”有个前提,即默认检验的对象是一段文本(Text),毕竟文本才有“包含(Contain)”一说,如果是一张图片或一段视频,就说不上“包含”(Shortcuts 可没有聪明到会主动识别图中文字)。事故就是这么出现的:升级后的 Shortcuts 自作主张改掉了我原有变量的数据类型,导致后续的“If”步骤拔剑四顾,茫然无措。

数据类型和数据属性错误非常隐蔽,几年里修了上百个动作的惨痛教训告诉我:找不到其他问题时,就检查每一步、尤其是“If”之后的所有变量,死马当活马医。

小结

长期以来,我一直把 Shortcuts 视作自动化动作的加工厂,而遇到点芝麻绿豆大的事情就往工厂里跑(大部分动作都要打开 Shortcuts 才能运行),实在很别扭。iOS 14 对桌面动作图标网开一面,不必再跳转到 Shortcuts,至此桌面动作终于成为了独立的工具,而非通往工厂的售票窗。

调取收件地址就是桌面动作的一次简单应用。既然是“调取”,自然是越趁手越好,桌面这一黄金位置当仁不让。顺着这一思路,其他适合“调取”的数据——例如支付宝付款码、健康码、微信名片——也可以做个 Shortcuts 动作图标、摆上桌面。我曾经做过一个汇集微信、支付宝、微博、Instagram、Twitter 等帐号名片的动作,点击后即弹出名片列表,选中帐号可以显示二维码名片大图,整个过程酷似翻阅名片夹。


author_avatar

Lawyer, macOS/iOS Automation Amateur