Titanium Mobile SDK 1.8.1 の謎

( ※ この記事は昨年のクリスマスに執筆した、 【クリスマス?】Titanium Mobile SDK 1.8.0.1の罠 の続編です。)  Titanium Mobile SDK 1.8.1 が先日リリースされ、待望のリピート画像に正式対応しました (iOS のみです) 。 @donayama さんの Titanium News にリリースノートの和訳が公開されています。素敵です。

さて、 昨年のクリスマスに「プロジェクト名と同じディレクトリがプロジェクト中にあるとビルドできない」という問題を記事にしました。今回の Titanium Mobile SDK 1.8.1 ではどうなったのかを追試してみましたのでご確認ください。

結論から先に述べるとダメでした

今回もビルドできませんでした。 iOS シミュレータで確認する限りだと挙動が若干怪しくなっています。もはや環境依存なのかも怪しいですが、説明していきます。

テストコードで実験実験

今回は「 Test 」というプロジェクト名で実験します。ファイルやディレクトリを作るごとにプロジェクトクリーンを走らせています。

このコードを元に検証してみます。なんということはない、一つのタブと一つのウィンドウを持つアプリケーションです。

このコードを app.js にそのままコピペして iOS シミュレータ上で確かめてみると、左の画像のような画面が出てくるはずです。これは予想したとおりの挙動なので、問題ありません。

それにしてもたったこれだけのコードで、ネイティブに動作するアプリケーションが作れてしまうのだから凄いですよね…。

それはさておき、次に app.js から MyApp.createWindow メソッドと MyApp.createTabGroup メソッドを分離してみましょう。 CommonJS スタイルにしたいところですが、さっくりと検証するために Ti.include を使いたいと思います。分離したメソッドは include.js と名前をつけて、 app.js と同じディレクトリに配置します。

このコードも問題なく動作します。結果は先の画像と同じです。ではここからです。 include.js をまずは「mods」というディレクトリに入れ、こちらを Ti.include してみましょう。ディレクトリの構成は以下の通り。

これも問題なく動作します。次に Titanium Mobile SDK 1.8.0.1 で問題が起きていた、プロジェクト名と同じディレクトリをプロジェクト中に置く場合です。今回のプロジェクト名は Test ですので、 mods ディレクトリを Test と改名します。そして、プロジェクトをクリーンします。

さて、実験です。

アウトー!

出ました。 Titanium Mobile 開発で目にする悔しいエラー、 SystemExit 65 です。

やはりプロジェクト名と同じ名前を持つディレクトリは使えないのでしょうか。このまま include .js を app.js と同じディレクトリまで戻し、 Ti.include を修正します。

結論はダメです。同じく SystemExit 65 が出てコンパイルできません。ここからが今回の追試で一番謎な挙動を見せるところです。今までの実験は全部構成を変えるごとにプロジェクトクリーンを走らせていました。クリーンしないまま、この状態でもう一度コンパイル & iOS シミュレータを走らせてみましょう。

なんとエラーは出ずにコンパイルされました。 iOS シミュレータも立ち上がろうとしています。

先ほどはエラーが出力されてコンパイルができなかったのに、今度はエラーが出ずにコンパイルに成功しているように見えます。このまま無事に立ち上がってくれれば、先の iOS シミュレータの画像のように、一つのタブと一つのウィンドウを持つアプリケーションが起動するはずです。

おや ? おやおや ?

スプラッシュスクリーンが表示されたと思ったら、ホーム画面まで戻ってきてしまいました。

何度かコンパイル、実行を繰り返してみましたが同じ挙動を示しますし、 iOS シミュレータだけを立ち上げて Test を実行してみてもスプラッシュスクリーンが表示された後すぐに、ホーム画面まで戻ってきてしまいます。

ちなみに、

この構成に戻してみても、クリーン直後最初のフルコンパイルは SystemExit 65 が出て、その後のコンパイルは通るものの、アプリの起動後すぐに落ちてしまう現象が発生します。

やはり、 Titanium Modile SDK 1.8 以降はプロジェクト名と同じディレクトリを、プロジェクト中に置いてはいけないようです。ご参考までに ( 環境依存の可能性…? )。