● Carbon視点でiPhone探求(2009/02/24)

  このニュースは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

 〜 Info.plistとInfoPlist.stringsとアイコン 〜


今回は、info.plistファイルについてもう少し詳しく調べてみることにします。また、最初の仕事として、Symmetryアプリケーションのアイコン画像(PNG画像ファイル)を用意し、プロジェクトウィンドウに登録してみます。

プロジェクトフォルダに保存されている「Info.plist」(情報プロパティリスト)というXMLファイルは、iPhoneアプリケーションの環境設定ファイルのようなものです。MacアプリケーションのInfo.plistを操作した経験のある人は、その内容が似通っていますので、あまり戸惑うことはないはずです。ただし、いくつかのキーと値のペアーは、iPhoneアプリケーション固有ですので注意が必要です。前回作成したSymmetryプロジェクトにデフォルトで保存されているInfo.plistの内容をテキストエディタでオープンしてみると、その辞書部分のキーと値は、以下の内容であることが分かります。

 <key>CFBundleDevelopmentRegion</key>
 <string>English</string>
 <key>CFBundleDisplayName</key>
 <string>${PRODUCT_NAME}</string>
 <key>CFBundleExecutable</key>
 <string>${EXECUTABLE_NAME}</string>
 <key>CFBundleIconFile</key>
 <string></string>
 <key>CFBundleIdentifier</key>
 <string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
 <key>CFBundleInfoDictionaryVersion</key>
 <string>6.0</string>
 <key>CFBundleName</key>
 <string>${PRODUCT_NAME}</string>
 <key>CFBundlePackageType</key>
 <string>APPL</string>
 <key>CFBundleSignature</key>
 <string>????</string>
 <key>CFBundleVersion</key>
 <string>1.0</string>
 <key>LSRequiresIPhoneOS</key>
 <true/>
 <key>NSMainNibFile</key>
 <string>MainWindow</string>
 <key>CFBundleIconFile</key>
 <string>Symmetry.png</string>

幾つかのキー値に${PRODUCT_NAME}や${EXECUTABLE_NAME}といった表記があります。この箇所については、ビルド時に、Xcodeのビルドオプションに設定されている内容へと置き換わり保存されます。今回の場合は両方とも「Symmetry」となります。ビルドされた「iPhoneシミュレータで起動するアプリケーション」に含まれるInfo.plistの方を調べてみると、不定であったキー値へ正式な文字列が代入されていることが分かります。以下がその部分です。

 <key>CFBundleDisplayName</key>
 <string>Symmetry</string>
 <key>CFBundleExecutable</key>
 <string>Symmetry</string>
 <key>CFBundleIdentifier</key>
 string>jp.co.ottimo.Symmetry</string>
 <key>CFBundleName</key>
 <string>Symmetry</string>

オリジナルにはない2つのキーと値のペアが追加されています。これはiPhoneシミュレータ用のInfo.plistの場合です。実機へインストールした場合には、その内容が異なると予想されます(確認はしていない)。DTSDKNameキーの方には、対応するiPhone SDKのバージョンが記載されていますので、このキー内容を見ることでApp Storeの条件項目が表示されているのかもしれません。

 <key>DTPlatformName</key>
 <string>iphonesimulator</string>
 <key>DTSDKName</key>
 <string>iphonesimulator2.2</string>

Info.plistで重要なのは、CFBundleDisplayNameキーです。このキー値は、iPhoneのホームページに表示されるアイコンの「名称」を指定しています。この部分を次の様に変更すれば、名称表示は「しんぶんし」となります。名称の文字列が長すぎると、表示の途中に「...」が現れ美しくないので注意してください。アプリケーションの名称は日本語で5文字以内、英語なら12文字以内に調整した方が良いでしょう。

 <key>CFBundleDisplayName</key>
 <string>しんぶんし</string>

アプリケーション名がワールドワイドで共通であれば問題ありませんが、状況によっては日本語圏と英語圏で別の名称にしたい場合があります。日本語名は「しんぶんし」だが、英語名は「Symmetry」にしたいといった場合です。前回、iPhoneアプリを多言語対応にしたければ、先んじて国別フォルダを用意し、その中に各国語対応リソースファイルを保存すると解説しました。例えば英語用リソースなら「en.lproj」日本語用なら「ja.lproj」フォルダです。このフォルダ名は「 ISOの省略形(ISO 639-1が定義するコード)」だそうです。他の国の名称が知りたければ、関連サイトを調査すれば判明するでしょう。

ローカライズしたアプリケーション名は「InfoPlist.strings」ファイルに記述し、指定国フォルダ(ja.lprojなど)に保存した後、プロジェクトウィンドウへと登録します。例えば、Macアプリケーションでは、名称のローカライズにはCFBundleNameキーを利用しました。また、Finderの情報ウィンドウに表示させるバージョン情報などのローカライズには、CFBundleShortVersionStringやCFBundleGetInfoStringキーを利用しました。以下の様な感じです(MacのInfoPlist.stringsの例)。

CFBundleName = "しんぶんし3";
CFBundleShortVersionString = "しんぶんし version 3.0";
CFBundleGetInfoString = "しんぶんし version 3.0 Copyright 2009 by Ottimo, Inc.";

iPhoneの場合は次の様になります...。

CFBundleDisplayName="しんぶんし";

Macでアプリケーションメニュー用に使われていたCFBundleNameキーは、iPhoneでは使われていないようです。ローカライズ設定がうまく機能しているかどうかは、iPhoneの「設定」アプリケーションの「一般」「言語環境」から利用する「言語」を切り替えることで確認できます。色々と試して問題がないかチェックしておきましょう。リソースが用意されていない言語圏を指定した場合、CFBundleDevelopmentRegionキーに設定されている言語がデフォルトとして使われそうですが、残念ながらそうはなりません。デフォルトとしては、強制的に英語圏リソースが使われるようです。

続いてアイコンを登録してみます。最初に57x57ピクセルの正方形のPNG画像ファイルを用意し、ファイル名を「Icon.png」とします(先頭は大文字なので注意!)。またPNG画像ファイルを保存する時は、アルファーレイア(マスク)を持たないように調整してください。もしアルファーレイアがあるとアイコンが表示されません。アイコン画像ファイルは、プロジェクトの「Resources」フォルダへ単独で登録してください。アイコンをローカライズするケースは少ないと思いますが(辞書アプリとかは必要?)、もしそうする場合には、各国語用のアイコン画像を用意し、それぞれをja.lprojやen.lprojフォルダへ保存してからプロジェクトに登録します。また、登録アイコンのファイル名を変更するには、Info.plistのCFBundleIconFileキー値にファイル名を設定します。例えば、それが「Symmetry.png」であれば、以下の様にCFBundleIconFileキーに設定します。

 <key>CFBundleIconFile</key>
 <string>Symmetry.png</string>

Info.plistでは、iPhoneのユーザインターフェース関わる設定も保有します。それらについては、必要となった時点で逐次解説したいと思います。また、Info.plistに関する詳細な情報については「iPhone OSプログラミングガイド 」の 97ページ「情報プロパティリスト」を参照してください。

次回は、しんぶんし 3( Mac用)でImageFileクラスとして定義していたモデル・オブジェクト(メインデータ構造)を、iPhone用アプリケーションのSymmetryへと移植する作業を行いたいと思います。さて、すんなりと移植可能なのでしょうか?

copyright 2009 Ottimo, Inc. All rights reserved
無断転載・引用禁止