Matrix 精选

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


最近换了新手机(iPhone12 Pro),在给手机重新安装应用,重新跑起每天的工作流的时候,发现了一个对我自己来说比较不方便的地方,

此前我用的是奇妙清单来管理我的日常工作和计划。奇妙清单的日历订阅可以同步各个平台。后来奇妙清单被 Microsoft 收购,我也换成了 Microsoft TO DO。总体上来说,两款应用在使用上几乎没有区别。不过在同步日历项这件事上,真是非常痛苦。我喜欢在工作一开始时规划整天的工作,然后回家后可以在日历项里看到自己一天内完成的项目,这是一件很有成就感的事情。不过换成了 Microsoft TO DO 后,无法同步日历项成为了心中永远的痛。

 

这里说一下背景,我的设备分别是苹果手机、Mac 笔记本以及 Windows 台式机。平时工作用的是 Mac,回到家里常用的是 Windows 。同时,由于通过 Siri 添加一个提醒事项实在是太方便了,但是 Windows 平台无法使用。我就想着能否将 iOS 的提醒事项和 Microsoft TO DO 打通,然后再想办法把待办事项记录到日历中。于是昨天花一个下午的时间研究了一下,跑通了整个流程,虽然有些小缺陷,不过总体上效果还是比较满意的。下文介绍我的折腾过程,如果有更好的方案,欢迎朋友们在评论区里指出~

TO DO 和 iOS 提醒事项的双向同步

首先要解决的事情是 TO DO 和 iOS 提醒事项的双向同步。预期实现效果为我在 TO DO 里记录一个待办,可以同步至 iOS 提醒事项,反之亦然。这一步是为了后续待办事项能够同步到日历中的一个关键,(如果不用 TO DO 也是可以的,只是我的任务大部分都在 TO DO 上规划,迁移成本比较大)。

需要明确你的 TO DO 账号和你的 Outlook 邮箱账号是一致的,只有符合这个要求,才能同步。首先我们到 iOS14 的「设置」-> 「邮件」-> 「账户」-> 「添加账户」里添加你的 Outlook 账号。添加完账号后,记得把 日历提醒事项 的同步打开:

image-20201206150119263
添加 Outlook 账户

然后回到设置界面,找到「提醒事项」-> 「默认列表」,在这里把列表改成 Outlook 下面的列表。

image-20201206150349548
设置默认提醒事项列表

到这一步,已经能够实现 iOS 的提醒事项和 Microsoft TO DO 的双向同步了。可以试试通过 Siri 来记录提醒事项:「Siri xx 点的时候提醒我 balabala」。只需一点同步的时间,就能在 TO DO 里看到对应的待办事项了。(虽然不支持子任务,不过大部分情况下足够了)同时,你在 TO DO 里建立的任务,也会很快反应到 iOS 的提醒事项中,实现了双向同步。

iOS 提醒事项同步至微软日历

完成了上述操作后,我们需要把 iOS 提醒事项同步至日历中。首先,跟提醒事项一样,我们需要修改默认日历为 Outlook 的日历,后续日历项添加后才会同步至微软的日历中。进入 iOS 设置界面,找到「日历」-> 「默认日历」,将其修改为 Outlook 日历:

image-20201206152832265
设置默认日历项

第二步,需要把提醒事项里的事项同步到日历中。这一步是最麻烦的,我目前找到了三种办法

  1. 用 IFTTT 同步,创建一个 applet,如果有「任何新的提醒事项」就「创建一个日历项」。但是可自定义程度不高(比如改变状态),我就没有继续了。
  2. 用 scriptable 来实现,可以参考:《真香!自动同步ios的提醒事项和日历,显示日打卡内容》
  3. 用 JSBox 来实现,本文介绍的是这种方法(因为脚本是我自己写的 :-D)

代码我已经开源 ,可以用 Safari 打开这个 链接 下载脚本并安装至 JSBox 。这里就不解读源码了。说一下脚本的实现逻辑:

  1. 首先读取一个月内的提醒事项,并且需要有指定提醒日期的(没有的话会有非常多干扰项)
  2. 读取一个月内的日历项。二者进行比对,如果发现日历项里不存在某个提醒事项,就根据提醒事项指定的提醒日期、时间创建一个日历项。如果发现提醒事项已经存在,就根据提醒事项的状态(比如已完成),更新日历项的完成时间。

注意,这相当于是一个一次性写入的过程,并不会因为日历项的删除而同步待办事项的删除,因为日历项里有一些并非是待办事项。

那么问题来了,这个同步的过程要怎么触发?聪明的你应该能想到,苹果的「快捷指令」。首先,你可以选择手动触发,那么可以通过快捷指令运行这个 JSBox 脚本。但是这样依然很麻烦,有没有自动的方案?有,用「自动化」。

打开「快捷指令」,选择第二个 tab「自动化」,添加一个自动化。这个自动化逻辑是,当我们关闭提醒事项这个 app 的时候,自动同步提醒事项内容到日历去。下面介绍这个自动化的创建步骤:

  1. 点击自动化页面右上角的「+」进入创建界面
  2. 点击「创建个人自动化」
  3. 找到「App」这一项,这一项的说明是「例如:“打开或关闭‘天气’时”」,点击进入
  4. 然后我们在 App 选择的时候选择「提醒事项」,下面触发条件的选择「已关闭」,这个的意思是当 「提醒事项被关闭时」,这个自动化将会被触发:
image-20201206155420139
自动化设置

5. 然后进入下一页后,我们选择具体要执行的动作,这里直接选择「运行JSBox脚本」,找到「SyncToDo」这个脚本。注意有个小细节,如果运行的时候不想打开 JSBox,可以把这里的「运行时显示」给关闭:

image-20201206155701398
关闭 运行时显示

OK,至此,我们已经能够实现整个工作流了。我现在可以在任何一台设备上的 TO DO 添加我的任务,就可以同步至 iOS 的提醒事项。只要一关闭提醒事项,我的 iOS 日历、微软日历就都能获得我的待办事项了:

iOS 日历同步提醒事项后的结果
image-20201206143459001
微软日历同步后的结果

程序猿改变世界,耶。

小彩蛋

文章到上述已经把流程介绍完了,不过还有一个小 trick 也想分享给大家,可以看需要自取哈。

上文中我们设定了每次在退出「提醒事项」的时候,自动同步信息过去。由于使用的是快捷指令的自动化,每次运行的时候虽然不会打开 JSBox ,但是通知栏会有一个快捷指令正在运行的通知。我希望同步都是「偷偷地」进行的,不需要每次都来提醒我,因此我想着把快捷指令的通知给关掉。就在我按正常思路去关闭快捷指令的通知时,发现苹果居然把快捷指令的通知设置入口给藏起来了!好在万能的搜索引擎让我找到了一种方法:

  1. 打开设置,进入「屏幕使用时间」
  2. 点击「查看所有活动」
image-20201206160427453
屏幕使用时间

    3. 然后把顶部的时间范围选择「每周」

    4. 页面拉到最下面,有个「通知」的区域,在这里的 APP 列表中找到「快捷指令」,点击进入,就能看到快捷指令的「通知」设置了,关闭即可。

不过需要注意的是,关了之后,我也没有找到办法再打开,所以有需要的朋友自取哈~