Titaniumのモジュールを作る。まずは、はじめの一歩・・・。

Titaniumに用意されていない機能を使いたいとき、モジュールを作ることでiPhoneネイティブな機能を使ったりすることができる。モジュールはObjective-Cで書くのでiPhoneで出来ることはだいたい実装できるのではないかと思われる。

さて、モジュールを作るには以下のURLにある「Titanium Module SDK Programming Guide」に詳しく説明されているのでそれをみてもらえればいいんだけど、私のように英語を読むのに難儀する人のために簡単にまとめてみたいと思う。今回は、モジュールの作り方の説明程度にとどめておく(モジュールの中身の説明はまた今度。いつか。きっと。多分) 
http://developer.appcelerator.com/doc/mobile/guides

前提

既にTitaniumとxcodeをインストールしていること。また、今回はSDK 1.4.1.1を使っている。

開発準備

1. bash_profile等に以下を記述

alias titanium="/Library/Application\ Support/Titanium/mobilesdk/osx/1.4.1.1/titanium.py"

そして、ターミナルを再起動するか、下記のコマンドを実行して設定を反映しておく。

$ source ~/.bash_profile

2. 動作確認
titaniumコマンドを実行し、以下のような出力がされることを確認。

$ titanium 
Appcelerator Titanium
Copyright (c) 2010 by Appcelerator, Inc.

commands:

  create      - create a project
  run         - run an existing project
  help        - get help

モジュール用のプロジェクトを作る

1. 下記のコマンドを入力し、プロジェクトを作成

$ titanium create --platform=iphone --type=module --dir=~/tmp --name=testproject --id=com.example.hironemu
Appcelerator Titanium XCode templates installed
Created iphone module project

簡単に説明すると,

--dir=~/tmp       ~/tmpがプロジェクトディレクトリを作るためのルートとなる場所を指定(存在しなかったら自動でつくられる)
--name=testproject     プロジェクト名(--dirで指定したディレクトリ以下に作成される) 
--id=com.example.hironemu アプリケーションのID

今回の例では~/tmp/testprojectが作成されたはず。

作成したプロジェクトをxcodeで開いてみる

$ cd ~/tmp/testproject
$ open testproject.xcodeproj

として開くか、Finderからプロジェクトディレクトリを開いてtestproject.xcodeprojをダブルクリックでxcodeでプロジェクトを開くことができる。
開いてみるとすでにいろいろファイルができきているのがわかると思う。次は、とりあえずこいつを動かしてみる。

作成されたプロジェクトを実行してみる

1. ビルドする
プロジェクトの直下でbuild.pyを実行するだけ。

$ cd ~/tmp/testproject
$ ./build.py

実行後「BUILD SUCCEEDED」と表示されていればOK。
2. 実行してみる
プロジェクトディレクトリ直下で以下のコマンドを実行

$ titanium run

すると、iPhoneエミュレータが起動する!画面は真っ白だけど。

今回作成されたプロジェクトの簡単な説明

さっきまでの手順でエミュレータは起動したけど、画面は真っ白でおもしろくない。しかし、コンソールのログを確認すると以下のようなログが出ているはず、

[INFO] [object ComExampleHironemuModule] loaded
....
[INFO] module is => [object ComExampleHironemuModule]

まず、上記の最初の行のログは誰が出しているかというと、~/tmp/testproject/Classes/ComExampleHironemuModuleのstartupで出力されている。

-(void)startup
{
	// this method is called when the module is first loaded
	// you *must* call the superclass
	[super startup];
	
	NSLog(@"[INFO] %@ loaded",self);
}

ここ。モジュールが呼び出されたらここが動くらしいね。モジュールを作成するときの最初の手がかりになりそうだね。

2つ目のログはというと、~/tmp/testproject/example/app.jsの最後の行を確認してみると、そこでログが出力されいるのがわかる。これです。

// TODO: write your module tests here
var testproject = require('com.example.hironemu');
Ti.API.info("module is => "+testproject);

コードは上記のようになっている。また、このコードをみるとモジュールの呼び出し方もわかったと思う(上記コードの2行目のrequire('com.example.hironemu')ね。)


で、これで分かったのは、モジュールがロードされたとき、ComExampleHironemuModuleのstartup内のログが出力された後、app.jsの最終行のログが出力されたってことだね。これで、何となくモジュールとJavaScriptとの関連がわかってきたんじゃないかと思う。

モジュールを組み込んでみる。

このモジュールを組み込んでも全然面白くないんだけど。まぁ。

build.pyを実行するとプロジェクトディレクトリ直下に「com.example.hironemu-iphone-0.1.zip」こんなzipファイルができていると思う。
これを、/Library/Application\ Support/Titanium にぽいと放り込むだけ。

$ cp com.example.hironemu-iphone-0.1.zip /Library/Application\ Support/Titanium

放り込んだら、Titanium SDKから何かプロジェクトをLaunchしてみる。すると、 /Library/Application\ Support/Titaniumにコピーされたzipが展開され、/Library/Application Support/Titanium/modules/iphone/com.example.hironemu/0.1に配置されるはず。

そして、組み込みたいプロジェクトのapp.jsなどで、さっき説明したrequire('com.example.hironemu')でモジュールをロードできるはず。
(はず、、、としたのは、実際に動かして確認しようとしたんだけど、私の環境がおかしくなっててTitaniumのプロジェクトを新しく作れなくなっていたので・・・いや、本来なら動作確認までしておきたいんだけど、今日はもうだめぽ) 

ということで、モジュールの作り方の簡単な説明でした。いや、ドキュメントの英語読めなくてもなんとななるくらい手順は簡単。まぁ、中身を作るようになるともうちょっと読まないとわからないのかも知れないけど、意外と簡単にモジュールが作れることがわかったのではないかと思う。あとは、Objective-Cが読めれば完璧。もうiPhone開発はさくさくですね。。。