Ti.includeの不具合が1.7で修正される模様

aa.png

Titaniumのインクルードパスを指定する方法私案で話題にしていた、サブディレクトリ内にあるファイルがTi.includeした時どこを見に行くか問題ですが、1.7で修正が入るみたいです。

[#TIMOB-3349] iOS: Ti.include() not handling relative 
pathing properly - Appcelerator JIRA
さっそく1.7RCで実験してみました。
app.js
Ti.include('lib/test.js');
lib/test.js
Ti.include('lib/a.js');
lib/a.js
Ti.API.info('I am lib/a.js');
lib/lib/a.js
Ti.API.info('I am lib/lib/a.js');

こういうプロジェクトを用意して、Titanium Mobile SDK1.62とTitanium Mobile SDK1.7RC、それぞれiOS向けにビルドして走らせてみます。

1.6.2
[INFO] Compiling JavaScript...one moment
 :
[INFO] Application started
[INFO] mogyatest1/1.0 (1.6.2.878906d)
[INFO] I am lib/a.js

 1.62では、Resourceからの絶対パスでファイルを参照しています。

1.7RC
[INFO] Compiling JavaScript...one moment
:
[INFO] Application started
[INFO] mogyatest1/1.0 (1.7.0.RC1.e6afca8)
[INFO] I am lib/lib/a.js

1.7RCでは、includeしたファイルを基準とした相対パスでファイルを探すようになりました。Androidと同じ挙動です。

Resource
 └lib/test.js
 └lib/a.js
上記のような構成で、test.jsからa.jsを参照したい場合、1.6.2までは
  • iOS : Ti.include('lib/a.js');
  • Android : Ti.include('a.js');

と使い分けるか、Titaniumのインクルードパスを指定する方法私案で紹介したような方法で工夫する必要がありました。
1.7からは、iOSもAndroidと同じ方法でincludeが出来るようになるので、普通に書けばiOSでもAndroidでも必要なファイルをincludeすることが出来ます。

逆に、iOSしか使わないことを前提に、Ti.include('lib/a.js')と書いていた方は、1.7でビルドし直すと動かなくなることが予想されます。また、僕のブログを参考にして、

var path_lib = 'lib/';
if (Ti.Platform==null || Ti.Platform.osname=='android'){
  path_lib = '';
}
Ti.include(path_lib+'a.js');
と書かれていた方も、1.7では動かなくなります(iOSが正だと思っていたので)。

1.6.2、1.7共通で動くコードを書くのであれば、
var path_lib = '';
if(Titanium.Platform.osname == 'iphone' && Titanium.version<'1.7.0'){
  path_lib = '/lib/';
}
Ti.include(path_lib+'a.js');
という具合にバージョン番号を見るようにする必要がありますね。
カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: Ti.includeの不具合が1.7で修正される模様

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/1187

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2011年6月 7日 19:58に書いたブログ記事です。

ひとつ前のブログ記事は「 Androidのデモをする時はAndroid Screen Monitorが超オススメ 」です。

次のブログ記事は「 「Titanium Mobileで開発するiPhone/Androidアプリ」 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type