「Titanium Mobileで始めるiPhone / Androidアプリ開発」のメモ

参加したメモです。

http://atnd.org/events/12449

  • Titanium Mobileで作られているアプリ
  • Titanium Developer
    • IDEじゃない
    • Aptana IDEで対応予定(3月後半リリース)
      • debuggerなども使えるようになる
      • 現在はprintデバッグが主流
  • iPhone環境構築
    • XcodeApple Developer登録、鍵作成など通常のiOSアプリ作成と同じ
    • Xcodeは対応バージョンを使う
      • Beta版は対応しない。正式版はすぐ対応
      • Betaなどで速く欲しい人はgithubを確認
      • 複数いれている場合はxcode-selectコマンドで最新版を選ぶ
  • Android環境構築
    • Android SDKインストール
    • SDKパスをTitanuim Developerで設定
    • Android SDK Tools R8以降では、platform-tools/adbをtools/adbにコピー
  • トラブルシュート
    • build/iphone/build/*とbuild/android/*を削除
    • Titanuim Developerを再起動
  • 同じコードでもiPhoneAndroidで見た目が違う
    • Titanium Mobileではそれぞれのプラットフォームのネイティブの部品が使われる
  • KitchenSink
    • デモアプリケーション
  • Titanium Mobileのアーキテクチャ
  • FAQ
    • 実用になる?
      • iPhoneはかなり完成している
      • Android版はサポートが遅れているが、1.6以降ならおすすめ
    • 学習中にどこで詰まる?
      • ドキュメントが英語。サンプル不足。HTMLはない(それは昔のバージョン)。進化が速い。
    • 速度は?メモリ管理は?
      • Obj-C/Javaよりは遅いので、リアルタイム性が高いものは厳しい
      • メモリ管理は自動(GC)
      • メモリもネイティブより食う
    • 得意/苦手
      • ネットのフロントエンドアプリが特に得意
      • アニメーション・エフェクトも楽
      • リアルタイム性が高いモノは厳い
      • 画像処理APIがない。カメラや回転縮小はある
      • JS <-> Obj-Cの行き来が簡単にできるので、そこで苦手分野はカバーできる
    • Appleの審査は通るの? -> 問題なし
  • アプリの作り方
    • 1window == 1source
      • Window間で独立したContextにより、複数人で同時につくる時に便利
      • 共有変数はTi.App以下にぶら下げる
      • Window間の共有は苦手
    • single context
      • AJAXに近い形
      • 変数は全体で共有
  • Titanium MobileはWEB系の技術者がスムーズに移行出来るように意識して設計されている
  • Feedの取り扱い
    • JSONのパースは簡単だけど、XMLは面倒
    • YQLモジュールが標準添付
  • 見た目がだいぶ違う
  • Pull to refreshでKitchenSinkを検索
  • OSはTitanium.Platform.osnameで判定
  • ロジックだけ共通化して、iPhone/AndroidそれぞれのUIを作る。
    • 各プラットフォーム毎にチューニングが必要だが、いいかえれば各プラットフォームらしいアプリが作れる
  • 先にiPhoneでひと通り作って、Android作成時にリファクタリングするのが効率が良い
  • 経験的に7〜8割はコードを共通化できる
  • デバッグ
    • Ti.API.debug()
    • API docの様に動かない場合はKitchenSinkを検索
    • 機能が足りない場合はモジュールを書く
      • loading indicatorを単独で回す機能がないなど(通信中は自動的に回る)
  • アニメーションテクニック
    • 標準のアニメーションを組み合わせて凝ったアニメーションも作れる
    • MogSnapの「食べたい」とか
  • Modern JavaScrtip
    • Titanium MobileではJavaScript1.6をサポート
    • CommonJS, JavaScriptオブジェクト指向, 非同期処理とクロージャ, Deferred
    • Ti.IncludeよりCommonJSのrequireの方がオススメ
    • この辺のModern JS勉強会もやりたい。[twitter:@masuidrive]などウォッチしてください
  • イベント処理
    • Deferredいいよ!非同期処理を書くときに階層が深くならない
  • 資料

質疑応答

  • Q. jQueryのUtilityなどを正式に対応する予定は?
  • A. eachとかmapとかはJS1.6の機能でできる。HTTPの通信部分をサポートする予定はない。同じような方法で通信できるモジュールがあったと思う
  • Q. Androidに実機転送できなくなる
  • A. USBを挿し直す。本体を再起動する。build/以下を消してから実行すると結構な確率で入る。あるいはAndroid側のUSBデバッグを一度解除してからつなぐといい。
  • Q. JSとネイティブを交互に行き来してもパフォーマンスはでるのか?
  • A. 十分でる。実際にコミックビューアの部分では、ビューアの部分はネイティブ実装して、速度のいらない部分はJSでというのがよい