Workflow现状

尽管Workflow早先已经内置了同步服务,并在版本1.6中完善了其分享社区Workflow Gallery,以便新手快速上手,但是依然存在以下缺点:

  1. Workflow的同步服务侧重于多设备之间的同步,主要用于保证各设备使用的一致性,而难以用于备份,更不用说恢复自己workflow程序的历史版本了;
  2. 如果向朋友、亲人推荐该app,但他们不擅长使用程序相关的应用,并且在英文面前望而却步,则新版Workflow Gallery的作用实属有限。

尽管针对第一点,少数派已有一解决方法用于备份和恢复:Workflow 教程(六):如何备份恢复你的 Workflow 动作,但是该方法利用的是Workflow的分享服务,每次的备份都要进行多次上传,每次的恢复都要进行多次下载,动作较为繁复,效率实属有限。

那么本文将提供一种极其快速便捷的方式,用于实现备份、恢复、导出、导入功能。

Data URI

在继续下去前,我们需要先简略了解Data URI的相关知识,这是本文所有功能得以实现的核心。本人也是无聊改CSS时突然想起这个东西可以用在Workflow中。

功能

Data URI在1998年的RFC 2397规定中被定义。作为一种特殊的URI,它能够代替常规的URI,将一些小数据直接嵌入文档中。比如在CSS样式中若要引用图片,可以对图片进行编码处理转换成Data URI,再嵌入CSS中,如此CSS相当于内含了一个图片文件,无需下载即可实现图片的本地引用。

格式

Data URL的基本格式如下:

data:[<mediatype>][;base64],<data>

主要分为四部分:

  1. data: :该部分为Data URI的URL Scheme,固定不变;
  2. [<mediatype>]:该部分指明编码的数据类型,如text/plain,text/html,image/jpeg等;
  3. [;base64]:该部分指明数据的编码与否,对于纯文本数据可以仅进行常规的URL Encode,该部分留空;对于图片等数据应进行Base64编码以用字符串表示数据,该部分填上";base64";
  4. <data>:数据部分,数据转化为字符串存储与此处。

应用

废话半天下面步入正题。

在Workflow的Developer页面中,开发者定义Workflow的Import URL为如下格式:

workflow://import-workflow?url=[url]&name=[name]&silent=[true]

打开以上形式链接即可实现Workflow导入。其中有3个query,[url]为Workflow的下载直链,[name]为workflow导入后使用的名称,silent=[true]决定导入完成后是否跳转。

Data URI应用的地方就是[url]这个位置,插入后即可将.wflow文件,即Workflow的程序文件嵌入该链接中,无需从它处下载即可进行导入工作。

由于Data URI中 [<mediatype>] 这一部分用于客户端对数据进行识别并进行相应操作,而.wflow文件显然还没这个资格获得一个规定的专属MIME type,这里按基本格式瞎填即可,想正式点就填application/x-workflow等,图省事就干脆留空,不影响使用。如此我们可以将一个workflow文件的Data URI表示为:

data:;base64,<data>

通过使用Base64 Encode动作对.wflow文件进行编码,再粘贴至<data>部分,即可构成完整的.wflow下载链接,然后再将其插入Workflow Import URL的[url]部分就大功告成了!

实例一:备份workflow

iCloud是个存储备份文件的好地方,它有多设备同步功能,这样无论从哪台苹果机器上你都可以访问到备份文件,并且iCloud会将文件存储在本地,便于快速访问。

0f0575448fe34f6bb6ccb0cae0e2ff28.png

点击下载:Workflows Backup

IMG_3658.png

功能

该workflow抓取你的所有workflow,打包成zip压缩包并存储至Workflow的iCloud文件夹。这样无论你有多少个workflow都可以一次点击全部备份,而只花费1秒钟不到的时间。

如此,比如说你在编辑制作一个大型workflow时,不小心搞砸了,而你先前正好通过此workflow进行了备份,那么就和玩RPG游戏一样可以随时还原重来了。

注意

唯一需要注意的地方是iCloud Folder这块,如果你没有在iCloud中创建Backup文件夹,请改为其它地址,或干脆留空以设为Workflow根目录。若要创建专门用于存放备份文件的文件夹,请访问iOS上的iCloud App创建,因为Workflow无权限创建iCloud文件夹,文件夹不存在会报错。

实例二:恢复Workflow

了解了Data URI相关知识,这个workflow就很容易实现了。

9f0dd23b4a664dcea9ea24a4bcdae99c.png

点击下载:Workflows Recovery

355392.jpg

功能

该workflow从iCloud中抓取Workflows Backup创建的备份压缩包,解压后供你选择要还原的workflow,最后通过Data URI的相关应用将旧workflow快速导入Workflow App中,替换还原,瞬间完成。

同时能显示备份距今时间。

得益于Workflow 1.6更新的Choose from List动作,列表能够详细显示每个旧workflow的图标、信息。选完后点击Replace进行替换恢复。

注意

需要注意的是在Workflows Recovery开头的Get File动作中,备份文件的名称请与Workflows BackupMake Archive动作中的填写一致。

实例三:导出Workflow

如本文开头所述,新版Workflow Gallery对于广大中国用户的实际作用有限,不适合厌恶英语的人群,不接地气,那么我们可以通过一些本土渠道比如微信进行workflow的分享,保证所有人用得舒心。

Workflows Export基于Workflows Backup稍微修改而成。

9609f8d7edde4f94b39134169182003c.png

点击下载:Workflows Export

355397.jpg

功能

抓取所有workflow,供你选择要分享的部分,打包后用微信等通讯工具分享。

分享后,对方可以使用下面的实例四进行快速导入。

实例四:导入workflow

本workflow为Share Extension,在通讯软件中对.zip压缩包点击分享按钮后调用,比如在微信中点击用其他应用打开。

Workflows Import基于Workflows Recovery修改而成。

33a8b1bb8b5d4e0aa07d9e126cdb645b.png
点击下载:Workflows Import

355406.jpg

功能

同样是利用了Data URI,Workflows Import将你分享的压缩包解压并循环导入所有workflow。只需一次点击即可完成工作(得益于Import URL中silent参数的使用)。

注意

请确保导入者的机器中没有和分享的workflow同名的文件,不然导入动作会在碰到同名文件时中止,弹出对话框要你选择是否Replace。

考虑到该workflow的受众主要是新手,他们的机器中想必没有多少,或者说没有同名的workflow,我觉得导入中断这个事这不是个问题。实在不行请让导入者将自己的Workflow先清空,或者稍微修改下Workflows Import,改改导入后的名称确保不重名即可。

结语

除了对.wflow文件的处理外,Data URI在其它地方也有特殊的运用,比如可以写一个workflow通过这种URI在iOS中导入字体文件。还请各位自行发掘。