Titanium Mobile 2.0 (2.1?) CI に触れる

※ この記事は mobilesdk-2.1.0.v20120406185338-osx.zip を使っています。

Titanium SDK の Continuous Build には既に 2.0.x だけでなく、 2.1.x (master) が登録されていて、 GitHub appcelerator-developer-relations / KitchenSink には CommonJS 化された KitchenSink が登録されています。

いよいよ次期バージョンが目の前に迫ってきている Titanium Mobile なのですが、これまでの 1.x からどれぐらいスンナリと乗り換えができそうなものなのでしょうか。これを確かめる為には Continuous Build を丹念に追い続けるしかありません。

というわけで、ちょいちょいと触ってみました。

Titanium Mobile SDK 2.1 Continuous Build

Titanium Mobile 2.0 は日本時間で 4/20 にリリースされることが Appcelerator 社からアナウンスされています。ローンチイベントが世界各地で行われる予定で、日本でも東京でイベントが開催されるらしいです (@masuidrive さんのツイート曰く)。

リリース予定まであと10日ぐらいしかないのですが未だに RC 版が登場していないことが気になりますし、 Continuous Build の master が既に 2.1 に突入していることも気になります。 @donayama さんが Titanium News で述べられているように、 VC との兼ね合いでこのリリーススケジュールが組まれたのだとすると複雑ですね。

それはともかくとして、この記事を書いている時点での Continuous Build にはいくつかの問題点が見受けられます。特に公式にパフォーマンスアップがうたわれている TableView において TableView がクシャッと潰れてしまう問題 (仕様?) や、 TableViewRow の Height が 0 だよと WARN をはき出し続ける問題があります。

TableView がクシャッと潰れてしまう問題

@k0sukey さんの Tumblr が詳しいのですが、TableView の見た目がクシャッと潰れてしまう問題 (仕様?) があります。

これは Titanium Mobile SDK 2.0 から レイアウトエンジンが変更になったことが原因のようですが、少なくとも iOS では Row の高さがデフォルトで 44px 程度に設定されていたので、初見では面食らいます。解決法に関しても先の Tumblr に掲載されていますが、

このような height プロパティと値を設定してあげると、これまでと同様に 44px 程度の高さが与えられます。さらに追検証をしてみると、以下の場合でも 44px 程度の高さが与えられることが分かりました。

Ti.UI.FILL は 2.0 で新しく登場したメソッドです。これと同様に Ti.UI.SIZE というメソッドも登場しています。

(未検証ですが、 FILL が 100% で、 SIZE が auto という情報も…)

しかし、コンソールを見てみると WARN が沢山はき出されています。いったい何が起こっているのでしょうか。

TableViewRow と WARN (´・ω・`)

スクリーンショットのプログラムは TableViewRow に Label を add しているのですが、悲しいことにたくさんの WARN がはき出されています。

このような WARN はこれまでも ScrollView を使うときに何もオブジェクトを add していないと出ていたのですが、今回のケースでは height : Ti.UI.FILL を持つ row の上に label を add しているのですが、 WARN によると「高さが 0 だから見えないよ」などと言われてしまっています。これは height : 0 だけでなく、 height : 44 のように明示的にリテラル値を与えても同様です。

さらに謎なことに、上に乗っている label まで同様の WARN がはき出されています。 label には width / height 共に auto が指定されていますが高さが計算されていないようです。 width を Ti.UI.SIZE 、 height を Ti.UI.FILL にしても同様です。

この label に関しては場当たり的な対処法を発見しました。それは、 row の上に view を置くことです。この view の上に label を乗せます。ただし、 view に width / height を指定しないと label 同様に WARN がはき出されてしまいます。

このような形で width / height 共に “100%” というリテラル値を与えてあげるとはき出される WARN は TableViewRow のものだけになりました。

いずれにしても WARN ははき出されるのですが、 TableViewRow だけがこの現象を発生させ続けていることから現時点の Continuous Build のバグかもしれません。

このプログラムは gist に掲載してありますので新しい Continuous Build が登録されたらテストしてみると良いかもしれません。

1.8.2 からの移行は?

1.8.2 で構築中のプログラムを 2.1 CI でビルドし直してみたところ、 やはり height value of 0 WARN はたくさん出るものの、 Open Mobile Marketplace にあるモジュール (Filterable Camera や JSONDB) を組み込んだ状態でも動作はしてくれました。ただ、

のような WARN も見られたので、気持ちよく、スンナリ移行することは難しそうです (あくまでも現時点の Continuous Build を使った場合のお話)。

TableView のパフォーマンスアップは体感では確かに上にたくさんオブジェクトを置いて、イベントをたくさん張ってもスルスルと動いてくれるかな? というぐらいには実感がわく気がしています。気が、しています。…(´・ω・`)

何にせよ、この WARN の問題を含めて 2.0 の正式リリースまでに解消されるのか、それとも解消されないのか、リリースが延期されるのか…も含めて動向を見守りましょう。

  • Pingback: Titanium 2.0 の TableViewRow で No WARN を目指した果て | imthinker.net

  • stefanodiluca

    Hello, good article man.
    Have you tried any solution to solve the warning on main thread?
    [WARN] Timing out waiting on main thread. Possibly a deadlock?  in TiThreadPerformOnMainThread (TiBase.m:238)

    • ryugoo

      Thanks for comment !
      Yeah. I tried solution of “deadlock warning”.
      I tried to look or changing the timing or try using the module, add an object to view. Still appears that there was a warning.

      So, I tried the “Continuous Build”. Then it is no longer a warning.
      I think and maybe that is fixed in the “Version 2.1.0″.
      I’ll try the “Continuous Build” for some time.

      • stefanodiluca

        Yes, continous build 2.1.0 is the solution for now


        Stefano Di Luca

        Il giorno martedì 5 giugno 2012, alle ore 18:25, Disqus ha scritto: