Workflow现状
尽管Workflow早先已经内置了同步服务,并在版本1.6中完善了其分享社区Workflow Gallery,以便新手快速上手,但是依然存在以下缺点:
- Workflow的同步服务侧重于多设备之间的同步,主要用于保证各设备使用的一致性,而难以用于备份,更不用说恢复自己workflow程序的历史版本了;
- 如果向朋友、亲人推荐该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>
主要分为四部分:
- data: :该部分为Data URI的URL Scheme,固定不变;
- [<mediatype>]:该部分指明编码的数据类型,如text/plain,text/html,image/jpeg等;
- [;base64]:该部分指明数据的编码与否,对于纯文本数据可以仅进行常规的URL Encode,该部分留空;对于图片等数据应进行Base64编码以用字符串表示数据,该部分填上";base64";
- <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会将文件存储在本地,便于快速访问。
点击下载:Workflows Backup
功能
该workflow抓取你的所有workflow,打包成zip压缩包并存储至Workflow的iCloud文件夹。这样无论你有多少个workflow都可以一次点击全部备份,而只花费1秒钟不到的时间。
如此,比如说你在编辑制作一个大型workflow时,不小心搞砸了,而你先前正好通过此workflow进行了备份,那么就和玩RPG游戏一样可以随时还原重来了。
注意
唯一需要注意的地方是iCloud Folder这块,如果你没有在iCloud中创建Backup文件夹,请改为其它地址,或干脆留空以设为Workflow根目录。若要创建专门用于存放备份文件的文件夹,请访问iOS上的iCloud App创建,因为Workflow无权限创建iCloud文件夹,文件夹不存在会报错。
实例二:恢复Workflow
了解了Data URI相关知识,这个workflow就很容易实现了。
点击下载:Workflows Recovery
功能
该workflow从iCloud中抓取Workflows Backup创建的备份压缩包,解压后供你选择要还原的workflow,最后通过Data URI的相关应用将旧workflow快速导入Workflow App中,替换还原,瞬间完成。
同时能显示备份距今时间。
得益于Workflow 1.6更新的Choose from List动作,列表能够详细显示每个旧workflow的图标、信息。选完后点击Replace进行替换恢复。
注意
需要注意的是在Workflows Recovery开头的Get File动作中,备份文件的名称请与Workflows Backup中Make Archive动作中的填写一致。
实例三:导出Workflow
如本文开头所述,新版Workflow Gallery对于广大中国用户的实际作用有限,不适合厌恶英语的人群,不接地气,那么我们可以通过一些本土渠道比如微信进行workflow的分享,保证所有人用得舒心。
Workflows Export基于Workflows Backup稍微修改而成。
点击下载:Workflows Export
功能
抓取所有workflow,供你选择要分享的部分,打包后用微信等通讯工具分享。
分享后,对方可以使用下面的实例四进行快速导入。
实例四:导入workflow
本workflow为Share Extension,在通讯软件中对.zip压缩包点击分享按钮后调用,比如在微信中点击用其他应用打开。
Workflows Import基于Workflows Recovery修改而成。
点击下载:Workflows Import
功能
同样是利用了Data URI,Workflows Import将你分享的压缩包解压并循环导入所有workflow。只需一次点击即可完成工作(得益于Import URL中silent参数的使用)。
注意
请确保导入者的机器中没有和分享的workflow同名的文件,不然导入动作会在碰到同名文件时中止,弹出对话框要你选择是否Replace。
考虑到该workflow的受众主要是新手,他们的机器中想必没有多少,或者说没有同名的workflow,我觉得导入中断这个事这不是个问题。实在不行请让导入者将自己的Workflow先清空,或者稍微修改下Workflows Import,改改导入后的名称确保不重名即可。
结语
除了对.wflow文件的处理外,Data URI在其它地方也有特殊的运用,比如可以写一个workflow通过这种URI在iOS中导入字体文件。还请各位自行发掘。