Max のMach-O エクスターナルオブジェクトの構成

MaxのMach-Oオブジェクトはバンドル (「パッケージ」と考えられるもの) になっています。これはFinderでは1つの「ファイル」として表示されていますが、実際には他のフォルダやファイルを含んだ「フォルダ」であることを意味します。外側のフォルダ名は 「.mxo」という拡張子をつける必要があり、これがないとMaxは読み込むことができません。これはMax4.5およびMax.4.6の双方にあてはまります。

Contentsフォルダ

「パッケージの内容を表示」コマンドでdial.mxoを見てみると、Contentsという1つのフォルダだけが表示されます。これはMacOSXにおけるほとんどの標準的なパッケージの形です。(いくつかのアプリケーションで実際に確認してみてください)

Contentsの中には、Info.plistという1つのファイルと、MacOSとResourcesという2つのフォルダがあります。Info.plistファイルにはオブジェクトに関するインフォメーション(Infoはinformationの略)を伴ったプロパティ(plistはproperty listの略)が記述されています。

Info.plistファイル

Info.plistファイルをダブルクリックするとプロパティリストエディタ(property list editor)アプリケーションが起動します。プロパティリストはテキストエディタで編集することもできますが、プロパティリストエディタでは、XMLフォーマットを知らなくても編集を行えます。ここには次のような2つの重要なプロパティがあります。

CFBundleExecutable はそのオブジェクトの実行ファイル名を表します。CFBundleIdentifierもまたオブジェクト名ですが、これはOS内のコードのために、一種のユニークな識別子として働きます。CFBundleIdentifier はどのようなものでも構いませんが、CFBundleExecutableが正確な名前になっていないと、オブジェクトは動作しません。

Info.plistファイルに自分でプロパティを追加することは可能ですが、そのためには、Appleの非常に冗長な Core Foundation API を習得する必要があります。

PkgInfo ファイル

PkgInfo ファイルは、.mxoという拡張子を持つファイルを作る SubEthaEdit と呼ばれるワードプロセッシングアプリケーションによるコンフリクト(衝突)を解決します。ユーザがSubEthaEditをインストールしていなければ、このコンフリクトは生じません。しかし、当然のことですが、エクスターナルオブジェクトがどのような環境で使用されるかについては決して確認することはできません。PkgInfoファイルは8文字のキャラクタでできています。パッケージのタイプを表すコードにそのパッケージを所有するアプリケーションのシグネチャーコードが続けられています。これはOSに対しバンドルパッケージに関する記述を別の方法で提供するもので、単なるフォルダとしてみなされるわけではありません。

Max エクスターナルで使用される PkgInfo ファイルのための8文字は iLaXmax2 です。

このファイルは、Xcodeによって自動的に作成されます。この取り扱いについては「Xcode プロジェクトの詳細(Details About Xcode Projects)」セクションで述べます。

MacOS フォルダ

MacOSフォルダは、オブジェクトのための実行コード(コンパイルされたもの)を含んでいます。Xcode環境では、実行ファイルの名前をエクスターナルが含まれる.mxoフォルダ名と異なったものにするというような柔軟性はあまりありませんが、実際、あえてそのようなことを行なう価値も ありません。

Resources フォルダ

オブジェクトが何らかの伝統的なMacリソースを持っている場合、それらはプロジェクトに追加され、オブジェクトと同じ名前で.rsrcという拡張子をつけたファイルに集められます。この名前は、MacOSでの実行ファイルや、拡張子 .msoを伴うファイル名とすべて同じものでなければなりません。そうでない場合、あなたのエクスターナルオブジェクトが最初にロードされたときにリソースファイルが読み込まれず、ファイル中のリソースへのアクセスは失敗に終わります。

この.rsrcファイルがデータフォーク・リソースファイルであるという点に注意しておくことも重要です。データフォーク・リソースファイルはResorcererアプリケーションで開くことはできますが、昔ながらのResEditでは開くことができません。

他のファイル(例えばアイコンのための .icnsファイル)をResourcesフォルダに保存することもできますが、そのためには、自分でフォルダを開いて保存しなければなりません。

全てではありませんが、多くの場合Maxオブジェクトはリソースを持たず、このフォルダも作られません。

バンドルのContentsフォルダに他のフォルダやファイルを追加することができますが、このファイルの探索やオープンはあなた自身のプログラムで行う必要があります。しかし、ユーザが見る必要がないような、あなたのオブジェクトに固有なアイテムをパッケージに含めることが良い手段となる場合もあるでしょう。