Titanium Mobileおぼえがき

なんだかんだで一月ぐらい触っているので書いておく、Twitterでつぶやいてたのもいくつか。
わりと経験則とかで書いているところがあります(=信用に足るかはわかりません)。
順番は超適当
SDKは1.5.1

  • Titanium.Utils.base64encodeが1.5.1だとバグっていて、日本語をあたえるとよくわからないところで切れた状態で帰ってくる
  • (Rowが同一の動作をするなら)TableViewRow一つ一つにaddEventListenerするよりTableViewにaddEventListenerするほうが軽快(ぽい)
    • そらそーだという気もする
  • TableViewに動的にRowを複数同時に追加したい場合、appendRowで追加していくより、元になっている配列を更新してsetDataするほうが軽快に動作する感じがする
  • Titaniumでネットワーク周りのメモリリークを回避する http://www.mountposition.co.jp/blog/?p=86
    • 動的に複数接続する必要がないならHTTPClientを使い回す
  • HTTPClient.openの第3引数で同期(true)を指定するとタッチのイベントなども後回しで処理される感じがする(未確認)
    • 特別な理由がない限りデフォルト値のfalseでいいと思われる
  • HTTPClient.onerrorが呼ばれる条件が割と不明
    • 500とか503返してもなにもおこらなかったりする、内部的なネットワークエラーのみ検知?
  • TableViewRowを大量に追加する際className値にユニークな文字列を追加しないと、妙なところで掃除される
  • TableView,TableViewRowでfontの指定が効かない
    • 任意のLabelをaddすることである程度回避可能
    • 但し、Rowが大量の場合80-100程度でLabelが表示されなくなるなどの症状が[実機でのみ]発生する模様(classNameがユニークでも駄目だった)
  • iAdViewは読み込まれるまで表示してはいけない(Apple規程)ので、非表示状態で追加しloadイベントでアニメーションさせるなどして表示する
  • Resourceディレクトリに日本語含んだファイル入れるとiPhoneでRun on Deviceするときにこける
  • build/androidディレクトリがない状態でTitanium Developer起動するとnot configuredとか言ってAndroidビルド出来なくなる
    • とりあえず該当のディレクトリを作ってから起動し直せば回避可能
  • UTF-8ベースでの動作しか想定されていないためか、文字コードの変換機構などは今のところ用意されていない
    • 意外と面倒なことがあったり
  • よくわからないけどビルドが通らなくなったらbuildディレクトリの該当プラットフォームのフォルダを消してからビルドし直してみる(フルリビルドが走る)
    • 使うクラスを増やしたりしたタイミングでよく起こる感じ
  • Android SDK r8だとツールのパスが違って動かないとか言い出す

あとTitaniumと関係なく

  • Mac+ChromeだとDistribution Certificate submitがうまく通らない