Apple iWork 套件的早期版本使用非常简单的文档格式:
- 文档是资源包(文件夹,压缩与否)
- 该捆绑包包含一个
index.apxl[z]
文件,该文件以专有但相当容易理解的模式描述文档结构
iWork '13 完全重做格式。文档仍然是捆绑包,但索引 XML 文件中的内容现在被编码在一组二进制文件中,类型后缀.iwa
为Index.zip
.
例如,在 Keynote 中,有以下iwa
文件:
AnnotationAuthorStorage.iwa
CalculationEngine.iwa
Document.iwa
DocumentStylesheet.iwa
MasterSlide-{n}.iwa
Metadata.iwa
Slide{m}.iwa
ThemeStylesheet.iwa
ViewState.iwa
Tables/DataList.iwa
对于MasterSlide
s 1…<em>n 和Slide
s 1…<em>m
从它们的命名中可以清楚地看出它们中的每一个的目的。这些文件甚至看起来是未压缩的,基本上所有内容文本都直接作为二进制 blob 中的字符串可见(尽管在可读的 ASCII 字符中间有一些像 RTF/NSAttributedString/类似相关的垃圾)。
我在Index
这里发布了一个简单示例 Keynote 文档的解包:https ://github.com/jrk/iwork-13-format 。
但是,整体文件格式对我来说并不明显。Apple 长期以来一直使用简单的平台标准格式(如 plists)来编码他们的大部分文档,但文件开头没有明确的类型标签,而且对我来说这些iwa
文件是什么并不明显。
这些文件是否敲响了警钟?是否有证据表明它们采用某种可以合理理解的序列化格式?
使用 F-Script 翻阅 Keynote 应用程序运行时和类转储,我发现的唯一证据是在似乎用于 iWork 的序列化类中使用了协议缓冲区,例如:https ://github.com/ nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h。
快速传输一些文件protoc --decode_raw
,去掉前 0…16 个字节,并没有产生任何明显可用的东西。