# 用 Shortcuts 调用联系人的收件地址，兼顾便捷与隐私

> 本文公开全文。

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

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

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

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

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

- Shortcuts 动作下载

- GitHub

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## 小结

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

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

---

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