Nuアプリの構造
前回のNuプログラムのようなコンソールアプリであれば、1つまたは複数の .nu ファイルだけですが、今回のアプリは下のような構造をしています。NuTwitterClientが実行されるバイナリで、.nu がNuのソースコード、.nib がGUI定義ファイルです。
Mac OS XのGUIアプリもアプリ名のディレクトリになっていて、その中にコードやGUI関連のリソース等も入っていますね。それと似たような形です。
NuTwitterClient.app/ `-- Contents |-- Info.plist |-- MacOS | `-- NuTwitterClient |-- PkgInfo `-- Resources |-- English.lproj | `-- MainMenu.nib | |-- designable.nib | `-- keyedobjects.nib |-- functions.nu |-- main.nu |-- nu.icns `-- twitter.nu
Nuではこのような実行形式をNuのソースコードとGUI定義ファイルから nukeコマンドで簡単に組み立てられます。nukeが使うアプリの定義は下のようにNukefileに書きます。
(set @nu_files (filelist "^nu/.*nu$")) ;; application description (set @application "NuTwitterClient") (set @application_identifier "com.ey_office.nu_twitter_client") (set @nib_files (filelist "^resources/.*\.lproj/[^/]*\.nib$")) ;; tasks (application-tasks) (task "default" => "application")
開発環境には、NuのソースコードとGUI定義ファイルを nu/resources/ というディレクトリを作っておきます。
NuTwitterClient/ |-- Nukefile |-- nu | |-- functions.nu | |-- main.nu | `-- twitter.nu `-- resources `-- English.lproj `-- MainMenu.nib |-- designable.nib `-- keyedobjects.nib
以下のようにアプリの構築は nukeコマンドで行い、アプリの実行は openコマンドで行います(もちろんファインダからダブルクリックでも実行可能です)。
% cd NuTwitterClient % nuke Using Nukefile with target default. nuke: running in NuTwitterClient nuke: mkdir 'NuTwitterClient.app' nuke: mkdir 'NuTwitterClient.app/Contents' ... nuke: mkdir 'NuTwitterClient.app/Contents/MacOS' nuke: cp '/usr/local/bin/../bin/nush' 'NuTwitterClient.app/Contents/MacOS/NuTwitterClient' % open NuTwitterClient.app
GUIの構築
GUIの構築は、GUIクラスの初期化・設定を行うコードを直接書いていくことでもできますが、Xcodeに含まれるInteface Builderを使うのがお手軽です。下の画像はこのアプリの画面をInteface Builderで開いているところです。Visual Studioなどと同様、簡単にGUIが作れます。
GUIが構築できたら、Interface Builder Document(NIB 3.x)形式で開発環境の resources/English.lproj に格納します。GUIとやり取りするクラス(今回はApplicationDelegate)の情報も nibファイルに書かれるので、今回はXcodeを使ってObjective-Cでひな形を作っておきました。