今回からは、最新のXcode 3とInterface Builder 3を使い、新規作成したテンプレート(雛形)プロジェクトを拡張していく作業に入ります。Cocoa Frameworkを用いて再開発するアプリケーションは、MOSA Exchangeに登録されている「しんぶんし v2.1」と言うCarbonで開発された対称写真作成ユーティリティです。
さて、ここから「実況中継」となります(笑)。Carbonからの移植過程で発生したどんな小さな問題点もピックアップして提示したいと思います。まず最初にXcodeを起動してファイルメニューの「新規プロジェクト...」から「アシスタント」をオープンし、開発するアプリケーションの雛形プロジェクトの種類を選びます。「しんぶんし」は、新規ドキュメントを複数オープンするタイプのアプリケーションではありませんので、「Cocoa Document-based Application」でなく「Cocoa Application」の方を選択します。
ちなみに、アプリケーションのモデルオブジェクトのデータ管理用として「Core Data」を採用するという手段もありますが、その場合には「Core Data Application」を選ぶことになります。しかし、「しんぶんし」はそれほど複雑なメインデータ構造を必要としませんので、とりあえずこのアイデアは却下しました。ただし、通常版の開発が一段落したら、モデルオブジェクトの主役をCore Dataベースへ切り替える作業も実践してみたいと考えています。楽しみは後に取っておきましょう(笑)。
プロジェクト名は「ShinbunShi3」とします。名称に日本語を使っても問題はないとは思いますが、昔からの癖(防衛本能)で英語表記とします。出来上がったプロジェクトフォルダ内には「English.lproj」が作成されています。このフォルダには、英語ローカライズされたMainMenu.nibとinfoPlist.stringsが保存されています。これらは完成したアプリケーションパッケージの「Resources」フォルダ内に複製され利用されます。ところで「しんぶんし3」は全リソースを日本語ローカライズするので、「English.lproj」だけでなく「Japanese.lproj」フォルダも必要となります。
不思議なことに、Mac OS Xの言語環境が日本語でも、またプロジェクト名を日本語に設定しても、強制的に「English.lproj」が作られてしまい、日本語ローカライズされたファイルを含む「Japanese.lproj」を作る方法が見つかりません。Xcodeの環境設定で新規プロジェクトのディフォルト言語を設定できるかどうか探してみましたが、どうもそうした設定は見当たらないようです(どなたか方法をご存知ありませんか?)。英語メニューのタイトルやアイテムを手動で日本語(ガイドラインに準拠させた)に書き換えるのは結構面倒なので困ってしまいました。
ところが、Interface BuilderのFileメニュー「New...」から「Choose a Template」をオープンし、Cocoaタブから「Appleication」を選ぶと、現在のMac OS Xの言語環境にローカライズされたMainMenu.nib(日本語版)が作成できることが分かりました。それを、新しく用意した「Japanese.lproj」フォルダに保存してやれば、日本語ローカライズされたメニューを表示する事が可能です。また、infoPlist.stringsの方は、旧プロジェクトで使用していた英語版と日本語版の内容を若干変更(バージョン番号を3.0.0に)して再利用することにしました。
この作業での注意点は、日本語化されているMainMenuオブジェクトをカット&ペーストで別のnibファイルへ移さないことです。ペーストするとメニューの各タイトルにアサインされているアクション(終了ではFirst Responderに対するterminate:)がすべてクリアされてしまいます。にしても、Interface Builderでは日本語ローカライズしたnibファイルを出力できるわけですから、Xcodeでも新規プロジェクトの対象となる言語が何なのかぐらい聞いて欲しいてものです(私がやり方を知らないだけならゴメンナサイ)。
MainMenu.nibのMainMenuオブジェクトを編集して、アプリケーションメニューの「アバウト」や「終了」アイテムの「NewApplication」表示を「しんぶんし3」(英語用はShinbunShi3)に変えます。 アプリケーションメニューのタイトルは、InfoPlist.stringsの「CFBundleName」の内容が反映されますので、こちらも同様に変更します。メインウィンドウのタイトルも、インスペクタから「画像一覧」(英語版はImage List)に変更します。また、インスペクタの「frame name」に何らかの名称を(今回はMain)代入しておくと、そのウィンドウの表示位置は自動で記録され、次の起動時に前回と同じ位置にオープンされるようになります。
開発の過程で関連リソースファイル(アイコンや画像)はどんどん増えていきます。そこで、プロジェクトフォルダ内にも「Resources」フォルダを作成して、その中にリソース関連ファイルをまとめておくことにします(整理整頓)。まずそこに「English.lproj」と「Japanese.lproj」を入れ直します。そして、XcodeのプロジェクトウィンドウのResourcesグループに登録されているInfoPlist.stringsとMainMenu.nibの2つを一度外し、新しい保存場所から再登録してやります(リンクの再指定)。
この時の再登録方法はかなりイレギュラルですので注意してください。「English.lproj」や「Japanese.lproj」フォルダを一覧にドラッグ&ドロップしてもだめです。英語用と日本語用のInfoPlist.stringsとMainMenu.nibを、それぞれ個別にドロップします。登録後に、InfoPlist.stringsとMainMenu.nibの左側の三角をクリックして開くとEnglishとJapaneseという2種類の項目が表示されていればOKです。これにより、プロジェクトは2カ国語ローカライズ用リソースを管理可能となったわけです。
とりあえず今回はここまでとして、プロジェクトをXcodeでMakeして起動させてみます。システム環境設定「言語環境」の言語タブで「日本語」と「English」の優勢順位を切り替えアプリケーションを起動し、それぞれの言語でメニューが表示されるかどうか確認してください。これがうまくいけばローカライズの仕組みは正常に働いています。また、Finderから完成したアプリケーションの情報を表示してバージョンを確認してみてください。そこにInfoPlist.stringsに記載した内容が表示されていれば、こちらもOKです。
次回は、ShinbunShi3プロジェクトのInfo.plistを編集してアイコンを追加してみます。それから、手始めとしてアバウトを表示するようなソースコードを追加してみましょう。 この連載で作成したプロジェクトファイルは、MOSA Exchangeに順次アップロードしていく予定です。今回分の名称は「ShinbunShi3_07_11_30.zip」です。