トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Titanium Mobile のバックアップ(No.82)


関連ページ


目次

Titanium Mobile自身の注意点主に(Titanium SDKのバージョン 2.1.2GA以降で試した情報です)

for (x in 配列名)でのハマリに注意

例えばviewが複数入った配列に対して個々のviewを処理するとき、「for (x in 配列名) ループ」を使うと次の警告が出て正常に動作しませんでした。

[WARN] Exception in event callback. {
    line = ???;
    message = "'undefined' is not a function (evaluating 'parts.getWidth()')";
    name = TypeError;
    sourceId = ???;
}

JavaScriptでは問題ないのでTitanium Mobile自身の不具合のようです。次のようにすれば回避できました。

// Titanium Mobileで不具合の起きたソース。
// 配列に入っている個数分ループするのですが、取得したviewをUIViewのオブジェクトとして使えません。
for (var view in viewArray) {
	Ti.API.info('width: ' + view.getWidth());
}
// Titanium Mobileで正常に動くソース。
// インデックスを使用したforループに変えれば治りました。
var view;
for (var i = 0; i < viewArray.length; i++) {
	view = viewArray[i];
	Ti.API.info('width: ' + view.getWidth());
}

TIPS

アプリ名設定方法

iOS

i18n/ja/app.xml, i18n/en/app.xmlで設定します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<string name="appname">iOS アプリFoo</string>
</resources>

Android

i18n/ja/strings.xml, i18n/en/strings.xmlで設定します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<string name="appname">Android アプリFoo</string>
</resources>
  1. Resourcesやbuildフォルダと横並びにplatformフォルダを作成
  2. platformフォルダの中にandroidフォルダを作成
  3. build/android/AndroidManifest.xmlをplatform/android/AndroidManifest.xmlにコピー
  4. android:label="プロジェクト名"となっている2箇所をandroid:label="@string/appname"に変更

備考:AndroidManifest.xmlの編集について補足情報です。Titanium側でいくつかパーミッションが設定されますが、余計なパーミッションは外しておいたほうが良さそうです。例えば筆者はSDカードにアプリ移動可能とするためと思って「android.permission.WRITE_EXTERNAL_STORAGE」を許可しておいたままにしていましたが、アンドロイダーにレビュー依頼したところ『アプリのSDカード移動には必要のない権限です。』とご指摘いただきました。
関連リンク:Androidのパーミッションを減らす | アプリ作家見習いメモ

注意:カメラを使用する場合はSDカードへの書き込み権限が必要なAndroid端末もあるそうで、「android.permission.WRITE_EXTERNAL_STORAGE」を許可しておいたほうがいいそうです。
関連リンク:AndroidでSDカード関連のエラー | Androidアプリ開発雑記

未確認情報:http://〜で画像を表示する場合は、「android.permission.WRITE_EXTERNAL_STORAGE」を許可しないといけないそうです。キャッシュの関係だそうです。
参考ページ:イガイトカンタン -PhoneGapからTitaniumMobileに乗り換えて10日くらいでアプリを作った話 | DASALOG

未確認情報:AdMobを使用する場合も「android.permission.WRITE_EXTERNAL_STORAGE」を許可しないといけないかもしれないです。
参考ページ: Titanium mobile で作ったAndroidアプリにadmobを入れる

シミュレータかどうか判断

 if (Titanium.Platform.model === 'google_sdk' || Titanium.Platform.model === 'Simulator') {
}

iOSのバージョンで分岐させる方法

// 「4.3.2」などといったバージョン文字列をパース
var versionNumber = parseFloat(Ti.Platform.version);
if (versionNumber >= 5) {
	// バージョン5以上
} else if (versionNumber < 5) {
	// バージョン5未満
} else {
	// エラー処理
}

WebViewで背景を透明にする方法

ネイティブに比べて遅いようです。

// Resources/file/foo.htmlのWebViewを作成
var fooWebView = Ti.UI.createWebView({
	url: '/fle/foo.html',
	backgroundColor: 0
});

プログラムを複数のファイルに分割する方法

Resources/window1.js

var win = Ti.UI.createWindow({title:'window1'});
var label = Ti.UI.ceateLabel({text:'Say there'});
win.add(label);
exports.window = win;

Resources/app.js

var win1 = require('window1').window;
var tab = Ti.UI.createTab(window:win1);
var tabGroup = Ti.UI.createTabGroup();
tabGroup.addTab(tab);
tabGroup.open();

exportsを使ったCommonJSスタイルで記述し、require()で読み込みます。exportsで指定されたオブジェクトだけが公開され、しかもそれがサンプルの例でwin1に閉じ込められるのがポイント!
参考url: @IT QA

[1, 2, 3], [101, 2, 1, 10], [2, 1]といった3っつの配列で共通する要素の配列を取得する方法

Titanium Mobileに限った話ではありませんが、underscore.jsというライブラリを使用すれば、簡単に記述できます。underscore.jsファイルをResouces/vendor/以下に配置して、

_ = require('vendor/underscore')._
var arrayX = _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);

共通項の[1, 2]を取得できます。 他にも配列操作などの便利な処理が沢山あります。ライブラリやAPIはhttp://underscorejs.org/ 参考url: @IT QA

メールダイアログ表示

#pre{{
var emailDialog = Titanium.UI.createEmailDialog();
emailDialog.setSubject('Hello from Titanium!');
emailDialog.setToRecipients(['foo@yahoo.com']);
emailDialog.setCcRecipients(['bar@yahoo.com']);
emailDialog.setBccRecipients(['blah@yahoo.com']);

if (Ti.Platform.name == 'iPhone OS') {
emailDialog.setMessageBody('<b>Appcelerator Titanium Rocks!</b>');
emailDialog.setHtml(true);
emailDialog.setBarColor('#336699');
} else {
emailDialog.setMessageBody('Appcelerator Titanium Rocks!');
}

// attach a blob
emailDialog.addAttachment(event.media);

// attach a file
var f = Ti.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory, 'cricket.wav');
emailDialog.addAttachment(f);

emailDialog.addEventListener('complete',function(e) {
if (e.result == emailDialog.SENT) {
if (Ti.Platform.osname != 'android') {
// android doesn't give us useful result codes.
// it anyway shows a toast.
alert('message was sent');
}
} else {
alert('message was not sent. result = ' + e.result);
}
});
emailDialog.open();
}}

引用元url: http://stackoverflow.com/questions/4407888/sending-email-using-titanium-developer-application

Titaniumのプロジェクトを削除する方法

  1. Titanium Studioで左上のProject Explorerを開く
  2. 消したいプロジェクトを選択
  3. [Project] - [Close Project]
  4. [Edit] - [Delete]
  5. Finderでプロジェクトのフォルダを削除

タブバーの背景色変更

Titanium SDK 3.0から可能になったそうです。

var self = Ti.UI.createTabGroup({
	tabsBackgroundColor : 'red'
});

また、画像設定など詳細に設定できるようです。詳しくはこちらまで。 TabGroupの外装を色々触ってみる | UCHiDAK.NET

オブジェクトの中身を表示する方法(PHPでいうところのvar_dump)

Ti.API.info(JSON.stringify(obj));

Titanium Advent Calendar

技術者ブログ

TIPSリンク

開発環境

Appceleratorリンク

ユーザー会リンク

リンク