在 iOS 主屏幕上添加 iCloud 文件快捷方式

2018-12-04

文件操作是 iOS 长久以来让人感到「别扭」的功能弱项。究其原因,很大程度上是 iOS 的文件操作逻辑与桌面系统截然不同:同样是打开一个文档,在桌面端,第一步通常是在文件管理器中找到文档本身,然后再考虑用什么程序打开它;而到了 iOS 上,操作顺序则完全相反——先是打开应用,然后才是找到需要的文档。

这种操作逻辑是 iOS「沙盒」机制的产物。在早期版本的 iOS 中,应用的读写权限被严格限制在其特定的文档目录内,因此打开应用就成了任何文件操作的必经步骤。较新版本的 iOS 略微放松了限制,允许应用读写 iCloud Drive、并通过 Document Provider 扩展相互访问文档,但仍然没有从根本上改变 iOS 的文件操作逻辑。观察 iOS 的「文件」应用的呈现方式,会发现每个应用仍然被赋予了一个独立的文件夹,并且和用户创建的其他文件夹是平级的。这体现的还是一种以应用为中心的思路。

问题在于,**我们的工作很多时候不是以应用为起点,而是以项目为起点的。**试想你正在撰写一篇文章或者复习一门课程——执行一个「项目」。在电脑上,我们会很自然地为这个项目建立一个文件夹,把相关文件都放入其中。工作时打开这个文件夹,就能很方便地随手调取各个文件。然而,这种顺理成章的操作在 iOS 上并没有对应的实现方式。即使相关文件都存放在同一个文件夹内,你仍然需要分头在各个应用中打开它们。且不论低下的效率,这也是对思路和注意力不必要的干扰。

能不能在 iOS 现有的框架内提高访问文件的效率呢?不妨考虑把主屏幕的空间利用起来。尽管 iOS 设备越做越大,它们的主屏幕却仍然只是个应用启动器,未免显得过于浪费。如果能把经常访问的文件放在主屏幕上,点击即可打开,就能省下很多打开应用—寻找文件的繁琐步骤;不仅如此,还可以像整理图标一样,将同属一个项目的文件放进一个文件夹里,从而在很大程度上模拟我们在电脑上的操作习惯。

本文方法实现的效果

在上图所示的效果中,我们将一个 iCloud Drive 中的 Numbers 表格文件放到了主屏幕上,并使其显示为 Numbers 应用的图标。可以看到,点按图标后,系统直接跳转到 Numbers 应用并打开了这个表格文件。

实现这样的效果需要解决两个问题:第一,如何让 iOS 直接跳转到特定文件;第二,如何在主屏幕上创建能跳转到文件的自定义图标。下面我们依次解决这两个问题。

第一步:获取文件链接

(**注:**下述步骤的前提条件是文档存放在 iCloud Drive 中,因此请先确保启用了这一功能。对于 macOS/iOS 跨平台使用而言,最好还能打开 macOS 上的同步「桌面」和「文稿」文件夹功能,以获得更方便的效果。)

熟悉 DEVONthink、Keep It 等文件管理工具的读者知道,它们存储的每个文件都有一个特定的 URL scheme,访问即可直接跳转到应用并定位到文件。iOS 并没有提供这样的功能,但相同的效果可以通过 iCloud 的文件共享功能实现。原理是:存储在 iCloud Drive 中的文件都可以通过链接的形式共享。这种链接在外观上是一个普通网址,但如果当前设备登录的 Apple ID 是分享者本人,访问链接的效果将是直接显示文件、甚至自动在关联的应用中打开。

在 iOS 上,获取 iCloud 文件链接的步骤是:

  1. 打开「文件」应用,长按需要获取链接的文件并选择「分享」。
  2. 在分享菜单中依次选择「添加用户」—「复制链接」,并在弹出的窗口中再次点按「复制链接」。(由于并没有在这一步为其他 Apple ID 添加权限,即使其他人获得链接,也不能访问文件。)

获取 iCloud 文件链接的步骤

这样,就获得了形如 https://www.icloud.com/iclouddrive/hashedFileToken#FILENAME 的链接。试着将这个链接粘贴到 Safari 地址栏并访问,可以发现系统直接跳转到了关联的应用并打开了文件。

不过,并不是所有文件都能获得最理想的跳转效果;能直接进入应用的主要是苹果第一方的格式。对于其他格式的文件,iOS 不会在打开链接时直接跳转到关联应用,而只能跳转到「文件」应用并显示预览。此时,可以点按右上角的分享菜单,并选择「在【应用名称】中打开」,对文件的操作仍然会直接反映在 iCloud 中的原始文件上。(注意与名称中含有「拷贝到」的选项区分,后者的效果是打开文件的副本。)

从文件预览界面手动打开关联应用

第二步:添加桌面图标

获取了直接打开文件的链接后,剩下的问题就是如何将其添加为桌面图标。具体实现方法有很多种,其中最简单的思路就是创建一个包含「打开 URL」动作的捷径,然后将其添加到主屏幕。但这种做法的自定义空间很小,而且每次打开都要经过捷径应用的跳转,也显得不够美观。要尽可能接近电脑上的操作体验,创建的图标最好能反映文件类型,并且跳转过程应当尽量无缝。

好在,已经有人替我们造好了轮子。上周,MacStories 的 Federico Viticci 发布了自己花费很长时间制作的一个捷径,其功能正是将任意 URL 添加为桌面图标。这个捷径的细节颇为考究,例如添加过程中可以搜索 App Store 并抓取特定应用的图标,利用了 iOS 新近支持的 PWA 特性,使生成的图标在点开时能以全屏显示一个美观的启动画面等。

借用 Viticci 的思路,我改制了一个将 iCloud Drive 中文档添加到桌面、并显示为对应应用图标的捷径(下载)。其使用步骤是:

  1. 捷径运行后,会弹出一个文件选择窗口。在这个窗口中找到所需文件,然后用前文所述的步骤将其 iCloud 链接复制到剪贴板中。完成后,再次点按这个文件来确认选择。
  2. 如果选择的文件属于常用格式,捷径会自动提示应用名称,直接点按「确定」即可。如果捷径没有正确判断出应用,或者想使用其他应用的图标作为文件图标,也可以自行输入所需的应用名称。在弹出的菜单中确认要使用的图标。
  3. 捷径会跳转到 Safari 并显示一个指引界面。点按「分享」按钮,从菜单中选择「添加到主屏幕」,然后点按「添加」即可。

捷径的使用方法

关于这一捷径的实现原理,我建议直接阅读 Federico Viticci 的原文来了解。这里只简单说明与本文目的有关的两处要点:

  1. 捷径中本身包括一个名为「获取 iCloud 文件链接」的动作。但这个动作获取的链接与本文所述方法得到的结果不同,其访问效果是下载文件而非跳转到文件,因此只能继续使用上述较为曲折的方法。
  2. 要实现根据后缀名自动提示应用名称的功能,涉及到如何在捷径中进行分支判断。然而,捷径并不支持编程语言中常见的分支语句 case,而只有一个最简单的 if 判断。但在分支较多时,如果用 if 判断,就只能不停嵌套,制作和编辑起来都很繁琐。解决方法是利用词典(Dictionary)动作,即建立一个以「后缀名—应用名」为键—值对的词典,后接一个「获取词典值」动作即可获得特定后缀名对应的应用名称。

使用词典(右)可以避免繁琐的 if 嵌套(左)

如上所述,你可以继续将常用文件的图标都添加到主屏幕上,并根据它们所属的项目、利用文件夹进行归组。

添加各类文件并利用文件夹进行归组

当然,本文介绍的思路并不局限于创建文件图标,而是可以有许多扩展,例如将与项目有关的笔记条目也添加到主屏幕上。系统自带的「备忘录」应用同样可以通过「添加用户」命令获取具有跳转功能的共享链接;Evernote 用户则可以使用捷径应用中的「获取 Evernote 链接」动作。

获取备忘录的 iCloud 链接