【コラム】

OS X ハッキング!

215 続Cocotron: ソースの改変なしにココまでできる

    海上忍  [2007/02/22]

    3歳の娘と一緒に見る某アニメ番組に、「ココ」という栗鼠っぽいキャラが登場します。「危ないココ~!」とか、語尾に「ココ」を付けるクセがありまして。で、ココが喋るたびに引っかかるんですよ。なにか大切なことを忘れているような……そうだ、Cocotronの続きを書くはずだったんだココ!!

    というわけで、今回は"マルチプラットフォーム対応Cocoa互換環境"のCocotronについて。尻切れトンボで終わった第212回の続きをお届けしよう。

    NIBのフォーマットに注意

    前回、/Developer/Examples/AppKitに収録されているサンプルコードが軒並み起動に失敗したことは報告済だが、その理由については触れずじまいだった。

    理由は単純、CocotronがバイナリフォーマットのNIB -- Interface Builderで作成したGUIデザインを収録した書類 -- を読めないため。WindowsでEXEファイルを実行後、一瞬現れるDOS窓にも、NIB書類を開けない旨のメッセージが表示される。

    対策としては、NIB書類をInterface Builderで開き、テキストアーカイブフォーマットに変換する方法が挙げられる。具体的には、[File]→[Save As...]を選択、現れたパネルで[10.2 and later format]オプションを選び、[Use text archive format]をチェック、その後上書き保存すればOK。必要なクラスが未実装というそもそもの問題はともかく、これでかなりの数のサンプルコードが実行可能になるはずだ。

    あらかじめNIB書類をテキストフォーマットに変換しておく

    フレームワークのコピーについて再確認

    バンドル内部のWindowsフォルダに「AppKit.framework」などCocotronのライブラリをコピーすることは第212回で述べたとおりだが、フレームワークごとコピーするとエイリアスがそのままになり、Windowsへコピーするときに問題が発生する。内容もフレームワークの"枠"とResourcesフォルダさえあれば足りるため、全体をコピーする必要もない。

    具体的には、カレントディレクトリがバンドル内部のWindowsフォルダにあるとき、以下のとおりコマンドを実行すればOK。これで、バンドルに含まれる実行形式のファイルを(もちろんWindows上で)ダブルクリックすれば、Cocotronアプリを起動できるはずだ。

    $ export COCOLIB=/Developer/Cocotron/1.0/Windows/i386/Frameworks
    $ cp $COCOLIB/AppKit.framework/Versions/A/AppKit.1.0.dll .
    $ mkdir AppKit.framework
    $ cp -r $COCOLIB/AppKit.framework/Versions/A/Resources AppKit.framework/
    $ cp $COCOLIB/Foundation.framework/Versions/A/Foundation.1.0.dll .
    $ mkdir Foundation.framework
    $ cp -r $COCOLIB/Foundation.framework/Versions/A/Resources Foundation.framework/

    コツさえわかればビルドはかんたん

    NIBファイルの問題が一応の解決を見たところで、/Developer/Examples/AppKitに多数あるサンプルコードのビルドを再開。NIB書類のフォーマット変換とフレームワークのコピー以外は、第212回のとおりだ。

    結果だが、予想以上に良好。たとえば、Quartz/NSImageの学習に適した作画ソフト「CompositeLab」では、NSBezierPathの実装が未了のため多くの警告を受けるものの、とりあえずビルドは成功。フレームワークのコピーなど体裁を整えれば、Windowsで実行できる。少しイジっただけで落ちてしまうほど不安定だが、ソースコードの修正なしにビルドの設定を少し変えるだけでWindowsでも動いてしまうことは、やはり衝撃的。

    とりあえず動いた「CompositeLab」。Windows(左)とOS X(右)を見比べてほしい

    それなりに"しっかり"動くのが、NSTextViewやNSForm、NSComboBoxといった比較的敷居の低いクラスのみで構成される「SimpleComboBox」。コンボボックスはプルダウン表示不能なものの、文字の入力や表示位置の調整(センタリング、右 / 左寄せ)など、基本的な処理には対応している。フォントパネルを表示すれば、フォント種の変更やサイズ調整もOK。Windowsアプリ間との通信には未対応ながら、コピー & ペーストにも対応している。未実装の機能は多いものの、Cocotronのこれからに期待しよう。

    それなりに動いた「SimpleComboBox」。マルチバイト文字には未対応

    新着記事

    特設サイトの情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      マイナビニュースマガジン