New Xcode project

Xcode 3.1 をダウンロードして使ってみたら、RubyCocoa 入門にもある 3.0 とちょっと違ったので、メモ。

もし、Snow Leopard にアップグレードして、Xcode 3.2 を使っていれば、RubyCocoa のテンプレートがなくなってので、ここへ行って、ダウンロードする。今のところ新規追加ってことで一番上にあるけど、なくなっていたら、RubyCocoa の 1.0.0 の中にある。

別に Xcode を使ってちゃんとプログラム組まなくても、RubyCocoa でできる事はいっぱいあるんだけど、まあ、とりあえず。

まず、新規のプロジェクトを始めると、次のようなウィンドウが現れるので、Application で、Cocoa-Ruby Application を選ぶ。

Xcode 3.2 で、ダウンロードしたテンプレートを使うとこんな感じ。

選んだら、選択... をクリックして、プロジェクトの名前を付けて適当なフォルダに保存する。ここでは、sample とした。

すると、こんな感じのウィンドウが開く。ここから先は、RubyCocoa 入門にもあるけど、メモという事で、ついでに。

まずは、コントローラーを追加すために、Classes を右クリックして、新規ファイルを作る。

ここで選ぶのは、Ruby NSObject subclass

Xcode 3.2 で、ダウンロードしたテンプレートだと、次のようになっているので、そこから Ruby NSObject subclass を選ぶ。

選んだら、次へをクリックする。

ファイル名を決めないといけないので、RubyCocoa 入門に習って、AppController.rb としてみた。

すると、AppController.rb が Classes に追加される。

このファイルの中身はこんな感じ。

まあ、肝なのは、require 'osx/cocoa' の部分。これで、Cocoa framework にアクセスできる。

ここから先は、RubyCocoa 入門の方が多分丁寧に書いてあるので、そちらを参考にしてください。

次に、今作った、Class ファイルを UI に結びつける。

Resources の中にある、MainMenu.nib をダブルクリックすると、Interface Builder が立ち上がる。

ウィンドウの中にあるものはデフォルトでこんな感じ。

ここに、AppController につなげる Object を入れる。Library ウィンドウ(出てなければ、メニューの Tools から、もしくは Command + Shift + L)にある。

これをドラッグアンドドロップで、上の MainMenu.nib のウィンドウに入れる。

入ったら、これと AppController を結びつける。Inspector(出てなければ、メニューの Tools から、もしくは、Command + Shift + I)で、Class の中から、AppController を選ぶ。

これで結びつけると、Object の名前が、それに従ってかわる。

これで、あとは、UI オブジェクトとスクリプトを結びつける。

Xcode にもどって、AppController.rb に ib_outlet で、結びつけるオブジェクトを記述していく。メインのウィンドウがあるので、それに結びつけるために、

ib_outlet :window

と class の中に加える。これで、UI オブジェクトに結びつけるオブジェクトがスクリプトの中にできた。

また、Interface Builder に戻って、outlet と UI オブジェクトを結びつける。

結びつける方法はいくつかあって、最初のは、App Controller をクリックして選択して、ボタンをホールドしたまま、Control キーを押して、結びつけたい UI オブジェクトにつなげる(線が出てくるので、オブジェクトが選択されたらボタンをはなす)。ここでは、Wndow に結びつける。

ボタンをはなすと、つなげられる outlet が出てくるので(ここでは window しかない)、つなげたいものを選ぶ。

つながっているかどうかは、Inspector で App Controller を見るとわかる。

もしくは、Connections(右向きの白抜き矢印)でも確認できる。

これ以外にもつなげる方法はあって、App Controller を右クリックすると、outlet のリストが出てくるので、その右はしにある丸をクリックして、ボタンをホールドしたままつなげたいオブジェクトに持っていく(線が出る)。

ウィンドウの中のオブジェクトに結びつける事もできる。

また、表示された WInodw に直接結びつける事もできる。ただし、この場合、ウィンドウの中は Content View になっているので、ちゃんと Window が選ばれているのを確認してボタンをはなす。

つながっていると、上のちゃんと表示がかわる。

以上で、outlet と UI オブジェクトがつながった。

これをどう使うかというと、outlet は RubyCocoa でクラス変数(@を変数名の前につける)として扱っていく。

だから、RubyCocoa 入門にある例のように、@window の透明度を変えるには、

@window.alphaValue = 0.8

というように記述していく。

とりあえず試すには、RubyCocoa 入門にあるように、アプリケーションが立ち上がると呼ばれる awakeFromNib というメソッドに入れて、実行してみればいい。

前に出てきたコードに次の部分を付け足す。

def awakeFromNib

@window.alphaVlue = 0.8

end

Xcode でアプリケーションを実行するには、Command + R もしくはメニューのビルドからビルドと実行を選ぶ。Xcode のウィンドウ上のアイコンをクリックしてもいい。このプログラムを実行すると、ウィンドウが半透明になる。値を小さくすると透明度が増す。

これで、とりあえず、ウィンドウを表示するプログラムができた。次のページに、いろいろなタイプのアプリケーション作りの取っ掛かりをかいてある。

Document-based アプリケーションを作る - 一つのウィンドウが一つの文書という形式のアプリケーション(Word とか、テキストエディットとか)

Core Data アプリケーションを作る - Core Data を使ったデータベースを扱うアプリケーション

RubyCocoa サンプル - ウィンドウベースのアプリケーションで、このサイトでメモしたことをいくつか使って、もう少しいろいろな機能がついたアプリケーションを作る過程をメモした