iOS 設定バンドルの実装
iOS では、Foundation フレームワークは、環境設定データを格納するための低レベルメカニズムを提供します。アプリには、環境設定を提示するための 2 つのオプションがあります。
- アプリ内の環境設定を表示します。
- 設定バンドルを使用して、設定アプリから環境設定を管理します。
どちらのオプションを選択するかは、ユーザーがどのように環境設定とやりとりするかによって異なります。設定バンドルは、一般に、環境設定を表示するための好まれるメカニズムです。しかし、構成オプションや他の頻繁にアクセスされる環境設定が含まれているゲームやその他のアプリでは、代わりにアプリ内にそれらを表示することが好まれます。どのようにそれらを表示するかにかかわらず、NSUserDefaults クラスを使用してコードから環境設定値にアクセスして下さい。
この章では、アプリの設定バンドルの作成について説明します。設定バンドル には、環境設定の構造とプレゼンテーションスタイルを記述するファイルが含まれます。設定アプリはこの情報を使用してアプリのエントリを作成し、カスタム環境設定ページを表示します。
設定と構成オプションの管理方法と表示方法については、iOS ヒューマンインターフェイスガイドライン を参照してください。
設定アプリのインターフェース
設定アプリは、アプリの環境設定をナビゲートするためのページの階層的なセットを実装します。設定アプリのメインページには、その環境設定をカスタマイズできるシステムアプリとサードパーティアプリが一覧表示されます。サードパーティのアプリを選択すると、そのアプリの環境設定が表示されます。
設定バンドルを持つすべてのアプリには、メインページ と呼ばれる少なくとも 1 ページの環境設定があります。あなたのアプリがいくつかの環境設定しか持たない場合、必要なのはメインページだけです。ただし、環境設定の数が大きすぎてメインページに収まらない場合は、メインページまたは他の子ページをリンクする子ページを作成できます。作成できる子ページの数には特別な制限はありませんが、できるだけ単純で簡単に移動できる環境設定を維持するように努めてください。
各ページの内容は、構成する 1 つ以上のコントロールで構成されます。表 4-1 に、設定アプリでサポートされているコントロールの型と、各型の使用方法を示します。この表には、設定バンドルの構成ファイルに保管されている生のキー名も表示しています。
表 4-1 環境設定のコントロール型
コントロール型 | 説明 |
テキストフィールド | テキストフィールド型は、タイトル(オプション)と編集可能なテキストフィールドを表示します。この型はユーザーがカスタムの文字列値を指定する必要がある環境設定に使用できます。 この型のキーは PSTextFieldSpecifier です。 |
タイトル | タイトル型は、読み取り専用の文字列値を表示します。この型を使用すると、読み取り専用の環境設定値を表示できます。(環境設定に不可解な値または非直感的な値が含まれる場合、この型を使用すると、可能な値をカスタムの文字列にマッピングできます。 この型のキーは PSTitleValueSpecifier です。 |
トグル スイッチ | トグルスイッチ型は、ON / OFF トグルボタンを表示します。この型を使用して、2 つの値のうちの 1 つのみを持つ環境設定を構成できます。通常、この型を使用してブール値を含む環境設定を表現しますが、ブール値以外の値を含む環境設定でもこの型を使用できます。 この型のキーは PSToggleSwitchSpecifier です。 |
スライダ | スライダ型は、スライダコントロールを表示します。この型は、値の範囲を表す環境設定に使用できます。この型の値は、指定する最小値と最大値を持つ実数です。 この型のキーは PSSliderSpecifier です。 |
多値 | 多値型では、ユーザーが値のリストから 1 つの値を選択できます。この型は、相互に排他的な値のセットをサポートする環境設定に使用できます。値はどの型でもかまいません。 この型のキーは PSMultiValueSpecifier です。 |
グループ | グループ型は、単一のページに環境設定のグループを編成するためのものです。グループ型は構成可能な環境設定を表しません。1 つ以上の構成可能な環境設定の直前に表示されるタイトル文字列を含むだけです。 この型のキーは PSGroupSpecifier です。 |
子パネル | 子パネル型を使用すると、ユーザーは新しい環境設定ページに移動できます。この型を使用して、階層的環境設定を実装します。この環境設定型の構成方法と使用方法の詳細については、階層的環境設定 を参照してください。 この型のキーは PSChildPaneSpecifier です。 |
各環境設定型の形式の詳細については、設定アプリケーションスキーマリファレンス を参照してください。設定ページファイルの作成および編集方法については、設定バンドルの作成と変更 を参照してください。
設定バンドル
設定バンドルは Settings.bundle という名前で、アプリのバンドルの最上位ディレクトリにあります。このバンドルには、環境設定の個々のページを説明する 1 つ以上の設定ページファイルが含まれています。また、画像やローカライズされた文字列などの環境設定を表示するのに必要な他のサポートファイルも含まれています。表 4-2 に、一般的な設定バンドルの内容を示します。
表 4-2 Settings.bundle ディレクトリの内容
項目名 | 説明 |
Root.plist | ルートページの環境設定を含む設定ページファイル。このファイルの名前は Root.plist でなければなりません。このファイルの内容は、設定ページのファイル形式 で詳しく説明しています。 |
追加の .plist ファイル | 子パネルを使用して一連の階層的環境設定を構築する場合、各子パネルの内容は別々の設定ページファイルに格納されます。これらのファイルに名前を付けて、それらを正しい子パネルに関連付ける責任があなたにはあります。 |
1 つ以上の .lproj ディレクトリ | これらのディレクトリは、設定ページファイルのローカライズされた文字列リソースを格納します。各ディレクトリには、文字列ファイルが 1 つ含まれ、そのタイトルは、設定ページファイルで指定されます。文字列ファイルは、ローカライズされた文字列をあなたの環境設定に提供します。 |
追加の画像 | スライダコントロールを使用する場合は、スライダの画像をバンドルの最上位ディレクトリに格納できます。 |
設定バンドルに加えて、アプリバンドルにはアプリ設定用のカスタムアイコンを含めることができます。設定アプリは、アプリの環境設定のエントリの横にあなたが提供したアイコンを表示します。アプリアイコンとその指定方法については、iOS のアプリプログラミングガイド を参照してください。
設定アプリが起動すると、各カスタムアプリで設定バンドルの有無をチェックします。見つけた各カスタムバンドルについて、そのバンドルをロードし、設定のメインページ内の対応するアプリ名とアイコンを表示します。ユーザーがあなたのアプリに属する行をタップすると、設定アプリは設定バンドルの Root.plist 設定ページファイルをロードし、そのファイルを使用してアプリの環境設定のメインページを構築します。
バンドルの Root.plist 設定ページ・ファイルをロードするだけでなく、設定アプリは、必要に応じてそのファイル用の言語固有のリソースもロードします。各設定ページファイルには、ユーザーが閲覧可能な文字列のローカライズされた値を含む関連した .strings ファイルを含めることができます。あなたの表示用の環境設定を準備すると、設定アプリはユーザーの優先言語で文字列リソースを探し、表示する前に環境設定ページに置き換えます。
設定ページのファイル形式
各設定ページファイルは、iPhone の設定プロパティリストファイル形式 (構造化ファイル形式) で保管されます。設定ページファイルを編集する最も簡単な方法は、Xcode の組み込みエディタ機能を使用することです。編集のための設定ページの準備 を参照してください。また、Xcode ツールに付属の Property List Editor (プロパティリストエディタ) アプリを使用して、プロパティリストファイルを編集することもできます。
各設定ページファイルのルート要素には、表 4-3 に示したキーが含まれています。実際に必要なキーは 1 つのみですが、両方を含めることをお勧めします。
表 4-3 環境設定の設定ページファイルのルートレベルキー
キー | 型 | 値 |
PreferenceSpecifiers (必須) | 配列 | このキーの値は辞書の配列であり、各辞書には単一のコントロールの情報が含まれています。コントロール型のリストについては、表 4-1 を参照してください。各コントロールに関連付けられているキーの説明については、アプリケーションスキーマ設定のリファレンス を参照してください。 |
StringsTable | 文字列 | このファイルに関連付けられている文字列ファイルの名前。このファイルのコピー (適切なローカライズされた文字列を使用) は、バンドルの言語特有のプロジェクトディレクトリのそれぞれに配置する必要があります。このキーを含めないと、このファイル内の文字列はローカライズされません。これらの文字列の使用方法については、ローカライズされたリソース を参照してください。 |
階層的環境設定
環境設定を階層的に整理しようとする場合は、各ページに別個の .plist ファイルを定義しなければなりません。各 .plist ファイルには、そのページにのみ表示される環境設定のセットが含まれています。あなたのアプリのメイン環境設定ページは、常に Root.plist というファイルに保管されています。追加ページには任意の名前を付けることができます。
親ページと子ページの間のリンクを指定するには、親ページに子パネルのコントロールを含めて下さい。子パネルのコントロールは、タップすると設定の新しいページを表示する行を作成します。子パネルのコントロールの File キーは、子ページの内容で .plist ファイルの名前を識別します。Title キーは、子ページのタイトルを識別します。このタイトルはまた、子ページを表示するために使用されるコントロールのテキストとしても使用されます。設定アプリは自動的に子ページ上のナビゲーションコントロールを提供し、ユーザーは親ページに戻ることができます。
図 4-1 は、この階層的なページセットの仕組みを示しています。図の左側は .plist ファイルを示し、右側は対応するページ間の関係を示しています。
図 4-1 子パネルを使用した環境設定の整理
ローカライズされたリソース
環境設定にはユーザーが閲覧できる文字列が含まれているため、それらの文字列のローカライズ版を設定バンドルに提供する必要があります。環境設定の各ページには、バンドルでサポートされている各ローカル化用の .strings ファイルが関連付けられています。設定アプリでローカル化をサポートするキーが見つかると、適切にローカライズされた .strings ファイルで一致するキーがあるかどうかチェックされます。見つかった場合は、そのキーに関連付けられている値を表示します。
.strings ファイルなどのローカライズされたリソースを探す場合、設定アプリは他の iOS アプリが従うのと同じルールに従います。最初に、ユーザーの優先言語設定に一致するリソースのローカライズ版を検索しようとします。そのようなリソースが存在しない場合は、適切な代替言語が選択されます。
文字列ファイルの形式、言語特有のプロジェクトディレクトリ、言語特有のリソースをバンドルから取得する方法については、国際化およびローカル化ガイド を参照してください。
設定バンドルの作成と変更
Xcode は、現在のプロジェクトに設定バンドルを追加するためのテンプレートを提供します。デフォルトの設定バンドルには、ローカライズされたリソースを格納するための Root.plist ファイルとデフォルトの言語ディレクトリが含まれています。必要に応じてこのバンドルを拡張して、設定バンドルに必要な追加のプロパティリストファイルとリソースを含めることができます。
設定バンドルの追加
設定バンドルをあなたの Xcode プロジェクトに追加するには:
- [File]   > [New]   > [New File] と選択します。
- iOS では [Resource (リソース)] を選択し、Setting Bundle (設定バンドル) テンプレートを選択します。
- ファイルに Settings.bundle という名前を付けます。
新しい設定バンドルをあなたのプロジェクトに追加するだけでなく、Xcode はそのバンドルをアプリターゲットのコピーバンドルリソースのビルド段階に自動的に追加します。したがって、あなたは設定バンドルのプロパティリストファイルを変更し、必要なリソースを追加するだけです。
新しい 設定バンドルの構造は次のとおりです。
Settings.bundle/
Root.plist
en.lproj/
Root.strings
編集のため設定ページを準備
設定バンドル内のプロパティリストファイルのどれかを編集する前に、Xcode エディタを構成して、これらのファイルの内容を iPhone 設定として成形する必要があります。Xcode はこれを Root.plist ファイルに対して自動的に行いますが、追加のプロパティリストファイルを手動で成形する必要があります。ファイルを iPhone の設定として成形するには、以下の手順を実行して下さい。
- ファイルを選択します。
- Control キーを押しながらエディタウィンドウをクリックし、Property List Type (プロパティリストタイプ)   > iPhone Setting (設定) plist を、それがまだ選択されていない場合は選択します。
プロパティリストを成形すると、ファイルの内容を簡単に理解して編集することができるようになります。Xcode は、選択された書式に適した、人間が読める文字列 (図 4-2 を参照の事) に置き換えます。
図 4-2 Root.plist ファイルの成形された内容
設定ページを構成:説明
この節では、必要なコントロールを表示するように設定ページを構成する方法を示します。説明 (tutorial) の目的は、図 4-3 のようなページを作成することです。プロジェクト用の設定バンドルをまだ作成していない場合は、これらの手順に進む前に、設定バンドルの追加 の説明に従って作成する必要があります。
図 4-3 ルートの設定ページ
- Preference Items キーを表示して、テンプレートに付属するデフォルトの項目を表示します。
- Item 0 のタイトルを Sound に変更します。
- Preference Items の Item 0 を表示します。
- Title キーの値を Group から Sound に変更します。
- Type キーを Group のままにします。
- 項目の開閉用の三角形をクリックして、その内容を非表示にします。
- 名前を変更した Sound グループの最初のトグルスイッチを作成します。
- Preference Items の Item 2 (トグルスイッチ項目) を選択し、Edit > Cut を選択します。
- Item 0 を選択し、Edit > Paste を選択します。(これにより、トグルスイッチ項目がテキストフィールドの項目の前に移動します)。
- トグルスイッチ項目を表示して、構成キーを表示します。
- Title キーの値を Play Sounds に変更します。
- Identifier キーの値を play_sounds_preference に変更します。
- 項目の開閉用の三角形をクリックして、その内容を非表示にします。
- Sound グループの 2 番目のトグルスイッチを作成します。
- Item 1 (Play Sounds トグルスイッチ) を選択します。
- Edit > Copy を選択します。
- Edit > Paste を選択して、最初のトグルスイッチの直後にあるトグルスイッチのコピーを配置します。
- 新しいトグルスイッチ項目を表示して、その構成キーを明らかにします。
- Title キーの値を 3D Sound に変更します。
- Identifier キーの値を 3D_sound_preference に変更します。
- 項目の開閉用の三角形をクリックして、その内容を非表示にします。
- Item 3 をグループコントロールに変更し、User Info と名前を付けます。
- Preferences Items の Item 3 をクリックします。これにより、項目型のリストを含むポップアップメニューが表示されます。
- ポップアップメニューから Group を選択して、コントロールの型を変更します。
- Item 3 の内容を表示します。
- Title キーの値を User Info に設定します。
- 項目の開閉用の三角形をクリックして、その内容を非表示にします。
- Name フィールドを作成します。
- Preferences Items で Item 4 を選択します。
- ポップアップメニューを使用して、その型を Text Field に変更します。
- Title キーの値を Name に設定します。
- Identifier キーの値を user_name に設定します。
- 項目の開閉用の三角形をクリックして、その内容を非表示にします。
- 経験値レベル (Experience Level) の設定を作成します。
- Item 4 を選択します。
- Control キーを押しながらエディタウィンドウをクリックし、Add Row を選択して新しい項目を追加します。
- 新しい項目の型を Multi Value に設定します。
- 項目の内容を表示し、そのタイトルを Experience Level に設定し、その ID を experience_preference に設定、デフォルト値を 0 に設定します。
- デフォルト値 (Default) キーが選択された状態で、Control キーを押しながら Add Row を選択してクリックし、Titles 配列を追加します。
- Titles 配列を選択し、Return キーを押して新しい副項目 (subitem) を追加します。
- 2 つの副項目を追加して合計 3 つの項目を作成します。
- 副項目の値を Beginner、Expert、Master に設定します。
- キーの副項目を非表示にします。
- Values 配列用の新しい項目を追加します。
- Values 配列に 3 つの副項目を追加し、それらの値を 0,1,2 に設定します。
- item 5 の内容を非表示にします。
- 最後のグループを設定ページに追加します。
- 新しい項目を作成し、その型を Group にし、そのタイトルを Gravity に設定します。
- 別の新しい項目を作成し、その型を Slider に設定し、その ID を gravity_preference にし、デフォルト値を 1 に、最大値を 2 に設定します。
この時点で、最初の設定グループを終了し、User Info グループを作成する準備が整いました。
追加の設定ページファイルの作成
設定バンドルのテンプレートは、アプリの一番上の設定ページを定義する Root.plist ファイルを含んでいます。追加の設定ページを定義するには、追加のプロパティリストファイルを設定バンドルに追加しなければなりません。
Xcode の設定バンドルにプロパティリストファイルを追加するには、以下の手順を実行します。
- File > New > New File を選択します。
- iOS の下で Resource を選択し、Property List (プロパティリスト) テンプレートを選択します。
- 新しいファイルを選択して、その内容をエディタに表示します。
- Control キーを押しながらエディタペインをクリックし、Property List Type > iPhone Setting plist を選択して内容をフォーマットします。
- Control キーを押しながらエディタペインをもう一度クリックし、Add Row (行を追加) を選択して新しいキーを追加します。
- 必要な追加キーを追加して構成します。
設定バンドルに新しい設定ページを追加したら、設定ページを構成:説明 の説明に従ってページの内容を編集できます。ページの設定を表示するには、階層的環境設定 で説明したように、子パネルのコントロールからそれを参照しなければなりません。
シミュレートされたアプリの環境設定のデバッグ
iOS Simulator (シミュレータ) は、アプリを実行するときに 〜/Library/Application Support/iOS Simulator/User/Applications/<APP_ID>/Library/Preferences にアプリの環境設定値を格納します。ここで <APP_ID> は プログラムで生成されたディレクトリ名で、あなたのアプリを識別するため iOS が使用します。
アプリをビルドするたびに、Xcode はアプリの環境設定やその他の関連ライブラリファイルを保持します。テスト目的で現在の環境設定を削除する場合は、Simulator からアプリを削除するか、iOS Simulator メニューから Reset Contents and Settings を選択して下さい。