環境設定のベストの実践
CFPreferences は、環境設定キーと値を格納および取得するための Apple の標準 API であり、呼び出しプロセスをファイルなどへの書き込みのメカニズムではなく、ネイティブな型とキー/値のペアの意味に集中させることができます。それは便利な API も提供していますが、間違った使い方も簡単です。この文書では、どの API を使用するのが適切であるかの概要と、プロセスの境界にわたって環境設定を同期する方法について説明します。
いつどの API を使用するか
以下の一般的な指針原則が CFPreferences API に適用されます。
- 通常は、CFPreferencesCopyAppValue を使用して環境設定キーを読み取る必要があります。
- "現在のユーザー/任意のホスト" の環境設定キーを書き込むには、CFPreferencesSetAppValue を使用する必要があります。
- 現在のユーザーのホスト別環境設定を書き込む必要がある場合は、CFPreferencesSetValue を使用して下さい。これが絶対に必要であることを確認してください。
文書では別々に扱われていますが、高レベルの API と低レベルの API は排他的ではありません。アプリケーションのいくつかの部分で高レベルの API を使用し、別の部分で低レベルの API を使用することが適切かもしれません。たとえば、CFPreferencesSetValue(key, value, app, user, host) を使用して環境設定キー/値ペアを設定し、CFPreferencesCopyAppValue (key, value, app) を使用して読み込むことができます。実際には、検索パスを横切るため、後者の関数で読み取りたいでしょう。
高レベル API
可能な限り、CFPreferencesCopyAppValue を使用して環境設定キーを取得する必要があります。この関数は、一致するキーを探す検索パスを走査し、最も的確なドメインからの値を返します。
特定のマシンのユーザは、"ワークグループマネージャ" または "システム環境設定" の "アカウント" 環境設定パネルの "機能拡張" オプションを使用して "管理" することもできます。これらのメカニズムのいずれかによって、ユーザに環境設定値が強制的に設定される可能性があります。これらの値も CFPreferencesCopyAppValue API によって取得されます。アプリケーションがこの種の管理に適切に応答するようにするには、この関数を使用する必要があります。
低レベル API
アプリケーションが "現在のホスト" と "全てのホスト" を区別する必要がある場合は、低レベルの API を使用して下さい。何らかの理由で特定のドメインのキー/値のペアを検索する必要がある場合は、CFPreferencesCopyValue を使用する必要があります。一般的な取得メカニズムとしてこの関数を使用しないでください。
プロセス境界を越えた環境設定の同期
CFPreferences 同期の経験則:
- 絶対に必要なときにのみ同期する
- プロセス境界を越えて通信する必要がある場合は、適切な細分性を備えた通知を使用して、1) を念頭に置いてください。通常、これは、クライアントのプロセスでフラグを設定することを意味し、変更されたキーが必要な場合にのみ、同期をトリガーする必要があります。
OS X の多くのプロセスは、別のプロセスで使用するために、環境設定のキー/値のペアを書き込みます。環境設定キー/値のペアが他のプロセスで自動更新することは便利ですが、すべての状況で自動更新を保証するとパフォーマンスが低下し、また関連する環境設定が一貫して読み書きされることを保証することが困難にもなります。プロセスはいつ新しい情報を自分のスペースに受け入れるかを選択する必要が常にあります。環境設定値の場合、CFPreferencesSynchronize と CFPreferencesAppSynchronize は情報の急所を提供する関数呼び出しです。ただし、通常は、環境設定キーを読み込む前にこれらの関数を呼び出さないでください。
環境設定ファイルの位置とデバッグ
環境設定ファイルは、システムまたはユーザの環境設定ディレクトリに格納されます。OS X のバージョン 10.0 から 10.4 では、これらはそれぞれ /Library/Preferences 及び、ユーザのホームディレクトリの /Library/Preferences にあります。アプリケーションをデバッグするときには、これらのファイルを調べて、環境設定が正しく格納されているかどうかを判断することが便利な場合があります。ディレクトリにプログラムでアクセスする必要がある場合は、NSSearchPathForDirectoriesInDomains API を使用する必要がありますが、通常はそうする必要はありません。
登録ドメイン (環境設定と設定のプログラミングガイド の "デフォルトのドメイン" を参照の事) で設定した環境設定が環境設定ファイルには格納されて いない ことに注意してください。別の言い方をすれば、環境設定ファイルには登録ドメインの値とは異なる値しか格納されないため、アプリケーションを実行した後に環境設定ファイルに "デフォルトの値" があるとは期待しないで下さい。
管理された環境設定
OS X v10.2 では、"管理された環境設定" の概念が導入されました。関数 CFPreferencesAppValueIsForced は、与えられたキーがユーザに課せられているかどうかを決定します。管理されたキーの場合、ユーザがキーの値を変更できるユーザインターフェイスを無効にする必要があります。
前の章 次の章