まず、いくつかの歴史:
Objective-C ランタイムの古いバージョン (OS X より前) には、NSCoderの OPENSTEP 以前の祖先である NXTypedStreamと呼ばれる疑似クラスが含まれていました。古いバージョンの Foundation にはNSCompatibility.hというヘッダーが含まれていました。これには、古い NeXTStep 形式を処理するための関数とカテゴリが含まれていました。NSCompatibility.h はもう存在しませんが、その機能の (非推奨の)サブセットは NSCoder.h で引き続き見つけることができます。
NSCoder は OPENSTEP のオリジナルの Foundation Kit の一部としてデビューしましたが、おそらくシリアル化形式として typedstreams を使用していました。ある時点で、plist ベースの形式に切り替えられました。現在のバージョンの Interface Builder (Xcode の一部として) は、古い typedstream ベースの NIB を読み取ることができます。これは、この機能が OS X にまだ存在することを示す良い手がかりです。
さて、解決策:
これは (現在の) Apple のドキュメントにはありませんが、NSCoder/NSUnarchiver は typedstream ファイルを問題なく読み取ることができることがわかりました。Cocoa/Objective-C プログラムで typedstream ファイルを読みたい場合は、次のようにします。
NSUnarchiver *typedStreamUnarchiver = [[NSUnarchiver alloc] initForReadingWithData:[NSData dataWithContentsOfFile:@"<path to your typedstream file>"]];
それでおしまい!デコードは、_decodeObject_old という関数で内部的に処理されます。これで、次のような標準の NSCoderメソッドを使用してアーカイブを解除できます。
id object = [typedStreamUnarchiver decodeObject];
NSLog(@"Decoded object: %@", object);
typedstream のクラスがプログラムで有効なクラスでない場合、NSArchiverArchiveInconsistency 例外がスローされることに注意してください。
参照: http://www.stone.com/The_Cocoa_Files/Legacy_File_Formats.html