QA@IT

Titanium MobileでiOSとAndroidのアプリを同時に開発するときは、どんなことに気をつければいいですか?

2716 PV

Titanium Mobileはクロスプラットフォームに対応しているので、JavaScriptでAndroid、iOS両方のアプリを作ることができるそうですが、全く同一のコードで同じ動作をするのでしょうか。また、複数のプラットフォーム用のアプリを開発する際にはどんなことに気をつければいいですか?

回答

同じソースコードでiOS、Android両方のアプリを書くことが「出来る」のは事実です。しかしTitanium Mobileの仕組み上、同じ外観、同じ機能のアプリが出来上がるわけではありません。

var win = Ti.UI.createWindow({backgroundColor:'White'});
var tab = Ti.UI.createTab({window:win, title:'Tab 1', icon:'/images/KS_nav_ui.png'});
tab.add(win);
var tabGroup = Ti.UI.createTabGroup();
tabGroup.addTab(tab);
tabGroup.open();

これをビルドすると、iOSではタブが画面下に、Androidでは画面上になります。タブの外観も違います。

同じJavaScriptを実行しても見栄えや機能が違うアプリになるのは、Titanium MobileはJavaScriptのコードを評価したらそれをObjective-CやJavaのネイティブのAPI呼び出しにプロキシして、実際にはそちらのネイティブのUIコンポーネントなどが実行されているからです。

AndroidとiOSで全く同じ外観、機能のアプリを作りたい場合、HTML5を使って作成したコンテンツをUIWebViewまたはWebViewで表示するのが最も手っ取り早いやり方です(Titanium Mobileはこれらもサポートしています)。ただし、外観や操作感は「アプリを使っている」という感じにはなかなかならないでしょう。逆に、アプリとしての機能や外観、操作感は損なわずに両プラットフォームで全く同じアプリを作というのはナンセンス以外の何ものでもありません。例えば、iOSのアプリではテーブルで表示されたコンテンツ、そうですね、TwitterやFacebookのタイムラインを表示しているとき、データを更新したければ(1)テーブルをプルしてリロード(2)ナビゲーションバーのリロードボタンをタッチすることで実現できるようになっていることを期待します。一方、Androidに慣れたユーザーであれば迷わずmenuボタンを押してリロードボタンを探すでしょう。これをどちらか一方のインターフェースに合わせてしまうのは、良いユーザーインターフェース設計ではありません。またiOSのUIコンポーネントは大変優秀なので、WebViewやAndroidでナビゲーションバーのフォント処理やグラデーションまでそっくり真似ようと頑張っても、あちこちでほころびが見えてしまってみっともない結果になる上に、テストの工数ばかりが膨らんでコストがかかるだけになってしまいます。

それからもうひとつ、やっぱりTitanium MobileはまずiOSの開発ツールとして作成された経緯がありますので、Androidの方がどうしても後追いになっている傾向があります。サポートされていない機能はAndroidの方が多いのは確かです。機能を決める際にはAndroidでも実装できるのか、必ず事前に確認しましょう。Kitchen SinkをiOSとAndroidの両方で動かして、片方にしか実装されていない機能がどれなのか確認しておくと問題を回避することができます。

以上のような事情を踏まえて、iOSとAndroid両方のプラットフォームで開発する際には、以下のようなことに気をつけましょう。

・Android、iOSそれぞれで別の画面設計をしましょう
・複雑なアプリを作成するなら、迷わずコードをプラットフォームで分けましょう
・機能を計画するときは「Androidでも出来る?」を必ずチェックしましょう(Kitchen Sinkがオススメ)

いや、楽しいですよAndroid。ええ、とっても。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。