2011年5月27日金曜日

Titanium Mobileモジュール開発ドキュメント間違いの要点だけ

JavaScriptを使ってワンソースでAndroidとiOSのクロスプラットフォームができるとして話題なTitanium Mobileのモジュールの作り方を調べた。だけどどうも公式ドキュメントが違ってる(古い?)らしくてむしゃくしゃしたので、ついカッとなった部分のメモ。確かめたのはTitanium Mobile 1.6.2とXcode 4とiOS SDK 4.3です。基本的には以下のドキュメントに沿います。
参照:Module Devloper Guide for iOS(Last edited on May 12, 2011のもの)
要点だけ書くとドキュメントで違っている/足りていない記述が2カ所あることに注意:
  • できたモジュール(zip)のコピー先はLibraryじゃなくてアプリのルートディレクトリ
  • Titanium Mobile 1.6.2(Titanium Developer 1.2.2?)とiOS 4.3の組み合わせではLog/Info系の出力がTitanium Developerのコンソールに出ません。Xcodeで直接実行するか、iOS 4.2以前を使えば出る。
  • markdownモジュールはmarkdown2モジュールに変更されているのでbuild.pyの修正が必要。公式どおりにやるとモジュールのビルド過程でimport errorが出る。
もう少し詳しい手順は続きに:

(1)titanium.pyにエイリアスを張る。以下のコードを.bash_profileなどに。1.4.0の部分は適宜変更。$. .bash_profileでtitaniumコマンドが利用可能になる。
alias titanium='/Library/Application\ Support/Titanium/mobilesdk/osx/1.4.0/titanium.py'

(2)モジュール用のプロジェクト作成。以下は~/tmp以下にtestという名前での例。Xcode用のプロジェクトができる(~/tmp/test/test.xcodeproj)。
※モジュールはこのXcodeで行うことになるけどここでは動作確認が目的なのでそのままビルドします
> titanium create --platform=iphone --type=module --dir=~/tmp --name=test --id=com.test

(3)モジュールのビルド。モジュールのプロジェクトディレクトリで./build.py。
ここで、build.pyの53行目と58行目のmarkdownを以下のように直す必要がある。公式ドキュメントの方式でインストールされるのはmarkdown2モジュールなので、ImportError: No module named markdownというエラーが出てしまう。
##build.py
import markdown2 #53行目
#中略
html = markdown2.markdown(md) #58行目

(4)テスト。モジュールのプロジェクトディレクトリで./titanium run。すると以下みたいな出力がTitaniumコンソールに出る…はずなんだけど出ない!これはiOS 4.3を利用したときのTitanium側の問題みたいで、SDKを4.2以下にしたり、~/tmp/test/build以下のテスト用xcodeprojをXcodeで実行すれば出力されてるはず。
モジュール中のNSLog()やTitaniumコードのTi.API.info()の出力がスルーされてしまうみたい。
[INFO] [object ComTestModule] loaded
[DEBUG] loading: /var/folders/4n/4nhl7xlPFsaSrlAGHhPwg++++TI/-Tmp-/mNdElWkti/test/Resources/com.test.js, resource: var/folders/4n/4nhl7xlPFsaSrlAGHhPwg++++TI/-Tmp-/mNdElWkti/test/Resources/com_test_js
[INFO] module is => [object ComTestModule]
[DEBUG] application booted in 82.601011 ms

(5)開発したモジュールを目的のプロジェクトにインストール。
基本的には公式doc中、"Testing your Module in a test application"の通りなんだけど、zipのコピー先が間違い。モジュールを利用するアプリが~/src/myProject/だったら、~/src/myProject/com.test-iphone-0.1.zip ってなるように置く。tiapp.xmlと同じディレクトリに置いて、tiapp.xmlの<modules>要素にモジュール名を追加する。あとはビルドするときにTitaniumが適切にzipを展開する。Titaniumのどこかのバージョンで仕様が変わったのに追随できてないということのよう。

(6)あとは普通にTitaniumのTest&PackageタブでLaunchすればOK…のはずなんだけどやっぱり出力が出ない!でも焦る必要はなくてこれは(4)と同じ問題。build/配下のプロジェクトをXcodeで直接開いたり、Titanium DeveloperでiOS SDKを4.2以下に下げれば出力される。

(7)あとは(2)〜(6)を繰り返す。作成したモジュールのディレクトリでモジュール開発&ビルド→目的のアプリにインストール→目的のアプリの開発&テスト。

…というように最新の環境だと微妙に対応してないのとTitaniumの公式ドキュメントが追いついてないみたいなので注意が必要。

ということでTitaniumを見てみたんだけど、Titaniumの素の状態でフォローできるのはUIがほとんどで、アプリのコアになる機能は(Webサービスを利用しないならば)このModuleを使って結局はOSごとに開発するというのがTitaniumの基本的なスタイルっぽい。なのである程度本格的なものをTitaniumで開発しようと思ったらこのModule開発というのは避けて通れない道ということになるんじゃないのかな。

0 件のコメント:

コメントを投稿