本文首发于 越狱指南 ,原作者  ,少数派经由原作者授权转载此文,仅对文章标题及正文版式、用词略有改动,点此 查看原文。


上篇文章 算是大略地介绍 Workflow 是什么的引文,这篇开始将要正式地使用 Workflow 了。第一篇文章将直接以大家最常用的社交网站为例来介绍 Workflow 的基础用法。

具体内容是:

  1. 把同样的文字内容一次性发送到 Weibo 或/和 Twitter
  2. 把同样的文字 + 图片一次性发送到 Weibo 或/和 Twitter
  3. 通过 Share Sheet 分享任意链接并且加上自己想说的话,然后发送到 Weibo 或/和 Twitter
  4. 将以上三步合并为一个 Workflow,执行时选择其中一个然后让 Workflow 自动进行后面的工作。

文字内容送到Weibo 或/和 Twitter

▲ 在这里用到的动作只有三个

Text

Text是最简单也比较常用的动作,最关键的是我们对它非常熟悉——「就是个输入框嘛,往里打字就可以了呗。如果你这么想就对了,这软件上手就是这么的傻瓜式——你要做的就是把想发的微博内容输入到 Text 的文本框里。

Ask for Input

上面介绍的是 Text 文本框,我们看到它非常熟悉,但是它的一大缺点是会保留上一个操作留下的内容。也就是说,你每一次通过 Workflow 发微博,都需要把上一次发的内容先删了才行。所以我实际上建议在这个 Workflow 里实用 Ask for Input 这个动作。

Ask for Input 这个动作也是 Workflow 里最常用的动作,我在 上一篇文章 也提到过它。

你把 Prompt 里填上「微博内容」,这样每次打开这个 Workflow,直接点击运行。它就会弹出个对话框让你输入微博内容。

Tweet

Tweet的动作框里,前半部分写着「Show Compose Sheet」意思是「显示内容编辑框」,后面是一个开关:

▲ 内容编辑框

如果你把开关打开,那么就是选择显示内容编辑框,这么做的优势在于:

  1. 可以看到文本(图片)内容、字数。
  2. 如果你是多账户的话,临时可以选择账户。
  3. 可以临时修改内容。
  4. 可取消该步骤

但想必你会马上意识到「我刚写好的东西有什么可修改的?」所以其实显示内容编辑框的优势并不明显。而关闭那个开关,也就是不显示内容编辑框的话,界面就会变成这样:

▲ 关闭开关

它的好处是:直接后台发送内容,省掉你点击编辑框的时间,以及等待发送成功再进行下一步的时间。

但是如果你确实有选择账户的需求,又不想看到内容编辑框浪费时间呢?Workflow 同样可以做到:按下 Tweet 动作框里选择账户的部分,你就能看到一个弹出菜单,里面会有Ask When RunClipboardInput三个选项,你选择Ask When Run,就能在动作进行到这一步的时候自动出现一个对话框来问你选择哪个账户发送。

注意,在内容编辑框里,我们需要先按一下选择账户那个位置——也就是说我们要先看一下那个位置在哪——然后再选择账户。而在 Ask When Run 这种方式下,我们是直接选择账户。

另外,记住,在 Workflow 这款软件里,凡白皆可点,每个动作框里只要有白色的区域就是可以点的,只要有菜单出现就至少能看到 Ask When RunClipboardInput 这三个选项,活用 Ask When Run 能让你做到一些你认为你做不到的事。

Share

Share 这个动作就是大家最熟悉的分享按钮了,之所以要用到它是因为 Workflow 在当前版本(1.0.1)还没有支持微博的分享功能,等到支持了应该就能和 Tweet 这个动作一样,可以在后台发送。也就是说,你只要编辑好内容,点一下发送,剩下的 Workflow 帮你做好。

文字 + 图片发送到 Weibo 或/和 Twitter

在这一步我们将谈到变量,你会发现它果然也很容易。

会发文字微博了,图文微博怎么办。在文字微博那个 Workflow 上再加几步就能做到。

选择照片

在动作列表里找到 Select Photots 这个动作,用它来选择照片。拖到你的 Workflow 里以后你会发现有个 Select Multiple 的开关,打开就能多选图片,但是 iOS 本身不能上传多图到社交网站——你可以自己试试在相册里选择多图的话,Twitter 和微博这两个选项都会不见的——所以 Workflow 以及任何通过 iOS 内置的功能去分享照片的办法只能分享一张照片。所以这个开关在这个 Workflow 关上就行了。

另外,如果你经常分享最后一张照片(或者是手机截图)的话,你可以在 Workflow 的动作列表里找到 Get Latest PhotosGet Latest Screenshots这些选项,拖到 Workflow 里试试看会有什么效果~

设定变量

终于看见「变量」这俩字了,是时候克服你从初中数学开始就对这两个字产生的恐惧了。

为了节省时间,我们要使用 Workflow 把两种不同的内容(文字和图片)作为一个整体发送出去。这一点的困难就是你得告诉 Workflow 他们俩(文字和图片)是一起的。在 Workflow 里的做法,就是:把文字放到一个变量里,把图片放到一个变量里,然后把这俩变量合成一个变量,交给 Workflow。

具体的操作是,在动作列表里找到 Set Variable 也就是「设定变量」这个动作,然后拖到 Select Photos 这一步的下面,你会发现这两个动作中间连起了一条线,这就说明 Workflow 明白了你要把你选的那张照片设为一个变量。然后你可以在 Set Variable 后面的空白处输入你想输入的东西,我在这里输入了「图片」,你可以输入「img」,它就像给这张图片起了个临时的名字,什么名字都可以,中文英文符号只要你明白就都可以。

所以你可以这样看 Workflow 里的变量——给前面那一步的结果起个名字。

添加变量

前面说到,我们在这里用变量的原因是要用 Workflow 把两种不同的内容(文字和图片)作为一个整体发送出去。所以要给图片起个名字(设个变量)、给文字也起个名字(也设个变量),然后把它俩放在一起成为一个组合,再给组合起个名字(设个新变量)。

在 Workflow 里,这个步骤要分开来做。也就是说,图片起了名字以后,直接就可以成立组合,等一会儿给文字起名字以后把他加到这个组合里就行了。这在 Workflow 里的具体做法是:

在动作列表里找到 Add to Variable 也就是「添加到变量」这个动作,拖到你的 Workflow 里,Set Variable 这一步下面,那条连接的线就又会出现,你应该已经懂得它代表什么了。同样,这个组合的名字你可以随便给,我给的是「图文」。

对文字的处理

我们现在已经把文字和组合的变量设妥了,现在要处理文字了。我们要给文字设个变量,再把文字这个变量加入到组合的变量里。具体做法是:

Set Variable 拖到 Ask for Input 下面,给它起个名字;再把 Add to Variable 拖到 Set Variable 下面,注意,这里现在要填的是组合的名字,你不能再胡给名字了

删除照片

Workflow 可以在处理完照片以后删除这张我们再也不会用的照片,在这个 Workflow 里,只要你把 Delete Photos 这一步放到 Share 这一步的下面就可以了:

Workflow 里有修改图片的功能叫做 Edit Photo,这个在分享照片的时候很实用,一般你给人看图片就会有希望让他看的那个「点」,通过 Edit Photo你就可以把你想让对方看的地方标记出来。那么你能不能在这个环节介绍的 Workflow 里加上 Edit Photo 这个动作,让你的 Workflow 更实用?

有时候人们分享图片是只想分享图片,不加字儿,但是新浪微博要求必须加字才能发微博。所以它官方客户端在只分享图片的时候的做法是自动添四个字「分享图片」。通过 Workflow 能不能做到?

通过 Share Sheet 分享任意链接发送到Weibo 或/和 Twitter

有时候你看到了一篇网站或者在你的 RSS/Read Later 客户端里读到了一篇你想分享的文章,你在 App Store 看到了一个好的 App 或者游戏,你想把它同时分享到 Twitter 和微博,通过 Workflow 也可以轻松做到。

Workflow Type

在这个环节我们要接触 Workflow Type,它只有两种,所以没什么难的。

查看 Workflow Type 的方法是在每个具体的 Workflow 的右上角寻找齿轮图标,里面是一个菜单,其中有一项是让我们选择 Workflow Type:

  • Normal 类型的 Workflow 不会出现在 iOS 的分享菜单里面,只能通过 Workflow 这个程序本身运行。前面的内容都是在 Narmal 这个类型里完成的。
  • Action Extension 类型的则可在 Workflow 程序内运行也可在分享菜单中运行(Workflow 的相应位置有图解)。我们在这里要用到它,比较强力的 Workflow 一般都要用到它。

我们选择 Action Extension 能看到 Accepts 这个选项,打开后里面有一个列表,这个列表里显示的是 Workflow 分享菜单里接受的数据类型。

我们在这里是要分享链接到微博和 Twitter,所以可以把其它的都删掉只要留下 URLs 就可以。

这其实已经是「分享链接到微博和 Twitter」这个 Workflow 的第一步——获取链接,下一步我们要做的,就是要给链接设一个变量——我在这里设置的是「链接」——好把这个链接和我们一会想发的微博放在一起。

然后下一步,我们要开始输入微博正文了,我们还是和以前一样要用到 Ask for Input ,然后给它的结果也设置一个变量,我在这里设置的是「正文」。

最后通过 Text 框把两个变量放到一起。这一步有点小技巧:当你点进 Text 框,你会发现弹出的键盘上有 Ask When RunVariable...Clipboard 这三个按钮,选择 Variable...,你就可以看出一个弹出的菜单,里面有你在前面设置好的所有变量。比如说我前面设定了选择其中的变量,就会在 Text 框里出现一个套着蓝色框的变量——这就是 Workflow 的自定义变量的表现方式

到了这一步的逻辑是,你给链接设了个变量(link),然后输入微博,给这个微博内容也设个变量(正文),最后在 Text 框里面给这两个变量排一下顺序,决定让微博内容在先还是链接在先,最后将 Text 框里的整体作为微博发送出来。所以最后不要忘记加上 TweetShare 这两个动作。

既然是分享链接(一般是文章)到社交网站,比较方便的办法其实是直接引用文中一段话作为对这个链接的介绍。所以你可以想想,能不能这个环节介绍的 Workflow 稍作改动,做一个「Clipboard+link 的 Workflow」?

如果你不只想分享链接,还想分享 Safari 里看到的文章的标题,要怎么做?试试看 Get Name 这个动作。

将以上三步合并为一个 Workflow

我们用效率软件是因为我们「懒」,所以既然懒了,就要有懒到底的精神。

现在你已经分别掌握了发送文字内容/图文内容/链接内容到微博和 Twitter 的方法。如果你三种使用情境都有的话,这就意味着你要做3个 Workflow 了。做三个 Workflow 没什么不好,唯一的缺点是「不够懒」。既然都是把东西发送到微博和 Twitter,我们能不能把它们做到同一个 Workflow?让我们做到在分享内容的时候只用这一个 Workflow,然后弹出一个菜单里面有「文字微博」、「图文微博」、「分享链接」,然后我们需要哪种分享方式就选哪种分享凡事,剩下的交给 Workflow 来处理。

答案自然是可以。在这里我们要介绍 Workflow 这款软件里复杂动作的核心内容——ListIfChoose from Menu

List——列表

我们要做的是要弹出一个菜单,里面有「文字微博」、「图文微博」、「分享链接」给我们选,所以这第一步,可以是一个列表。从 Workflow 里找到 List 拖到你的 Workflow 里,在里面分别写上「文字微博」、「图文微博」、「分享链接」,行不够了可以按添加按钮来添加行。

然后我们要从这个列表里选一样,所以要用到 Choose from List 这个动作。同样,找到它然后拖到你的 Workflow 里。因为我们选的是其中「一项」,所以可以把「Select Multiple」这个开关关闭。

然后下一步,就是选完其中一项以后,让 Workflow 知道你选的是什么,然后执行之后的操作。那么其实这里面的逻辑是:

  • 「如果」我选择的是文字微博,「那么」就让 Workflow 执行关于文字微博的操作;
  • 「或者」我选择的是图文微博,「那么」就让 Workflow 执行关于图文微博的操作;
  • 「又或者」我选择的是分享链接,「那么」就让 Workflow 执行关于分享链接的操作。

If——条件

这个「如果……那么……」在 Workflow 里就是 「If 语句」,上述的逻辑在 Workflow 里的操作是:

If 拖进 Workflow,你会发现它和其它动作不太一样。If 会带下来 otherwiseEnd If 两个配套的动作。

我们在 If 框里的「String Contains」后面,输入「文字微博」。然后在这一步的下面,把发文字微博的 Workflow 的动作——Ask for InputTweetShare 依次排好:

图片中 If 下面的内容,都会有一个缩进,它的意思就是这些缩进了的内容都是在 If 框里设定的条件达到后才会运行的。这整个一步完整的意思是:如果我们在 List——列表里选择的内容里有「文字微博」,我们就执行文字微博的 Workflow。

做好文字微博这部分了,我们反回头看 OtherwiseEnd If

如果你的 Workflow 只匹配一个条件,匹配到了就执行该条件下的内容,匹配不到就拉倒的话。你就不需要管这个 OtherwiseEnd If。比如说,你想吃苹果,不想吃任何其他水果,然后你去菜市场买苹果。这个情境用 If 来表示就是:

If 有苹果,买——Otherwise 没苹果,不买东西——End If

在发微博这个情境里,我们有三种情况。第一个 If 我们匹配了「文字微博」,第二个 If 要加到哪?加到 Otherwise 下面:

这就成立了一个新的关系:If——如果匹配到「文字微博」,就执行文字微博的 Workflow;Otherwise If——或者匹配到「图片微博」,就执行图片微博的 Workflow……所以相信剩下内容已经不用再说了,包括最后一个「分享链接」的 Workflow 你也应该知道该怎么办了。

Choose from Menu——从菜单中选择

通过 ListIf,你已经做到了把 3 个同类 Workflow 合并到一起,它们两个的合作还会有更多强大的功能。但是,在我们这个「分享微博」的 Workflow 里,它们不是最合适的。因为 If 只是匹配我们在 List 列表里选出的结果的内容的字符,不是我们想要的「选了菜单的某一项就自动进行这一项下的内容」,两者有本质上的不同。

最合适这个 Workflow 的功能是 Choose from Menu

把动作拖到你的 Workflow 里,在菜单填上「文字微博」、「图文微博」、「分享链接」,然后相关部分的名字自然也会发生改变,然后你可以在「文字微博」这一项目下做你的文字微博的 Workflow ,在「图文微博」的条目下做图文微博的 Workflow……

Choose form Menu 在这个分享微博这个需求下明显直观许多,也比 If 要精确。但也正因如此,它没有 If 的应用面广。在 Workflow 里,做出来一个能运行的 Workflow 是第一步,找到最适合它的动作把它优化到最简单最直观是终极目的。

为什么用这种办法发微博?

  1. 方便
  2. 减少干扰
  3. 减少对别人的干扰

方便

如果通过 Workflow 做某件事不如用以前的方法简便,就不要用 Workflow。

在「同时发送微博和 Twitter 」这个情境下,使用 Workflow,你就不需要分别打开两款软件的微博客户端,不需要等待客户端的读取,不需要看某些客户端的启动广告,然后不需要去点击编写按钮,甚至不需要去点击发送按钮;在分享链接的情况下,你不需要去点 Safari 的地址栏去全选链接,然后再复制链接,然后再分别打开两个客户端,重复前面提到的动作……高下立判。

减少干扰

微博客户端不只是个分享内容的地方,还是个浏览内容的地方。所以它的问题在于,你虽然最初是只想「发一条微博」,但开了微博客户端以后,你就不只是发微博了,你的 Timeline 吸引着你,瞥了一眼搞笑图片结果「哈哈哈哈哈」个不停,一不小心一个小时就没了,说不定最初你想发的那条微博都没发出来。

减少对别人的干扰

其实如果只是图方便,用 IFTTT 也可以做到,而且好像比 Workflow 还简单些。但是 IFTTT 是无条件地将一个服务的所有内容全部转到另一个服务,这点很蠢,更重要的是这样很骚扰人。如果你的微博昵称跟 Twitter 的用户名一样,当那些用 IFTTT 的人用微博和 Twitter 中的一个服务 at 你,另一个服务就也会 at 你。此外,你在微博转发一条内容 IFTTT 会把你说的话同步到 Twitter 但不会把你转发的原微博同步到 Twitter,所以如果你 Fo 了一些用 IFTTT 的人,你会看到他们总是在说一些摸不着头脑没有上下文的话。

如果你希望同时把内容微博发到微博和 Twitter,你就要首先学会取舍。这里有一个很简单的逻辑,如果你两个地方说的话都永远一样,那别人(除了表示关系好以外)有什么必要两个地方都 Follow 你?你可能会说你的粉丝里有那种只用其中一种服务而不用另一种服务的人,这点其实没那么有必要担心,只要用 Twitter 的人,几乎都会用微博。相信我,那些故意不用微博只用 Twitter 的中文 microblog 使用者,不太会在意一个用 IFTTT 无筛选地同步所有内容的人所发的东西。

与 Launch Center Pro 比较的优势

使用 Launch Center Pro 时间久的朋友应该都知道通过 Launch Center Pro 也是可以做到分享文字+图片或纯文字内容到 Weibo 和 Twitter 的。@饺子如何是好 就曾做过一个 Launch Center Pro 的 动作 来完成这两个功能。

你可以点开网站看一下那个 URL Schemes 。它和 Workflow 到底谁简单我们另论,且说功能本身,与 Launch Center Pro 相比,Workflow 在这个动作上就有至少两个优势:

第一:我们总会遇到那种想发到微博或 Twitter 其中某个地方而,由于 Launch Center Pro 不支持 x-cancel,所以如果你是按照先发推后发微博的顺序写好 Url Scheme 的话,你就不能临时取消发推这个动作,因为一旦你取消发推的话,动作就被中止了,后面发到微博的那一步就不会执行了。而 Workflow 则能够中断其中一步而执行下一步。换句话说,比如你习惯了通过 Workflow 来发送原创微博,有些内容你不想发到 Twitter 只想发到微博,那你可以在 Workflow 里取消发送到 Twitter 而进行下一步发送到微博的操作。

第二:Workflow 支持分享插件,这一点是非常聪明的,它让 Workflow 直接渗透到了 iOS 的各个角落。

复习

读完这篇文章,你应该熟悉的关于 Workflow 的内容有:

    • Text 文本框
    • Ask for Input 功能(以及它和文本框的区别)
    • Tweet 功能(Show Compose Sheet 开或关有何不同?)
    • 凡白皆可点
    • Ask When Run 的作用以及何时使用
    • Set Variable 设定变量
    • Add to Variable 添加到变量
    • 部分关于图片的动作
    • Workflow Type & Action Extension
    • List 列表
    • If 条件
    • Choose From Menu 从菜单中选择

Workflow 系列文章