● ToolBox API徒然草(2006/03/21)

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

 〜 アプリケーションのUniversal Binary化(その3) 〜


今回は、MWC用プロジェクトの移植作業において、Xcode側でしなければいけない追加処理について解説します。Info.plistやMOSA_Prefix.pchファイルのプロジェクトへの登録、SDKの種類の選択、コンパイルやリンクオプションの設定を行います。

前回は、Xcodeのファイルメニューにある「プロジェクトの読み込み...」機能を利用して、開発プロジェクトをMWC用からXcode用へ移植しました。たとえMWC用のプロジェクトが完全だとしても、移植後のXcode用プロジェクトでは、Resourcesフォルダ内の以下のファイルが未登録のままであることも指摘しました。

1.English.lprojフォルダとその中身のInfoPlist.stringsテキストファイル
2.Japanese.lprojフォルダとその中身のInfoPlist.stringsテキストファイル
3.MosA.icnsアイコンファイル
4.MosD.icnsアイコンファイル

アプリケーションパッケージのResourcesフォルダに保存するファイルについては、Xcodeのプロジェクトウィンドの「グループとファイル」に表示されている、Resources(フォルダの形をした小アイコン)に登録しておく必要があります。

3と4のアイコンファイルはドラッグ&ドロップで、そのままResources内に登録すればOKです。ところが、1と2のEnglish.lprojとJapanese.lprojフォルダは、そのままドラッグ&ドロップで登録しても、アプリケーション作成(Make)後にパッケージ内に保存されません。何と!フォルダではなく、InfoPlist.stringsファイル自身をドラッグ&ドロップして登録します。まずは、English.lprojフォルダ内のInfoPlist.stringsを登録します。続いてJapanese.lprojフォルダ内のInfoPlist.stringsを登録します。すると、Resources内に表示されているInfoPlist.stringsの左側に三角アイコンが付き、それをクリックすることで「English」と「Japanese」という表示が現れます。これにより、2種類(2言語対応)のInfoPlist.stringsがちゃんと登録されていることが判断できます。

筆者は、このInfoPlist.stringsの登録方法を発見するまで、かなり長い間苦しみました(涙)。どう考えてもおかしなユーザインターフェースだと思うのですが?ひょっとすると何か別のアプローチがあるのかもしれません。また、今回のプロジェクトでは用意していませんが、English.lprojやJapanese.lprojフォルダに個別に保存しておいた各言語用(ローカライズした)nibファイルやリソースファイルなども、InfoPlist.stringsと同様に、各ファイル自身をResourcesへとドラッグ&ドロップすることで登録可能です。

次に、「グループとファイル」からプロジェクトアイコン(今回の名称はMOSA)を選択し、ツールバーの「i」ボタンをクリックします(ダブルクリックやファイルメニューからの「情報を見る」でもよい)。すると「"プロジェクト"MOSA""の情報」というウィンドウがオープンします。上部の「一般」タブを選択し、「ターゲットSDKを使用したクロス開発」メニューで「Mac OS X 10.4(Universal)」を選択します。続いてタブを「ビルド」に切り換え、「コレクション」メニューから「アーキテクチャ」を選択し、下に表示されている「アーキテクチャ」をダブルクリックします。この時に表示されたダイアログで「PowerPC」と「Intel」の両方をチェックしておけば、このプロジェクトの対象アプリケーションは、Universal BinaryとしてMakeされることになります。

今度は、アプリケーションに関する情報が設定されているInfo.plistファイルをプロジェクトに登録します。この登録を行わないと、Makeされたアプリケーションパッケージは不完全のままであり起動することはできません。まず、Info.plistをプロジェクトファイル(MOSA.xcodeproj)と同階層に保存します。そして、「グループとファイル」の「ターゲット」をオープンし、その中のアプリケーション名(MOSA)を選択して、ツールバーの「i」ボタンをクリックします(ダブルクリックやファイルメニューの「情報を見る」でもよい)。すると「"ターゲット"MOSA""の情報」というウィンドウがオープンします。「ビルド」タブの「コレクション」メニューから「パッケージング」を選び、表示された項目一覧の中から「Info.plistファイル」をダブルクリックします。するとファイル名を入力するためのダイアログがオープンしますので、そこに「Info.plist」と入力すれば登録は完了です。

最後はプレフィックスヘッダファイルの登録です。こちらの名称は「MOSA_Prefix.pch」と付け、やはりプロジェクトファイルと同階層に保存しておきます。先ほどと同様な操作で「コレクション」メニューから「言語」を選び、オプション項目の一覧で「プレフィックスヘッダ」をダブルクリックして「MOSA_Prefix.pch」と入力します。続いて、すぐ下の「プレフィックスヘッダをプリコンパイルする」にチェックを入れると登録完了となります。これにより、プレフィックスヘッダ内に記述されているQuickTime.h(Carbon.hも含まれる)がプリコンパイルされるので、アプリケーションのMake時間を大幅に短縮することが可能となります。

その他のオプションも「"ターゲット"MOSA""の情報」の「ビルド」において設定します。こうしたオプションは、「"プロジェクト"MOSA""の情報」の「ビルド」の方でも設定できますが、設定内容はターゲットが優先されますので、混乱を避けるために、ターゲットの方でまとめて設定しておくのが良いでしょう。ちなみに、ディフォルトから変更されているオプション項目は、太文字でリスト表示されています。変更されたオプションをまとめて確認したい場合には、「コレクション」メニューから「カスタマイズされた設定」を選択することで一覧することが可能です。MWC用プロジェクトから移植した場合には、そちらで設定されていたオプションがすべて(完全一致ではない)継続設定されています。

コンパイルやリンクのオプションですが、「コード生成」カテゴリーの「デバッグシンボルの生成」「最適化レベル」「関数プロトタイプの不在」等、加えて「リンク」カテゴリーの「ゼロリンク」「標準ライブラリにリンク」などのON/OFFに注意してください。これらの設定は、開発行程の段階によって逐次切り換える必要があるかもしれません。ちなみに「警告」カテゴリーの「推奨されない関数についての警告」ですが、これをONにすると、QuickDrawなどの古いAPIがソースコード内で呼ばれる度に警告が表示されます。すべてモダンなAPIに切り換えてしまった人にとっては弊害は無いのですが、現実的には非常にうっとおしいので、筆者はこのチェックだけは外しています(笑)。

次回は、PowerPC用のソースコードをUniversal Binary化する時に、一般的に注意すべき点をピックアップして解説したいと思います。最大の関門は、 PowerPCとIntel CPUのエンディアンの違いを克服することです。


copyright 2006 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp