TitaniumMobile: 2011年2月アーカイブ

(2011-06-07 21:29:06追記)この記事で書かれている現象はTitanium Mobile SDK 1.7で修正されます。しかも、予測とは違う仕様になったので、この記事に書かれているサンプルコードは動かなくなります。詳しくはTi.includeの不具合が1.7で修正される模様 - もぎゃろぐを見てくださいませ。
(追記終わり)

 TitaniumMobileでとっても困っていることが一つあって、Ti.include('lib/a.js') って書いた時、iPhoneだと Resources/lib/a.js を見に行ってくれるんだけど、Androidだと Resources/lib/lib/a.js を見に行ってしまう。

#2585 Include paths for iphone and android are not based on the same starting point - Titanium Mobile - appcelerator
  かなり困る問題なのに1.6.0でも直らないそうで、みんな困った末にこんな黒魔術が発見されました。
以下のように指定するとどの場所にあるファイルでTi.includeしても確実にファイルをインクルードできる。
Ti.include("../../../../../../../../../lib/bookmark.js")
TitaniumのインクルードパスをResourcesからの相対パスで指定する方法 | ひげろぐ
sxc.hu.657889.jpg

さすがにこれはちょっと(汗) ひげろぐの人が考えた訳じゃないし、考えた人だって困った末に編み出したのだとは思いますが、なんか鼻から悪魔とか出てきそうでムズムズします。

いろいろ試した末にたどり着いた別案。

var path_lib = 'lib/';
if (Ti.Platform==null || Ti.Platform.osname=='android'){
  path_lib = '';
}
Ti.include(path_lib+'a.js');
Ti.Platformを確認しているのは、Android環境でTi.Platform環境がnullになることがあるから。
Appcelerator Developer Center - continuous 1.5.0 on android ... ti.Platform.name crash

黒魔術よりはすっきりすると思うのですが、将来的に不具合が修正されたり、Andoirod以外の環境が出てきた場合にはコードを修正しないといけなくなる可能性が高いので、これはこれで問題があります。なんかもっといい案があればぜひ教えてください。



このアーカイブについて

このページには、 2011年2月 以降に書かれたブログ記事のうち TitaniumMobile カテゴリに属しているものが含まれています。

前のアーカイブは TitaniumMobile: 2011年1月 です。

次のアーカイブは TitaniumMobile: 2011年6月 です。

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

Powered by
Movable Type