ラベル Titanium mobile の投稿を表示しています。 すべての投稿を表示
ラベル Titanium mobile の投稿を表示しています。 すべての投稿を表示

2013年1月21日月曜日

Titanium mobileその後、とMonaca


今回の要約:
  • Titanium Updates Available
  • Titanium mobile:異常の原因
  • Monacaを試した

■Titanium Updates Available■

Titanium Studio起動時に、自分ちのMacではログイン認証求められないのに会社のMacだとid/passwordを入れないとダメってのは何が原因なのか未だに不明。

それとTitanium Studioを起動したら、Titanium Updadates Availableが出ました。「もしかして、今抱えている問題がこれで片付くかも!」とwktkしながらクリックしたら…Alloy 0.3.6だったorz

いやいや「orz」したら失礼ってかAlloyには少しは期待しているんだけど、でも、そろそろTitanium 3.0.1とか出ても良いんでないの?出てくれないかな??出てくれるよね???と思っていたものですから。すいません。

今のところMVC3層モデル対応のmobileアプリ用JavaScriptフレームワークというとSenchaが先行している感じだけど、UIレイアウトツールのないTitaniumがAlloyによってリキッドレイアウトとMVCモデルを同時に取り込むことができたら、少なくともビジネス系モバイルアプリ開発にもっと踏み込むことができる、はず。期待してます。

■Titanium mobile:異常の原因■

さて、本題。結局不具合はイベントの異常によるものでした。

selfがwindowで、すでにfocusがあるにも関わらずwindows上のTextFieldがタップされた時にself.addEventListener('focus', function() {});が呼び出されてしまうことが原因。selfのfocusイベントで初期値を設定していますが、password/emailをタップするたびに初期化されるのだからそりゃ入力できないのも当たり前。

iOSとAndroidで挙動が違いますね。iOSではTextFieldをタップしてもfocusが発火することはありません。

こういうのを潰すのは大変です…。

■Monacaを試した■

jQuery mobileというよりHTML5ならAndroidのフラグメントをいくらか吸収できるので、とりあえずお試し。以前XCodeの上でPhoneGap+jQuery mobileを動かしたことはあるものの今回のプロジェクトではAndroidが対象なので開発環境を用意しなければなりません。

一応、クロスプラットフォームであまり面倒なことなしに使える、ということでまずはMonacaを試してみました。

Monaca.mobiにアクセスしてアカウントを登録、するとすぐにブラウザ(私はSafari 6.0.2+Mountain Lion)上でIDEを使えます。このIDEがとてもブラウザ上で動いているとは思えないほど、というかEclipse上のADTよりもサクサク動くから泣けます。

IDEに付属しているスマフォビューワは必要最小限の機能で再現性も低いので、とりあえずAndroid用アプリとして提供されているMonacaデバッガを使います。今回はエミュレータ上にデバッガをインストール。
  1. Androidエミュレータ上でブラウザを起動
  2. ブラウザにMonaca.mobiのデバッガ配布URLを入力→自動的にダウンロード
  3. Downloadsからファイルをタップすればインストール完了
  4. 起動して、さっきMonaca.mobiに登録したアカウントを設定
  5. アプリ一覧が表示→デバッグしたいアプリをタップすればすぐ起動
  6. IDE上で更新したら、デバッガ上の更新ボタンをタップすればすぐに更新
もう恐ろしいほどスムーズです。

で、さくさくと試験用のGUIを作って、さてACSを読み込もうとしたら…jQueryの対象バージョンがMonacaとACSとで異なるのでアウトでしたorz

というわけで、ACSについてはダメでしたが、jQuery mobile開発環境としてはとてもよくできていますので、今後時間を見つけて試そうと思ってます。

2013年1月19日土曜日

Titanium mobile、どうも困った…

記事に要約つけることにしました。
  • TitaniumアプリのAndroid版でフラグメントに遭遇
  • Titaniumあかんか…という気配
  • 次はNative+jQuery。いや、いっそNative+Airでw

■iPhoneでは問題ない…■

会社でTitaniumを使ってちょっとしたアプリを書いてます。iPhoneでテストしてひと通り動くようになったところでAndroidエミュレータでテスト、画面の差異などを吸収したりソース分けたりして社内テスターにリリース。

そこで問題発生、Android OSバージョン:
  • 2.3.3では問題なし
  • 2.3.4では動くヒトと動かないヒト
  • 2.3.5では起動すらしない
  • 4以降は今のところ問題なし
いろいろ追いかけてみたところ、スマートフォンなのにisTabletがtrueで返ってきてしまってあちこち矛盾するのが原因らしいと判明。2.3.5のエミュレータなんて無いからテストできないですよorz

今回Titaniumを使うことになったのは、クロスプラットフォーム性を最重視、であればPhoneGap+jQueryより少しはサクサク動くTitaniumの方が良いか…という判断でした。Androidのフラグメントについては皆さん了解済だったんですが、0.0.1の違いでバラついてしまい、同じバージョンでも差異が出てしまうというのはさすがにアウトだなぁという空気になりまして。まぁそりゃそうですわな。

それなりにwork aroundもあるとは思うんですが、Titanium SDK 3.0.0も出たばかりでそのバグフィックスリストを見ると、ちょっとこれはシンドいかなという気分に。「JavaScriptからブラウザを経由しないでネイティブのAPIを叩くからjQueryより少し軽い」というのはメリットなんですが…ランタイム上のネイティブなオブジェクトを参照する辺りの処理がイマイチ書き切れてない感じです。以前もviewのframeサイズを拾ってこようとしたら何やっても0しか返って来ないってこともあったっけ。ごく基本的なAPIがreferenceに書いてある通りに動かないのはイカンよなぁ…。

今回Titaniumの評価も兼ねたプロジェクトだったわけですが…とりあえずACS(Appcelerator Cloud Service)はそのまま使うけど、Titaniumについてはしばらくペンディング…ということになりそうです。

個人的にはUIエディタのないツールでプロトタイプを作るのはイヤなので、ちょっと助かったとです。リキッドレイアウトが協力ならまだ良いんだけどねぇ。

ホントならここでSenchaへ行きたいところなんですが、ツールを買い揃える予算がないのでMonaca方面で試行錯誤中。

しかし…jQuery mobileについて勉強してた当時はある程度ソラで書けるようになっていたのに、また「えーと、画面と画面を区切るのはなんだっけ…(ググり中)そうそう <div data-role="page" id="foo"></div> だった」なんてところまで退化していて困ったもんだ。

個人的には「そんなにクロスプラットフォームが良いなら、iPhone版はNativeで書くとしてもAndroid版を含めて残り全部Adobe Airで良いんじゃね?」と鬼のようなことを考えていたりもするのですがw