# Shortcuts 聚合扫码，自我迭代的一种方案

> 本文公开全文。

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

注：本文系基于《聚合扫码，用一个 Shortcuts 动作统一常用软件的扫码入口》一文的改进，正则匹配字典键等本文未提及的原理及技术细节，请参阅之。

理想的“聚合扫码”，看见任何二维码无需做“该用什么App扫”的判断，打开快捷指令，镜头怼上去即可，自动跳转一气呵成，不用投入任何思考成本。但原动作美中不足之处在于，遇到陌生的二维码，动作本身便不可持续，需要撇开快捷指令，重回“在一堆软件中挑挑拣拣”的老路；若该二维码有复扫需求，还需抽空手动查询扫码日志，将特征URL段加入字典。

针对如上问题，如果动作可以引入容错机制（遇到初次扫描的二维码时允许手动选取扫码应用以维护动作的连续性）以及学习机制（可以将扫过的二维码的特征URL自动加入字典），则上述困扰得以缓解，遂有此文。

\>\>Shortcuts 动作下载\<\<

# 原理简析

新动作把原动作的一个字典扩展到了两个字典：

- 第一个字典，以扫码所得的URL的特征段为键，以App名称\-备注为值，存储于/iCloud/Shortcuts/qrDict\.txt文档中，每次运行快捷指令时读取；

- 第二个字典，以App名称为键，以该App扫码界面的URL scheme为值，写在快捷指令内部。

当系统扫码器获取到一个二维码的URL时，先与字典1的所有键组合成的pattern进行正则匹配：

如果其特征段（其实就是链接的开头）已被收录在字典1中，则可以获取到对应的字典值App名称\-备注，对结果进行字符串分割得到App名称，通过字典2获取URL scheme，打开对应软件扫码界面；

如果特征段没有被收录，则在字典2的键里手动选取用于扫码的App名称，获取其URL scheme后打开软件进行扫码。同时，向用户请求输入此二维码的备注，与扫码所得的URL的特征段、App名称组合，写入qrDict\.txt，以便下次调用。

## 使用方法

### 初始化以及外挂的字典文件

本文的方案采用了外挂文件构造字典的方式，如果外挂的文件不存在，直接运行动作会报错。因此，在使用以上动作前，请先运行一次以下动作用于创建外挂的字典文件。

\>\>用于初始化的动作\<\<

文件创建完毕后，即可删除本动作。

当然，你也可以手动在iCloud的Shortcuts目录下创建文件名为qrDict\.txt的文档，文档内容粘贴以下文本：

```
  "URLPattern": "AppName-YourComment",
  "wxp://": "微信-付款",
  "https://qr.alipay.com/": "支付宝-付款"
```

此处多此一举地提示可以手动创建，实是为强调该文件为纯文本格式，后续维护时可以用任意一款文本编辑器直接打开进行编辑。

### 扫描及添加新二维码

上一步创建的外挂文件中已写入了最常用的微信和支付宝扫码的URL，但现代人生活中常见的二维码恐怕远不止这两个。第一次扫描某二维码时，正常运行动作即可。如果其特征段没有被收录在字典1中，动作会弹出一个扫码App的选择框，选中对应项即打开对应扫码App；唤出扫码App后，动作会弹出询问框，此时可手动填写该二维码备注（备注的存在是为了便于后续对qrDict\.txt文件的维护），进而以"URLPattern"\: "AppName\-YourComment"的格式收录该二维码。

如果不想把该二维码收录进字典，可以在填写备注框点击取消，直接退出。

## 添加新应用

除支付宝、微信外，美团等应用也可能为部分读者所必需。添加新的扫码App相对要复杂一些，需要进入Shortcuts动作编辑页面，在字典2中手动添加字典项：仿照已有项目，键为App名称，值为App扫码界面对应的URL scheme。

## 小结

“让原本不方便的事变得方便”这一行为本身有其成本，如果能将这种成本降至最低，则更能享受到“便捷”的福利。

---

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