为和我家小仙女聊天时能有更多表情包,本人决定把 LINE Store 洗劫一空,但在重写捷径 LINE Sticker¹ 时遇到了两个问题。一是捷径无法直接提取封装在 meta² 文件中的 json³ 数据,因此对于 meta 文件无法直接使用 「Get Dictionary」(获取词典)功能;另是在解压一个压缩文件后,由于捷径在处理流程时不支持文件路径功能,因此无法直接获取其中的二级文件夹中的文件。山穷水尽疑无路,柳暗花明又一村,困恼许久后还是用谜之操作成功解决了这两个问题。

¹ 捷径版本 V2.1.2。通过 MitM 利用 LINE API 下载表情包,由于能够以免费形式下载任意表情包,因此不公开。
² Metafile 一种能够存储多种数据格式的文件类型。
³ Json 一种轻量级的数据交换格式。

提取 meta 文件中的字符

最初,笔者试图更改 meta 文件的后缀为捷径支持的文件后缀,如 .txt,最终无果而归。笔者认为可能是由于捷径在处理文件时,对于文件名,使用的是类似于 Tag 🏷️ 的标记方式,因此改变文件后缀是无用的。不过此想法为进一步的操作提供了思路,既然无法改变文件格式,那不如去除文件格式,因此得到以下操作:

提取 meta 文件中的字符流程
提取 meta 文件中的字符流程
我们可以先对 meta 用「Base64 Encode」⁴进行编码再解码,就可以成功提取到其中包含的字符了。示例 meta to text 如下:
捷径 meta to text
捷径 meta to text
Base64 一种基于64个可打印字符来表示二进制数据的方法。

压缩文件中二级文件夹内的文件提取

捷径运行 LINE Sticker 下载到一个动态表情包的压缩包,可解压缩后发现需要的动态表情图片在一个文件夹里,在尝试过「文件过滤」等功能后无功而返,均无法提取到所要的表情图片。开始时笔者通过「捷径嵌套」或直接调用 iCloud Drive 来实现这个功能,但其操作过于繁琐,运行时产生大量垃圾文件占用 iCloud Drive 的空间等…弊大于利。参照提取 meta 中字符的方法,不难想出这里要进行一个去除路径有关的操作,而与之相关的动作也仅有「Extract Archive」。

压缩文件中二级文件夹内的文件提取流程
压缩文件中二级文件夹内的文件提取流程
于是,对一个压缩包解压后,可以通过文件夹的后缀长度为0这一特性用「If」获取文件夹⁵,先「Make Archive」再「Extract Archive」就可以得到文件夹内的文件了。示例 folder in zip
捷径 folder in zip
捷径 folder in zip
⁵「Filter Files」动作在这里无法使用,故用「If」代替。

结语

综上所述易见,这些方法都是对不完美乃至功能设计残缺的妥协。对于 meta 提取字符存在文字数据混合式 meta 可能提取失败以及只能支持较小的 meta 文件等问题…而对压缩文件中文件夹中文件的提取,进行「压缩」和「解压缩」时对性能的浪费和对三级及多级文件夹中文件提取繁琐的问题尚未解决。捷径随 iOS 12 发布已迈入 2.0 版本,就目前而言仍有许多不足之处,而作为普通用户的我们也只能寄希望于捷径开发团队的更新能带来相关功能及优化。