17

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

MasterSlides 1…<em>n およびSlides 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 バイトを切り取って、いくつかのファイルをすばやくパイプ処理しても、明らかに使用できるものは何もありませんでした。

4

2 に答える 2

27

フォーマットのリバース エンジニアリングを行い、結果をここに公開しました。形式の説明を書き上げ、サンプル プロジェクトも提供しました。

基本的に、.iwa ファイルは、Snappy を使用して圧縮された Protobuf ストリームです。

お役に立てれば!

于 2013-11-08T03:52:21.150 に答える