Apple の iWork スイートの以前のバージョンでは、非常に単純なドキュメント形式が使用されていました。
- ドキュメントはリソースのバンドルでした (フォルダー、圧縮されているかどうかに関係なく)
- バンドルには
index.apxl[z]
、ドキュメント構造を独自の、しかしかなり理解しやすいスキーマで記述したファイルが含まれていました
iWork '13 ではフォーマットを完全に作り直しました。.iwa
ドキュメントは引き続きバンドルですが、インデックス XML ファイルに含まれていたものは、タイプ サフィックスが にパックされた一連のバイナリ ファイルにエンコードされるようになりました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 内の文字列として直接表示されます (ただし、RTF/NSAttributedString/同様の関連のガベージが読み取り可能な ASCII 文字の中にあります)。
Index
簡単な Keynote ドキュメントの例を解凍したものをhttps://github.com/jrk/iwork-13-formatに投稿しました。
ただし、全体的なファイル形式はわかりません。Apple には、ほとんどのドキュメントのエンコードに plist のような単純なプラットフォーム標準形式を使用してきた長い歴史がありますが、ファイルの先頭に明確なタイプ タグがなく、これらのiwa
ファイルが何であるかは私には明らかではありません。
これらのファイルはベルを鳴らしますか? それらが合理的に理解可能なシリアル化形式であるという証拠はありますか?
F-Script を使用して Keynote アプリのランタイムとクラス ダンプを調べたところ、iWork で使用されていると思われるシリアル化クラスでプロトコル バッファが使用されていることが判明した唯一の証拠です。 nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h .
protoc --decode_raw
最初の 0 ~ 16 バイトを切り取って、いくつかのファイルをすばやくパイプ処理しても、明らかに使用できるものは何もありませんでした。