第4章


Mac OS X環境


この章は、あなたのソフトウェアのデザインに影響を与えることがある、Mac OS Xの関連機能について扱います。これらの機能は常に単独の技術や開発形式に結びつけられているわけではありませんが、しばしば一般的な開発に適用されます。あなたはソフトウェアを開発する前に、これらのガイドラインに慣れ親しむ必要があります。

常時オンの環境

ユーザのデジタルハブの中心として、Mac OS Xは常に使うための準備ができているようにデザインされています。省電力システムのおかげで、ほとんどコンピュータをオンにしたままにするのは、ユーザにとって一般的なことです。コンピュータが一度に数時間、数日、数週間、もしくは数ヶ月オンであるかもしれないという事実を可能とするために、あなたは以下のガイドラインを検討する必要があります…

  • ディスク領域を圧迫する事のある、キャッシュや一時ファイルの除去を再起動に依存することは避けてください。これらのファイルがもう必要ないというときに、あなた自身で削除するための用意をしましょう。
  • ユーザレベルプロセスの起動をスタートアップ項目やログイン項目に依存することは避けてください。もしユーザが起動時にのみ開始されるプロセスを終了したら、そのプロセスはマシンが再起動するまで利用できなくなるでしょう。
  • どうしても必要なときを除いて、インストール作業やソフトウェア更新の一部として再起動をユーザに求めることは避けてください。あなたのアプリケーションはおそらく、起動している唯一のアプリケーションではないでしょうから、再起動は無作法な中断として現れることでしょう。

ディスプレイ

ディスプレイの大きさについて仮定することは避けてください。Mac OS Xは800 x 600の小さい画面のシステムでも稼動しますが、ユーザは複数の高解像度ディスプレイを持っているかもしれません。ユーザが特定の大きさのディスプレイを使用するだろうということを、あなたが分かっている場合は別として、あなたのアプリケーションは1024 x 768ピクセルのディスプレイに対して最適化するのが最善でしょう。

注:640 x 480の解像度も、iBookや、クラシック時代のアプリケーション、ゲーム、その他のマルチメディアアプリケーションのために利用できます。ですが、これが最小システム解像度であるとあなたが仮定してよいという意味ではありません。あなたのユーザインタフェースは最低限800 x 600の解像度のためにデザインしてください。

ユーザはディスプレイを回転する機能を持っていることがあるという点を認識しましょう。従ってあなたは、アスペクト比についての仮定も避ける必要があります。ディスプレイの回転はディスプレイのアスペクト比を逆転させます。たとえば、もしユーザのディスプレイが800 x 600の画面解像度(アスペクト比は1.33:1)に設定されていたら、回転した後の画面解像度は600 x 800(アスペクト比 .75:1)となります。

アプリケーションはCGDisplayReconfigurationCallBackといったコールバックを登録することで、画面更新イベントの数種類の通知を得ることができます。このコールバックやその他についての詳細は、Quartz Display Services Referenceを参照してください。

Dock

DockはMac OS Xのユーザにとって、単なるツール以上のものです。開発者はDockと、彼らのアプリケーションにおいて占めているその存在を認識する必要があります。

新しいウインドウを作成したり、既存のウインドウをサイズ変更したとき、あなたは必ずDockの位置を考慮に入れてください。新しいウインドウがDockの境界に重なってはいけません。同様に、あなたはユーザがウインドウをDockの裏に移動したり、サイズ変更することを防ぐ必要があります。(Carbon開発者はGetAvailableWindowPositioningBounds関数を用いて、Cocoa開発者はNSScreenのメソッドを用いてDockやメニューバーをのぞいた画面領域を得ることができます)

Dockの中で情報を伝達する

開発者は、Dockの機能のいくつかは情報を伝える役に立つことも発見するでしょう。

  • 控えめなやり方で状態についての情報を伝えるためには、バッジを使いましょう。バッジとはアプリケーションのDockタイルアイコンの上に小さな画像を重ねる方法です。たとえば、アップルMailプログラムは、未読メッセージの数を表すためにバッジを用いています。これは適切な反応と伝達を提供しているよい例です。このユーザインタフェースデザインの原則についての詳細は、「反応と伝達」(42ページ)を参照してください。
  • エラー状況といった、より深刻な情報を伝えるためには、Notification Managerを使いましょう。通知はあなたのDockタイルアイコンを跳ねさせます。一度ユーザが問題に応答したら、あなたはこの効果を必ず無効にしてください。(Cocoaアプリケーションにおけるエラー関連クラスは、Dockの通知を自動的に開始する点に注意してください)

Dockをクリックする

Dock内のアプリケーションアイコンをクリックすることは、常にウインドウを活性にする結果に終わります。

  • アプリケーションが開いていなければ、新しいウインドウを開く必要があります。文書単位アプリケーションでは、アプリケーションは新規の、名称未設定ウインドウを開く必要があります。文書単位ではないアプリケーションでは、メインアプリケーションウインドウを開いてください。
  • ユーザが、Dockの開いているアプリケーションのアイコンをクリックしたときは、アプリケーションは活性となって、Dockにしまわれていない、すべての開いているウインドウは手前に移動されます。しまわれている文書ウインドウはDockの中に留まります。ユーザがDockアイコンをクリックしたときに、しまわれていないウインドウがひとつもなければ、最後にしまわれたウインドウを広げて活性にしてください。開いているウインドウがなければ、アプリケーションは新しいウインドウ—文書単位のアプリケーションでは新規の名称未設定ウインドウ、そうでなければメインアプリケーションウインドウを開く必要があります。

Dockの中のアプリケーションアイコンをControl-クリックすることで、ユーザがアプリケーションの終了、アプリケーションを隠す、ファイルシステムでの場所を表示する、といった作業を行うことのできるメニューを表示します(ユーザはこのメニューを【Dockの】アプリケーションアイコンを押し続けることでも表示できます)。あなたはこのメニューを、あなたのアプリケーションの機能をDockタイルから利用できるように変更することができます。Dockメニューの詳細は、「Dockメニュー」(175ページ)を参照してください。

Finder

あなたのアプリケーションがFinderと上手に調和するために役立つ、いくつかの秘訣があります…

  • あなたのアプリケーションバンドルに.app拡張子を必ず付けましょう。Finderはこの拡張子を捜して、あなたのアプリケーションを見つけたときに適切に取り扱います。またFinderはこの拡張子を表示するか、隠すかを、Finder環境設定の詳細ペインの「すべてのファイル拡張子を表示」設定の状態に依存します。
  • CFMアプリケーションをバンドルにまとめましょう。あなたがCFMランタイムを用いて開発を行っていたとしても、Mac OS Xのバンドル機構の利点を得ることができます。
  • Finderへの情報伝達には、情報プロパティリストを使用しましょう。情報プロパティリストはあなたのアプリケーションと、文書の種類についての情報を記録するための標準的な場所です。このファイルに何を配置するかの情報は、Runtime Configuration Guidelinesを参照してください。
  • あなたの独自の文書形式でファイルを保存するときは、必ず適切なファイル名拡張子を与えてプラットフォーム間の相互運用性を保障し、Mac OS Xのユーザ体験へ対応してください。また、あなたはファイルタイプ、そして任意でクリエータタイプをファイルに設定できます。ファイルタイプとクリエータタイプのコードは必須というわけではありませんが、Classic環境でのアプリケーションとの相互運用性を保障します。ファイル名拡張子、ファイルタイプ、クリエータタイプの詳細は、File System Overviewを参照してください。
  • 既存の文書のクリエータタイプを変更することは避けましょう。クリエータタイプはファイルの所有権についての個別の【ファイルごとの】認識を意味しています。あなたのアプリケーションは、クリエータタイプを自分が作成したファイルに割り当てることができますが、他のアプリケーションによって作成された文書のクリエータタイプを、ユーザの明確な同意なしに変更することは不適切です。ユーザはこれまで通り、情報ウインドウを通してファイルと特定のアプリケーションを関連付けることができます。

ファイル形式とファイル名拡張子

できるだけ常に、あなたの文書に工業標準のファイル形式への対応を含めてください。工業標準のファイル形式への対応は、あなたのアプリケーションと他のアプリケーションとの間のデータ交換を容易にします。また、ユーザはデータを簡単に出し入れできると分かっていれば、よりあなたのアプリケーションを使ってみようという気持ちに傾くでしょう。

ユーザ設定可能なデータを保存するとき、必ずユーザが変更可能なプレーンテキストファイルに記録してください。Mac OS Xアプリケーションは慣例として設定データをXMLを用いて記録します。あなたはCore FoundationとCocoaで見つけることのできる、環境設定システムとXMLサポートを用いて、XMLデータを書き出すことができます。ユーザ環境設定についての詳細は、Runtime Configuration Guidelinesを参照してください。

多くのプラットフォームは、ファイルの種類を識別するためにファイル名拡張子の存在に依存しています。長い長い間、Mac OS Xの開発者たちはこれらの使用を非難してきました、けれどファイル拡張子は、ユーザがこうした他のプラットフォームのユーザとのファイルの交換を行うことを容易にします。文書を保存するアプリケーションは、文書の内容に対して適切なファイル名拡張子を、確実に含める必要があります。同時に、しかし、アプリケーションがファイルと文書の名前を表示するときは、ユーザのファイル名拡張子についての環境設定を尊重するように気をつけなければいけません。

ファイル名拡張子の対応についての詳細とガイドラインは、File System Overviewを参照してください。

国際化

Mac OS Xアプリケーションバンドル機構は、各国語化された文字列、画像、nibファイル、その他のリソースに対応するためにデザインされています。けれども、アプリケーションをさまざまな市場で用いるためのデザインとは、単に正しく翻訳された文字列を含めるだけではありません。「国際的な互換性」(47ページ)は、あなたのアプリケーションに国際化を盛り込むための、一般的なデザイン検討事項を提供します。

最低限、あなたの国際化チェックリストは以下の項目を含んでいなければいけません…

  • あなたがバンドルの組み込み国際化対応の利点を活用できるように、あなたのプログラムはバンドルとして実装しましょう。
  • Unicode文字列に対応しましょう。Mac OS XはUnicodeへの完全対応を提供するので、あなたのアプリケーションでそうしない手はありません。
  • ユーザ見えする文字列を.stringファイルから取得するように、あなたのコードを修正しましょう。あなたのバンドル内のリソースファイルから文字列を読み込むために、Core FoundationとCocoaインタフェースを用いましょう。
  • あなたのユーザインタフェースデータを記録するために、nibファイルを使用しましょう。

あなたのアプリケーションを国際化する方法についての、更なるガイドラインと情報は、Internationalization Programming Topicsを参照してください。

複数ユーザの問題点

Mac OS Xは複数ユーザシステムであることを忘れないでください。システムは複数のユーザアカウントに対応するだけでなく、複数ユーザの同一コンピュータの同時共有にも対応しています。この機能はファーストユーザスイッチとして知られる技術を用いて、ユーザはログアウトすることなくコンピュータの使用を交換します。

コンピュータの複数ユーザによるアクセスは、もしアプリケーションが、ユーザはどのようにリソースを共有するかについて注意を払っていなければ、衝突を起こすことがあります。共有メモリ、キャッシュファイル、セマフォ、名前つきパイプは、ユーザが同じアプリケーションを異なるセッションで実行することによる破壊を防ぐために、慎重に分類する必要があります。アプリケーションはCDやDVDドライブといった、いかなるシステムリソースにも排他アクセスを持っていると仮定することはできません。

複数ユーザによるアクセスに配慮するとき、あなたのプログラムデザインのために心に留めておくべき、いくつかの特定の事柄があります…

  • 複数ユーザセッションから、あるアプリケーションへアクセス可能となる可能性のある、名前つきリソースは、リソースの名前にセッションIDを組み込むべきでしょう。これはキャッシュファイル、共有メモリ、セマフォ、名前つきパイプ、その他に適用されます。
  • ユーザがすべて同じ権限を持つわけではありません。たとえば、管理者ユーザだけが/Applications以下のファイルに書き込むことができます。制限された権限の元で作業するユーザは、システムの幾つかの部分へのアクセスを制限されているでしょう。

    特に、彼らは以下の事柄を行うことができないでしょう…

    • システム環境設定におけるすべてのペインへのアクセス
    • Dockの変更
    • 彼らのパスワードの変更
    • DVDやCDを焼くこと
    • 特定のアプリケーションを開くこと
  • コンピュータ上のユーザには、ローカルユーザとネットワークユーザの双方を含めることができます。従って、ユーザのホームディレクトリがローカルボリューム上にあると仮定してはいけません。あなたは代わりにネットワークボリュームにアクセスされるでしょう。

Multiple User Environments文書は、システム上に複数ユーザの存在により起きる問題点を説明します。これはまたユーザを見分け、あなたのアプリケーションデータを外部からの破壊から保護するための、プログラミング技術についても扱っています。

リソース管理

アプリケーションバンドルはインストール作業を単純化し、Finderにおいてユーザがあちこちへ移動させるのが簡単です。アプリケーションバンドルはソフトウェアの配布に適した機構です。

あなたのアプリケーションバンドルのリソースファイルを管理する役に立つ、いくつかの秘訣があります…

  • 必要なリソースは、すべてあなたのアプリケーションバンドルの内部に含めましょう。あなたのアプリケーションバンドルは、実行するために必要なすべてを常に持っている必要があります。
  • 各国語化を必要とするファイルの、特定の部分集合だけを、あなたのアプリケーションのバンドルの言語固有リソースディレクトリの中に含めましょう。各国語化の必要がないリソースは、その余計なコピーを作成する必要はありません。バンドル読み込みコードは大域リソースを各国語化リソース同様にチェックし、もっとも適切なものを返します。
  • 任意のリソースをユーザのシステムの適切な「ライブラリ」サブディレクトリに配置するためには、インストーラを使用しましょう。任意のリソースとは、文書テンプレートやその他の、アプリケーションには役に立つが、その起動には必要ないもののことです。アプリケーション関連のファイルは~/Library/Application Support または /Library/Application Supportのアプリケーション特有のサブディレクトリに置くべきです。ファイルをどこへインストールするかの詳細は、File System Overviewを参照してください。
  • あなたのアプリケーション実行ファイルの、リソースフォークにデータを記録することは避けましょう。リソースフォークはアプリケーション関連リソースを記録するために、適切な手段ではありません。代わりにあなたのリソースは、あなたのアプリケーションバンドル内部の個別のファイルとして記録してください。リソースはバンドル構造のどこに属するかの詳細は、Bundle Programming Guideを参照してください。

スレッド

あなたのアプリケーションをデザインする際、平行して行うことのできない操作について考えてみましょう。あなたのアプリケーションのマルチスレッド化は、長い計算をあなたのメインイベントループから分割したスレッドに追いやることで、あなたのユーザインタフェースの応答性を向上させます。また、マルチスレッド化は、特にマルチプロセッサシステム上で一部の作業の処理速度を向上させることもできます。 もちろん、スレッド化はまた、共有されたデータ構造体が、異なるスレッドによって破壊されないことを保障するために、実装の間に大きな注意を要します。スレッド化技術についての詳細は、Multithreading Programming Topicsを参照してください。


←第2部:Macintosh体験
→第5章:Mac OS Xの技術を使用する