 |
Technote 1126
A Checklist for Building Applications and Extensions
アプリケーション
バンドル
● 'BNDL'、'FREF'、アイコンリソースをインクルードして、Finder がアプリケーションとドキュメントを独自のアイコンで表示できるようにしてください。バンドルの詳しい説明については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。
● アプリケーション用のアイコンをインクルードする場合は、バンドルビットをセットしてください。これはビルド処理で忘れやすいことです。「Save a Bundle」や「BNDL Banger」などのユーティリティで自分のバンドルが有効かをチェックしましょう。こうしたユーティリティはさまざまなシェアウェアのサイトで見つかります。
● 自分のクリエータを DTS に登録してください。詳細については、Web ページ <http://developer.apple.com/datatype/> をご覧ください。バンドルをインクルードしている各アプリケーションには固有のクリエータコードが必要です。
ビットのセット
● アプリケーションがネットワークで複数起動できるようにするには、Finder フラグの isShared ビットをセットしなければなりません。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。isShared をセットしたら、アプリケーションが自分のリソースまたはデータフォークに書き込まないようチェックしてください。さらに、アプリケーションがシステムフォルダ内のプリファレンスフォルダ内の自分のプリファレンスファイル以外に書き込みを行わないようチェックしてください。プリファレンスファイルは FindFolder を使って調べたり作成できます。
● AppleEvents を使っている場合は、'SIZE' リソースの isHighLevelEventAware ビットをセットしてください。そうしないと、AESend を呼び出したり、AESend を使用するルーチンを呼び出すと、エラー -903 が起こります。
追加すべきリソース
● バルーンヘルプや機能拡張マネージャでアプリケーションを表すヘルプ文字列を表示するには、リソース ID 番号が -5696 の 'hfdr' リソースを追加してください。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。次に示すのは、アプリケーションアイコンのヘルプバルーンリソースの Rez 入力サンプルです。
resource 'hfdr' (-5696, purgeable) {
HelpMgrVersion, hmDefaultOptions, 0, 0,
{HMSTRResItem {kIconHelpString}}
};
resource 'STR ' (kIconHelpString, purgeable) {
"Macintoshを使ってこれまでの最高の文書を作成編集するのに"
"SurfWriterワードプロセサを使ってください。"
};
|
● 'SIZE' リソースのビットは正しくセットしてください。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」と TECHNOTE OV 12「Version Territory」を参照してください。
次に示すのは、2 つのバージョンリソースの Rez 入力サンプルです。
resource 'vers' (1, purgeable) {
0x01, 0x00, release, 0x00, verUS,
"1.0",
"1.0 (US), (c) My Company, Inc. 1998"
};
resource 'vers' (2, purgeable) {
0x02, 0x00, release, 0x00, verUS,
"2.0",
"(for SurfWriter 3.0)"
};
|
● PowerPC でのみ使用可能なアプリケーションには、そのアプリケーションが 68K マシンでしか動作しないことをユーザに伝えるダイアログを表示する 68K コードを追加してください。コードは 'CODE' リソースのリソース ID 番号 0 (セグメントテーブル) と 1 (実際のコード) に追加してください。
● タイプが 'open' のリソースを追加して、Finder にどんな種類のドキュメントを認識するかを伝えてください。'open' リソースの詳細については、『Inside Macintosh: More Macintosh Toolbox』の第 7 章「The Translation Manager」を参照してください。
次に示すのは、タイプが 'open' のリソースの Rez 入力サンプルです。
resource 'open' (128)
{
'ttxt', { 'ttro', 'PICT', 'TEXT' }
};
|
● タイプが 'kind' のリソースを追加して、Macintosh Easy Open にどんな種類のドキュメントを認識するかを伝えてください。'kind' リソースの詳細については、『Inside Macintosh: More Macintosh Toolbox』の第 7 章「The Translation Manager」を参照してください。
その他
● デフォルトのスタックサイズを適切な値に設定してください。PowerPC のコードの場合、スタックサイズは起動されたアプリケーションの 'cfrg' リソースのフィールドによって設定されます。値を 0 にするとスタックサイズは 48K になります (将来のシステムのバージョンでは変更されるかもしれません)。68K コードの場合、デフォルトのスタックサイズは、Color QuickDraw の入った 680x0 マシンで 32K、Color QuickDraw の入っていない 68020 以上のマシンで 24K、68000 マシンで 8K です。System 7.6 からは、バックグラウンド・オンリー・アプリケーションのデフォルトスタックは 8K です。それ以前のデフォルトスタックサイズは 2K です。プログラムが使用できるスタックの量を増やすには、他のメモリマネージャコールを行う前に SetApplLimit を呼び出してください。例えば、次のようになります。
SetApplLimit(GetApplLimit() - 16384);
この例ではスタックは 16K だけ増えます。SetApplLimit の呼び出しは、MaxApplZone やその他のメモリマネージャコールを行う前に行ってください。『Inside Macintosh: Memory Errata』を参照してください。SetApplLimit に渡せる値の下限値 (つまりスタックの上限値) が書いてあります。また、TECHNOTE 1070「バックグラウンド・アプリケーション」には、システムの安定性に影響を与える可能性のあるバックグラウンド・オンリー・アプリケーションのヒープ破壊について書かれています。
● すべてのアプリケーションおよびバックグラウンド・オンリー・アプリケーションには、最低限 64K のメモリパーティションセットがなくてはなりません。こうすれば、システムと機能拡張が動作するために必要なだけのアプリケーションヒープのスペースが常に確保されます。
● 'DLOG'、'DITL'、'dctb'、'ictb'、'actb'、'dftb'、'dlgx'、'CNTL'、'WIND' のリソースをパージ可能に設定してください。
● 'WDEF' のリソースをパージ不可能に設定してください。
● MacsBug シンボル (68K) とトレースバックテーブル (PowerPC) をオフにすると、バイナリが小さくなることに気づくでしょう。MacsBug シンボルとトレースバックテーブルをオフにする方法の詳細については、ご自分の開発環境のドキュメントを参照してください。
● 最終ビルドでは DebugStr および Debugger への呼び出しがすべて除かれていることをチェックしてください。68K バイナリから 16 進数の A9FF と ABFF を探します。これは Debugger と DebugStr へのトラップワードです。PowerPC の場合、DumpPEF を使って、アプリケーションが DebugStr や Debugger シンボルをインポートしていないことを確認してください。
システム機能拡張、コントロールパネル、デスクアクセサリ
望ましいファイルタイプ
● できれば、コントロールパネルは、ファイルタイプ 'APPC' のアプリケーションとして書いてください。詳細については、TECHNOTE 1090「Mac OS 7.6」を参照してください。
● デスクアクセサリには旧来の 'DRVR' スタイルはできるだけ使わないでください。デスクアクセサリは、可能なかぎりファイルタイプ 'APPD' のアプリケーションとして書いてください。詳細については、TECHNOTE 1090「Mac OS 7.6」を参照してください。
● 一般的にいって、システム機能拡張を INIT リソースとして実装するのは良い考えではありません。システムの安定性を下げるし、デバッグが難しいからです。できれば、これまで INIT リソースにしたようなものは、バックグラウンド・オンリー・アプリケーションとして書いてください。詳細については、TECHNOTE 1070「バックグラウンド・アプリケーション」を参照してください。バックグラウンド・オンリー・アプリケーションには AppleEvent の 'quit' のサポートを入れてください。これがシステムが終了を命じる唯一の方法だからです。
バンドル
● 'BNDL'、'FREF'、アイコンリソースをインクルードして、Finder がプログラムを独自のアイコンで表示できるようにしてください。バンドルの詳しい説明については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。
● アプリケーションのバンドルをインクルードする場合は、Finder フラグのバンドルビットをセットしてください。これはビルド処理で忘れやすいことです。「Save a Bundle」や「BNDL Banger」などのユーティリティで自分のバンドルが有効かをチェックしましょう。こうしたユーティリティはさまざまなシェアウェアのサイトで見つかります。
● 自分のクリエータコードを DTS に登録してください。詳細については、Web ページ <http://developer.apple.com/datatype/> をご覧ください。バンドルをインクルードしている各アプリケーションには固有のクリエータコードが必要です。
リソース
● 機能拡張マネージャ 4.0 との互換性のため、リソース ID 番号 128 の 'CCI(TM)' (4 文字目の (TM) は、拡張 ASCII にある単一の登録商標を表す文字です) リソースが必要です。次に示すのは、'CCI(TM)' リソース用 Rez 入力サンプルです。
type 'CCI(TM)' as 'STR ';
resource 'CCI(TM)' (128, purgeable) {
"この機能拡張はSurfWriterパッケージの一部です。"
"これはTECHNOTEのデモ用です。"
};
|
● バルーンヘルプがオンになったとき、またはすべてのバージョンの機能拡張マネージャでファイルに関するヘルプ文字列を表示するには、リソース ID 番号 -5696 の 'hfdr' リソースが必要です。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。次に示すのは、機能拡張用のヘルプバルーンリソース用 Rez 入力サンプルです。
resource 'hfdr' (-5696, purgeable) {
HelpMgrVersion, hmDefaultOptions, 0, 0,
{HMSTRResItem {kIconHelpString}}
};
resource 'STR ' (kIconHelpString, purgeable) {
"この機能拡張はTECHNOTEのデモ用です。"
};
|
● システム機能拡張またはコントロールパネルの INIT リソースで 16K 以上のメモリを割り当てる必要がある場合は、リソース ID 番号が 0 の 'sysz' リソースを使ってください。『Inside Macintosh: Operating System Utilities』の第 9 章「The Start Manager」にある 'sysz' リソースの使用方法についての説明では、System 7 以降は 'sysz' リソースが必要ないと書かれていますが、これは誤りです。正しい説明については、『Inside Macintosh: Memory Errata』を参照してください。
その他
● システム起動時にアイコンを表示するには、"ShowInitIcon" のサンプルコードを使ってください (『Tool Chest Developer CD』にも収録されています)。
ドキュメント
リソース
● アプリケーションが見つからない場合に表示するアプリケーション名をリソース ID 番号が -16396 の 'STR ' リソースで追加してください。また、ドキュメントが開けないことを通知するメッセージはリソース ID 番号が -16397 の 'STR ' リソースで追加してください。こうすると、アプリケーションが使用できないためにドキュメントが開けない場合に、Finder が意味のあるエラーメッセージを表示することができます。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。次に示すのは、見つからないアプリケーション名の文字列リソースの Rez 入力サンプルです。
resource 'STR ' (-16396, purgeable) {
"SurfWriter"
};
|
次に示すのは、ドキュメントが開けないことを通知するメッセージ文字列リソースの Rez 入力サンプルです。
resource 'STR ' (-16397, purgeable) {
"ごめんなさい。このファイルが開けるのはSurfWriter"
"アプリケーションだけです。"
};
|
プリファレンスファイル
● 『develop 20』に掲載されたプリファレンスファイルの作成についての記事は、複雑すぎます。DTS はあの記事の考え方にしたがうことをおすすめしません。
● プリファレンスファイルの推奨ファイルタイプは 'pref' です。これを使うと、Finder は専用のプリファレンスファイルアイコンを使ってそのファイルを表示します。推奨のクリエータは '????' で、これを使えば、Finder がこのファイルを開くことができるプログラムを探すのを防げます。以前は『develop』の記事などで、独自の未使用のクリエータタイプを登録するようすすめていましたが、'????' クリエータタイプを使えば、不必要なクリエータタイプを登録することが避けながら、ドキュメントにプリファレンスファイルの外観を持つアイコンを与えることができます。
● クリエータ '????' を使う場合は、プリファレンスファイルに 'BNDL' または 'FREF' リソースを与えてはいけません。
● プリファレンスファイルを作成してよいのは、システムフォルダのプリファレンスフォルダか、プリファレンスフォルダ内に自分で作成したサブフォルダだけです。プリファレンスフォルダは、ハードコードされたパス名ではなく、FindFolder を呼び出して見つけてください。
リソース
● ドキュメントが開けないことを通知するメッセージ文字列として、リソース ID 番号が -16397 の 'STR ' リソースが必要です。このリソースを使うと、プリファレンスファイルが開けない場合に、Finder が意味のあるエラーメッセージを表示することができます。詳細については、『Inside Macintosh: Macintosh Toolbox Essentials』の第 7 章「The Finder Interface」を参照してください。次に示すのは、プリファレンスファイルが開けない場合のメッセージ文字列のリソースの Rez 入力サンプルです。
resource 'STR ' (-16397, purgeable) {
"このドキュメントはSurfWriterアプリケーションのユーザプリファ"
"レンスを記述するものです。このドキュメントは開いたり、印刷す"
"ることができません。これを使用するためには、このドキュメント"
"をシステムフォルダ内のプリファレンスフォルダに保存してください。"
};
|
要約
この簡単で短いチェックリストで点検すれば、アプリケーションの出来栄えを損ねることになる単純だが大切な問題を解決することができます。潜在的なバグも排除できたかもしれません。これらのルールにしたがうことによって、理想的な Macintosh ソフトウェア製品の完成に、1 歩近づいて行くのです。
|