タイトル【小池邦人のプログラミング日記】2000/3/9<NibベースのCarbonアプリを作る その2>カテゴリーProjectBuilder/Interface Builder, Carbon/CF, 小池邦人のプログラミング日記
作成日2001/3/10 10:33:41作成者新居雅行
今回は再び「NibベースCarbonアプリケーション」の開発の話しに戻ります。Developer Tools CD-ROMに入っていた「IBCarbonExample」というサンプルプロジェクトのNibファイルやソースコードを調べてみることにします。

ついに、Apple社からMac OS XがGM版に到達したことが発表されました。3月7日にGM版になり24日には発売開始になるわけですから、えらくタイトなスケジュールです。今頃、Apple社内はてんやわんやの大騒ぎになっているでしょう(笑)。とにもかくにも、Mac OS X用のアプリケーションやドライバーを開発しているデベロッパーとしては、やっとリファレンスとなる「本物」が登場するわけですから非常に喜ばしいことです。ついに戦いが始まるといった心持ちなのですが、肝心のCarbonLibの方はADCのメンバーサイトに「CarbonLib 1.3d6 SDK」が登録されたばかりで、GM版到達にはもう少し時間が掛かりそうな気配です。また、Carbon Event Modelに関するドキュメントについてもまったく進展がありません。これらが24日に間に合うのは、とても無理のような気がします(涙)。だとすれば、一部の人達にとっては、リングには上ぼったが、まだゴングは鳴らずと言った状況が続くわけです。

さっそく、IBCarbonExampleプロジェクトを起動し、Project Builderの「Groups & Files」一覧にどのようなファイルが登録されているのかを見てみます。

 

内容は、前回作成した新規の「Carbon Application (Nib Based)」プロジェクトとまったく同じです。ソースファイルはmain.cひとつで、同じくNibファイルとしてmain.nibがひとつだけ登録されています。main.nibをダブルクリックし、Interface Builderを起動させて、Nibファイルの中身を確認してみます。すると、このNibファイルではメインメニューと、ひとつのウィンドウが編集されており、ウィンドウにはタブコントロールが実装されていることが分かります。タブコントロールの領域内にはデモ用として色々なコントロールが配置されています。これらのコントロールはタブコントロールと階層コントロールの関係を保っています。

 

続いてIBCarbonExampleアプリケーションをコンパイル&リンクして起動させてみました。するとNibファイルで編集&登録されていたウィンドウがオープンされます。タブコントロールの「Widgests」タブと「More Widgest」タブを切り替えることにより、タブ内に表示されるコントロールの内容も切り替えることができます。「Widgests」タブの方には、パスワード、チェックボックス、ラジオボタン、アイコン付きボタン、ポップアップメニューなどが表示されます。パスワードのタイトル「Password:」が入力カラムの選択枠の一部を消してしまっているのは、パブリックβがゆえのご愛敬です(笑)。

 

もう片方の「More Widgest」タブの方にも、ボタン、スライダー、ピクチャー、プログレスバーなどを含めた数多くのコントロールが表示されます。ちなみに、「Widgests」タブの方でパスワードを入力していて、そのまま「More Widgest」タブに切り替えると、文字入力用のキャレットが入力位置に残ってしまいます。これもパブリックβのバグ、もしくはソースコード自身のバグだと思われます。

 

アプリケーションのメニューには、Fileメニュー、Editメニュー、Windowメニュー、Helpメニューが表示されています。しかし、ちゃんと機能が実装されているメニューアイテムは、ひとつもありません。ただし、ウィンドウでパスワードを入力している時には、Editメニューの中のCut、Copy、Paste、Clear、Sellect Allが利用できるようです。

続いて、唯一のソースコードであるmain.cをオープンしてみます。IBCarbonExampleアプリケーションのmain()ルーチンでは、CreateNibReference()というAPIを利用してmain.nibファイルのリファレンス(IBNibRef)を得て、それを利用することでアプリケーションのメニューやウィンドウを構築する仕組みになっています。

 

実は、Carbonアプリケーションならば、こうしたNibファイルへアクセスするためのAPIは、Mac OS X環境だけでなくMac OS 9環境でも利用できるようになっています。Nibファイルアクセス用のAPIは、Universal Interfacesの「IBCarbonRuntime.h」に定義されています。

 

ただし、IBCarbonRuntime.hは、Universal Interfacesのバージョンが3.4以上でないと含まれていませんので注意してください。加えて、こうしたNibファイル関連のAPIは、CarbonLibのバージョンが1.1以上でないと利用することができません。

ここで、IBCarbonExampleプロジェクトを一端離れて、最近、以下のAppleサイトに登録された「URLAccessSample」というサンプルを見てみます。

◇URLAccessSample 1.0
 http://developer.apple.com/samplecode/Sample_Code/Networking/URLAccessSample.htm

 

このサンプルはMetrowerks CodeWarriorのプロジェクトとして供給されています。サンプルの内容はURL Access Managerの使用方法を習得するための簡単なアプリケーションです。しかし、ソースコードの中を調べてみると、CreateNibReference()、CreateNibReferenceWithCFBundle()、SetMenuBarFromNib()、CreateWindowFromNib()といったNibファイル関連のAPIがバシバシ利用されていることが分かります。ところが、このサンプルプロジェクトのフォルダ内を見てみると、アプリケーションからアクセスしているnibファイルがどこにも見あたらないのに気づきます。そうです、このアプリケーションはパッケージ化されており、Nibファイルやアプリケーション自体も「URLAccessSample.app」フォルダ内に隠蔽されているのです。Carbon SDKに含まれる「PackageTool」でURLAccessSample.appを通常のフォルダに戻してやると、その中に何種類ものNibファイルを見つけることができます。アプリケーションは、これらのNibファイルにアクセスしてウィンドウやメニューの情報を取り込んでいるわけです。

 

つまり、Mac OS 9単独でもNibファイルを編集するツールさえあれば、それをダイレクトにアプリケーションで活用できるわけです。そう考えると、ResourceファイルからNibファイルへのコンバーターなども欲しいところです。ところで、Interface BuilderはCarbonアプリケーションなのでしょうか?もしそうであれば、少しの改良でMac OS 9上でも利用できるようになるかもしれませんね(笑)。

さて次回は、IBCarbonExampleサンプルプロジェクトのmain.cソースファイルの内容を調べ、どのような仕組みでアプリケーションが成り立っているのかを見てみます。
[小池邦人/オッティモ]
関連リンクオッティモ