Home > 技術 > TitaniumMobileのハマりポイントとお作法メモ

TitaniumMobileのハマりポイントとお作法メモ

ここ最近TitaniumMobileの主に検証を行なっております。

そして先日Titanium meetup Tokyo #17 (五反田) : ATNDにおじゃまして@masuidriveをはじめとする多くのTitaniumMobileファンの方々とお話ができました。
すごく楽しかったです!

僕がTitaniumMobileに触り始めて約一ヶ月ほどたちますが、ハマったポイントをつらつらメモしてみました。
使い方やTitaniumMobile自体のバグなど、まだ難しい部分は多々ありますが、4月に2.0がリリースされるようなので、今後が本当に期待できるフレームワークです。

スペック

簡単に今のぼくの環境をご紹介。

MacOS X
Lion
Java
1.6.0_29
Titanium SDK
1.8.2
Titanium Studio
1.0.9


requireをAndroidで使えるようにするため、tiapp.xmlにfastdevを無効にするタグを追加

CommonJSでコーディングする際、requireで外部のJavaScriptファイルを読み込むことが非常に多くなりますが、
このパスがfastdevを有効にしているとうまくいかない。
Titanium mobile -- Android でrequire()エラー - WEBサービス 情報局

Androidの場合だけですが、

が「Resources/lib/lib/a.js」のようになってしまう。
これは、Titanium1.6までのTi.includeと同じ現象かなーと思っています。
libの階層が一個多い!!
Titaniumのインクルードパスを指定する方法私案 - もぎゃろぐ

なので、以下のように非常に残念ですが、fastdevを無効にするタグをtiapp.xmlに入れましょう!

1.8現在、まだこのバグが直っていないので、今後に期待ですね。
とはいえ、Androidのデバッグは以下で紹介しますが、DDMSというツールを使って実機で行なっているので、
fastdevの恩恵はそもそも受けられなかったです。


アプリのバージョンを取得する方法

tiapp.xmlの

に書いたのアプリバージョンになります。
そして以下が取得コード

アプリを段階的にリリースする際などに、このバージョンを見て処理を分けたりできますね。

[via]
Office L テクニカルノート


JSSはプロジェクトをcleanしないと修正したものが反映されない問題!とかあといろいろ

以下が簡単なJSSサンプル。

app.js

app.jss

こちらのJSSファイルに記述したCSSっぽいものが、この場合はidに紐づいて反映されるが、
プロジェクトのcleanをしないと反映がされない。
つまり以下のredをblackにしてRunしなおしても反映されないのだ。

TitaniumのJSSという機能 | ひげろぐの記事を読むと1.6で修正されたとあるので、もしかしたら1.8で再度このバグが出たのかな?

また、以下の記事を読むとやっぱりまだJSSを使うときじゃないのかなーと思っています。1.6の記事ではありますが。
Titanium Mobile でCSS的な、それJSS!!!!!! | MOL

なので、Zaimで採用されているTitanium でつくろう! iPhone/Android 両対応アプリのような方法よいかもしれません。
(この方法すばらしいと思います!)


iPhoneの場合CommonJSのrequireで呼び出されたモジュール内でグローバル変数が見れる

以下のようなシンプルなサンプルでiPhone、Androidで試してみましたが、
iPhoneの場合にhogeがtestmodule内から見えてしまいました。

一応node.jsで同じことをやってみましたが、hogeが見えなかったです。

app.js

testmodule.js

以下の和訳ページを見てみると、

TiにおけるCommonJSモジュールの仕様の実装はnode.jsのものに基づいています。


via: CommonJS Modules in Titanium - JP::HSJ::Junknews::HatenaSide

アプリケーション内のすべてのモジュールにわたって共有されるグローバル変数は存在してはいけません。


via: CommonJS Modules in Titanium - JP::HSJ::Junknews::HatenaSide

と書いてあることから、このパターンだとiPhoneの場合のrequireがヘンテコなことになっているのかな?
なので、無名関数で囲ってあげる。

Androidのエラー内容

DDMS(↓のほうで解説)で調べた内容。

02-27 14:46:27.499: E/TiJSError(2137): (main) [311,706] ----- Titanium Javascript Runtime Error -----
02-27 14:46:27.499: E/TiJSError(2137): (main) [1,707] - In testmodule.js:5,36
02-27 14:46:27.499: E/TiJSError(2137): (main) [0,707] - Message: Uncaught ReferenceError: hoge is not defined
02-27 14:46:27.499: E/TiJSError(2137): (main) [0,707] - Source: Ti.API.log('aaaaaaaaaaaaaaaa: ' + hoge);
02-27 14:46:27.539: E/V8Exception(2137): Exception occurred at testmodule.js:5: Uncaught ReferenceError: hoge is not defined

iPhoneのエラー内容

無名関数でapp.js内を囲うと以下のエラーが出た。

[ERROR] Script Error = Can't find variable: hoge (unknown file).

■参考リンク
CommonJS Modules in Titanium - Documentation & Guides - Appcelerator Wiki
俺流コーディングスタイルにダメ出し - toweroflの日記
Titanium Mobile Best Practices - JP::HSJ::Junknews::HatenaSide


TextMate風なスニペットで楽々開発!

20111205233655.png

[via]
【Titanium Advent Calendar 2011:八日目】タイタにうもん第1話 - JP::HSJ::Junknews::HatenaSide

このスニペットのおかげで、buttonと入れてtabを押せばビヨッと展開されるし、webviewって入れてもいいし、infoって入れてもいいしね。
このコード補完は非常に強力です!(どうしてcreateWindowはないんだろう。)


.svnディレクトリが悪さするから、gitを使おう?

以下の記事によると、

私みたいに、会社の都合等で、gitが使えずにSVN使っている方いますよね。
なんと、TitaniumStudioにて、SVNチェックアウトしたAndroid用プロジェクトを、RunやDistributeしようとすると、失敗しちゃいます><。
画像の生成のところで失敗しているみたいですね><。


via: 【Titanium Advent Calendar 2011:十日目】

となっていて、svn exportしてからbuilder.pyを呼び出すということをされています。
ちょっと僕のほうで確認ができていないのですが、確かにすべてのディレクトリに.svnがいるのはちょっといやだなーと思うので、思い切ってgitを採用しちゃうのもありですね。

こちらSession01 - Android バットノウハウつめあわせ on Vimeoでも同じようにgitを使おうって話しになっていて面白かったです。


アプリ名の変更はプロジェクトの作り直しが楽?

Androidだと、

02-27 19:48:11.943: E/AndroidRuntime(6196): java.lang.RuntimeException: Unable to instantiate application com.hisasann.Hoge.HogeApplication: java.lang.ClassNotFoundException: com.hisasann.Hoge.HogeApplication in loader dalvik.system.PathClassLoader[/data/app/com.hisasann.Hoge-1.apk]
02-27 19:48:11.943: E/AndroidRuntime(6196): at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
02-27 19:48:11.943: E/AndroidRuntime(6196): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3287)
02-27 19:48:11.943: E/AndroidRuntime(6196): at android.app.ActivityThread.access$2200(ActivityThread.java:121)

が出る。

【Titanium Advent Calendar 2011:一日目】既にリリースしたアプリ名の変更(AppStore編) | MOL
にあるリンク先に、

Because of generated files and complexity with renaming some of them, we decided against allowing editing. You can create a new project and just copy in your Resources to the new project (and then just delete old).


via: How can i rename my iphone app project? » Community Questions & Answers » Appcelerator Developer Center

と書いてあるので、たしかにへんなエラーで(ClassNotFoundException)で悩むぐらいなら、新しくプロジェクト作ってリソースコピーしちゃえ!


ファイル名にアンダースコアが付いているとAndroidの実機にインストールできない

Titaniumでアンダースコア付きのファイルはやめておいたほうがよいみたい。

[ERROR] /TitaniumStudioWorkspace/Sample-LocalJqm/Resources/jqm/js/jquery.mobile-1.0.1/demos/docs/_assets/js/_viewsource.js is an invalid filename. Android will not package assets whose filenames start with underscores. Fix and rebuild.

このようにjquery.mobile-1.0.1の下にあるdemoディレクトリ内にアンダースコア付きのファイルがあって、iPhoneだと実機にインストールできますが、Androidでは入らない。

[via]
pd @ blogger: Titanium Mobile 1.8 からの変更点?ビルドが進まない。
(こちらの記事のV8が速いという記事、ちょっとグッときました)


ローカルHTMLの場合historyが記録されないのでjQueryMobileの戻るボタンは反応しない

httpで読み込むなどした、外部のサイトならOK!
ローカルHTMLの場合は、戻るボタンを押してもうんともすんともいってくれない。

[via]
Titanium の WebView で HTML をホスト | アカベコマイリ


Ti.Media.showCamera(カメラ)を使ってみる

古いバージョンではAndroidの場合に、tiapp.xmlに以下のようにパーミッションを追記する必要があるかもしれません。
現時点で検証している1.8.1と1.8.2では、デフォルトでAndroidのカメラパーミションがもれなく付いてきています。

iPhoneは特になんの設定もしなくても使えます。

■カメラを使ったサンプルコード
TitaniumMobileでカメラを使う方法 -- Gist

ちなみにここで、カメラのパーミションを追記していますが、僕個人としては、のちのちのことを考えると次でご紹介するAndroidManifest.xmlに追記する方法をおすすめします。


Xperia arcでカメラを使うと予期せぬ強制終了が発生する

Androidのバージョンは2.3.2だが、何をどうしてもカメラを撮影したタイミングで落ちてしまう。
具体的なコードは以下のとおり。
至って普通のカメラ呼び出しだが、この引数に渡しているオブジェクトのプロパティをいろいろいじってみたが100%落ちる
Xperia arcは比較的シェアが高めな端末なので、こうなるとカメラの機能は自前でモジュールとして作成するか、必要がないなら使わないなどの対策が必要が気がしています。

[#TIMOB-4899] Camera crashes Sony Ericsson Xperia Arc Android 2.3.2, 2.3.3 with all branches - Appcelerator JIRA

Androidが落ちた時のエラー

02-21 09:59:02.214: E/TiApplication(17570): (main) [681,31285] Sending event: exception on thread: main msg:java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=file:///sdcard/dcim/Camera/tia-1288732183.jpg typ=image/jpeg (has extras) }} to activity {com.hisasann.Baruth/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException; Titanium 1.8.1,2012/01/27 17:31,a24502a
02-21 09:59:02.214: E/TiApplication(17570): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=file:///sdcard/dcim/Camera/tia-1288732183.jpg typ=image/jpeg (has extras) }} to activity {com.hisasann.Baruth/org.appcelerator.titanium.TiActivity}: java.lang.NullPointerException
02-21 09:59:02.214: E/TiApplication(17570): at android.app.ActivityThread.deliverResults(ActivityThread.java:2504)

どうもintentまわりでヌルポが発生しているように見える。
なんとなくだが、

Sony Ericsson Xperia Arc has a branded Android version, and a special camera (also camera software).


via: [#TIMOB-4899] Camera crashes Sony Ericsson Xperia Arc Android 2.3.2, 2.3.3 with all branches - Appcelerator JIRA

と書いてあるとおり、もしかしたらarcはカメラのアプリが特殊なので、intentに失敗しているのかも?


AndroidManifest.xmlにAndroidの設定を追記してみる

Androidの設定は、AndroidManifest.xmlファイルに書き出されます。
細かい部分は、a. AndroidManifest.xml ファイル - ソフトウェア技術ドキュメントを勝手に翻訳を参照ください。

んで、このファイルがTitaniumの場合どこにあるかと言いますと、

/[プロジェクト名]/build/android/AndroidManifest.xml

になります。

一度でもAndroidでビルドしているとこのファイルができていますので、試しに見てみましょう!

下のほうにいくと

と書かれていますね。
つまり、TitaniumMobileの場合は、デフォルトでカメラが使える状態なのです。

この場所に置かれているAndroidManifest.xmlはビルドするたびに作りなおされてしまいますので、
プロジェクト内に配置して、うまいことマージしてもらいましょう。

TitaniumStudioから以下のディレクトリに↑のファイルをコピーする。

/[プロジェクト名]/platform/android/AndroidManifest.xml

これで、ビルド時にここのファイルを見に行ってくれるので、Android特有の設定はここに追記していく。
tiapp.xmlに書いていく方法もあるようなのですが、実はあんまりよく理解できませんでした。
そして、最終的にこっちに書かないとうまくいかない設定があったりなどで、このスタイルに落ち着いています。


iPhoneとAndroidでwidthなどのサイズの指定をどうするか

これはまだ最終的な策が出ていませんが、現時点でこうかなーという感じで書いてみます。
そもそもの話しですが、たとえばwidth:'320px'とこれは、400pxではなく300pxでもなく320pxです。
つまりiPhoneでは横幅いっぱいですが、他のAndroidなどは画面の中央ぐらいまでの場合もあります。

これだと各端末の場合はというif文が存在してしまい、とてつもなく大変なことになります。
これをうまいこと吸収してくれる?のがdp(だと思います)

Y.A.M の 雑記帳: Android multi screen 対応
を参考にさせていただいて、AndroidManifest.xmlに追記しました。

そして、プログラム内でサイズを指定する箇所は「width : '320dp'」のようにdpと指定しています。
dpに関する内容は、以下が詳しかったです。

画面の物理的な密度に基づいた抽象的な単位。
この単位は 160 dpi の画面と対応していて、160 dpi の画面で 1 dp = 1 px になる。なので、dp-pixel 比は画面密度(解像度)に応じて変化するが、必ずしも正比例するわけではない。


via: Y.A.M の 雑記帳: Android Dimension 単位

dpiが160の場合は320dpは320pxなんですが、このdpiが変わって240になると320dpが480pxになったりします。

ちょっとだけ厄介なのが、iPhoneのエミュレータは160dpiですが、iPhone4Sの実機で試したところ320dpiが返ってきました。
なんというRetina Displayよ!


dp指定の場合のanimateはどうしよう

Titaniumのアニメーションは非常に便利で、以下のように書くだけで動いてくれます。
jQueryみたい!

ここで問題なのが、heightやtopなどにはInt値しか渡せないことです。
つまり、

はエラーになります。
これを回避するために、以下のようなコードを書きたいところですが、iPhone4Sだとdpiが320なので、320dpを渡すと640が返ってきてしまいます。

現時点ではAndroidの場合に上記コードを実行するようにしていますが、果たしてiPadでうまいこといくのかどうか。
今後、確認します。


アプリを縦向き固定(portrait)のみにする

iPhoneの場合は、tiapp.xmlに以下のように記述すればよいのですが、

Androidは、AndroidManifest.xmlに記述します。
これは結構ネットでもいろんな記述されている方が多く、またそれらが古いバージョンでは動くが現バージョンでは動かないなどがあり結果このスタイルに落ち着きました。

■最終的なAndroidManifest.xml
AndroidManifest.xmlのサンプル、縦固定などなど。 -- Gist

ちなみにJavaScriptからもできるようです。

ただ、気をつけることはTitanium.UI.createWindowするときには指定せず、そのあとにorientationModesをセットしないとダメのようです。
むむっ!


存在しないオブジェクトプロパティの値がiPhoneとAndroidで異なる

以下のようなコードを書いたときにiPhoneとAndroidで結果が異なる。

iPhoneの結果

[INFO] <null>

Androidの結果

03-05 09:23:05.243: I/TiAPI(5644): undefined

とはいえ、

という書き方すれば大丈夫ですね。

[via]
Session01 - Android バットノウハウつめあわせ on Vimeo


Androidの場合HttpClientとWebViewでcookieが共有されない

以下のようのPHPコードでCookieの共有検証をしてみました。

クッキーにセットした値をカウントアップします。 -- Gist

結果、

  • iPhoneは共有される。ただし、アプリをkillするとCookieは消去される。
  • Androidは共有されない

Androidのほうの共有されない問題は、じつは結構でかい問題で、特にログイン機能を持っているアプリの場合に厳しいと思います。
これみなさんどうしてるんですかね。

なので、CookieよりはTi.App.Propertiesを使うほうが確かかもしれません。

[via]
Session01 - Android バットノウハウつめあわせ on Vimeo


httpsなサイトをWebViewで開く場合は証明書が大事!

httpsなURLにアクセスする際にオレオレ証明書だとアクセスすることができません。
その挙動がiPhoneとAndroidで違うので以下にメモ。

iPhoneで接続した場合

ちゃんとcertificateのエラーが出てくれる。

[ERROR] Error loading: https://hogehoge.com/, Error: Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be "hogehoge.com" which could put your confidential information at risk." UserInfo=0xa812dd0 {NSErrorFailingURLStringKey=https://hogehoge.com/, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://hogehoge.com/, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be "hogehoge.com" which could put your confidential information at risk., NSUnderlyingError=0x8c315f0 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be "hogehoge.com" which could put your confidential information at risk.", NSURLErrorFailingURLPeerTrustErrorKey=}

Androidの場合

何もエラーが出ず、画面にHTMLも表示されない。
つまり一見するとハマる。


Ti.Network.createHTTPClientで証明書がないhttpsを開けるけども?

以下のようにTitanium.Network.HTTPClientのvalidatesSecureCertificateというプロパティをfalseにすると、証明書がないhttpsなURLでも通信することができる。

ただし、

validatesSecureCertificateはシミュレータや実機テスト時はfalseだけど、リリース用の時は強制的にtrueなのかな? / "Does titanium mobile supports SSL with htt..."


via: Twitter / @hisasann: validatesSecureCertificate ...

なんか自分でもつぶやいていますが、
Does titanium mobile supports SSL with https URLs ? » Community Questions & Answers » Appcelerator Developer Center
によると、デプロイするとデフォルトtrueで上書きができないんじゃないかなーって思っています。(未検証)

アプリ開発ではこのhttpsなんだけど証明書がないケースでのテストができないこともあるので、
ちょっとテストがしにくいですね。


WebViewとTitaniumの連携 - ローカルHTML(アプリ内HTML)からTitaniumのイベントをfire

app.jsの一部

WebViewで読み込まれたローカルHTMLの一部

ちなみにですが、リモートのHTMLをWebViewに読み込んだ場合は、上記コードは動かない。
あたりまえですが、勝手にexternalなサイトからアプリ内のイベントを呼ばれちゃうのは困る。

場当たり的にいろんな名前でイベントfireしまくれば、もしかしたら一個ぐらいは動くかも?

ただし、HTML 内から Titanium オブジェクトを呼び出すのは、ローカルに保存された HTML でないといけません。


via: MountPosition Inc. » TitaniumでWebView にイベントリスナを登録する

■参考リンク
Titanium の WebView で HTML をホスト | アカベコマイリ
addeventlistener - Trouble using Titanium's webview to fire an API event - Stack Overflow
WebViweに表示されているHTMLからTitaniumの処理を実行する | ひげろぐ


WebViewとTitaniumの連携 - Titaniumから読み込んだHTMLを操作する

WebViewにロードしたHTMLをload後に書き換える方法

これはコードで見たほうが早いですね。

app.js

WebView.js

TitaniumMobileでWebViewを使う方法 -- Gist

上記の、

で行なっています。
ただし、まだ僕もよく分かっていませんが、構文にミスがあっても、うんともすんともエラーを出してくれません。
よって、デバッグがかなり大変になります。
なので、この処理はあくまでもヘッダー・フッターをdisplay:none;にしたいなど、
そういった比較的軽めな対応にしておいたほうがよさそうです。

また、このevalJSは複数行のコードを評価させると、1行目しか実行してくれません。(Androidの場合だけっ!)
つまり、以下のコードを実行すると、

alertは出ますが、テキストボックスの値は変わりません。
セミコロン1個までじゃないとダメなので、もし複数行のJavaScriptを実行する場合は、

と書くようです。
難しい!

[via]
【Titanium Advent Calendar 2011:二日目】evalJSの恐怖 - もぎゃろぐ


adbコマンドでAndroidデバイスを知る!

接続されているAndroidデバイスの確認は、

adb devices

ログは、

adb logcat

複数接続されている場合は、デバイス番号を指定する。

adb -s [デバイス番号] logcat

[via]
複数デバイスが動いているときにログを見る - ore*flow


AndroidのWebViewではlocalStorageが使えない

いろいろ試していてハマったんですが、AndroidのWebViewでlocalStoragenullになってしまう。
WebViewではなくブラウザではOK。

調べていくと、ネイティブだと以下のようなコードをWebViewを呼ぶ前にする必要があるみたい。

[via]
Android WebView で HTML5 の Web Storage と Web SQL Database API を使う - nobnakの日記

でも、この設定をできるコードがTitaniumに見つからない。

以下のようにいろんな人たちがハマっていて、これは今後どうなるんだろう。
Localstorage failure in webview » Community Questions & Answers » Appcelerator Developer Center
Webview - Enabling localStorage » Community Questions & Answers » Appcelerator Developer Center
how to enable localStorage iun Android » Community Questions & Answers » Appcelerator Developer Center
Twitter / @hisasann: AndroidのWebViewでlocalStora ...

外部サイトを読み込み、かつlocalStorageを使いたい場合は、Titanium.Platform.openURLブラウザを開いてあげるしかないのかな。
あとはTitanium.App.Properties.setStringを使ってなんとか、アプリ側に値を保持して、うまいことやる?
ちょっとややこしいですな。


Titanium-Google-Analyticsでトラッキング

rogchap/Titanium-Google-Analyticsを使ってできるようです。(未検証)

こちらの記事が参考になります。
Titanium MobileでGoogle Analyticsを利用する - box box box


Ti.Appにグローバルな変数を入れて共有する

引数で渡すよりもグローバル化したほうが効率的なシチュエーションがあるので、Ti.Appにいろいろぶらさげて管理したいところ。
ただ、Ti.App配下にはすでにたくさんのプロパティやらメソッドがあるので、これらを壊さず、かつ、開発者が追加したというのが分かるようにしたい。

ということで、

みたいに、一つワンクッションを入れて、プロパティを管理しようと思いました。
ところが、

としても、hogeがnullのままになるという減少に悩まされました。
なので、以下のコードで検証。

なんだこれ。。。
なので、function(){}を使って名前空間を作っています。

ちなみにですが、名前空間を使わず、以下のように入れれるので、面倒な方は以下の方法ですかね。

[via]
Ti.Appにオブジェクトをくっつけてグローバル変数的に使う | ひげろぐ


僕のiPhone、Androidのデバッグ環境

本来ならiPhoneもAndroidもエミュレータを起動して確認して、その後に実機に入れて確認という感じになるとは思うのですが、
僕の環境ではAndroidエミュレータを起動した際(ランダム)にMacが強制的に落とさないといけない状況になります。
具体的にどうなるかはInstagramこちらをご覧ください。
(どうやらカーネルパニックのようです)
Androidエミュレータを起動したときのMacのエラーログ -- Gist

それに、↑のほうで解説したようにfastdevを使った状態だとrequire時のパスがヘンテコになります。
もう、これだけ揃うとエミュレータで作業する意味があまりないので、実機でのデバッグになります。

ちなみにですが、エミュレータの起動は死ぬほど重いですが、実機への転送は意外と速いです。

Androidのデバッグについて

会社の方に教えていただいたのが、このDDMSという付属ツール。
以下の場所にあります。(Androidを触り始めて1週間でこのツールの存在を知りました!遅い!)

android-sdk-macosx/tools/ddms

僕は、しょっちゅう使うので、aliasにして.bash_profileに書いちゃいました。

alias ddms="~/_/dev/android-sdk-macosx/tools/ddms"

■参考リンク
AndroidのDDMSの使用方法のドキュメントを翻訳しました - Android(アンドロイド)情報-ブリリアントサービス

Androidの実機をMacに接続し、あとはRunのボタンのAndroid Deviceを選んでちょいとまちます。
すると、

[INFO] Application installed. Launch from drawer on Home Screen

と出るので、Androidのアプリのところから自分のアプリを起動します。
ここで、ちょっとしたことではなりますが、僕はTi.API.logではなくTi.API.errorを使ってログを吐くようにしています。
logほうでもいいんですが、流れるスピードが尋常じゃないので、errorで出力しておいて、
DDMS側のログレベルをerrorにしています。

それかSaved FiltersのところでFilterを作っちゃうかですね。

もっといい方法があるだろう。

iPhoneのデバッグについて

iPhone側はなんの問題もありません。
エミュレータでガシガシ開発しています!
しかもエミュレータ起動速い!いいね!


Jasmineを使ってテストをする

すでにあるguilhermechapiewski/titanium-jasmineこちらをCommonJS対応し、ディレクトリ構成を綺麗にした版

hisasann/titanium-jasmine

を作ってみました。

普通に起動したいなら、

make run-iphone

テストとして起動したいなら、

make test-iphone

クリーンしてから起動したいなら、

make clean && make run-ipad

TitaniumStudioから普通に起動しても問題ありません。


TitaniumMobileで作られたアプリ

  1. Zaim
  2. はてなカウンティング
  3. 積ん読本
  4. Wunderlist
  5. Nyars
  6. そうしてあなたはさっていくのね
  7. POPCORN S
  8. NIFTY-Serve
  9. Sptted
  10. MogSmash(MogSnapって今動かないですよね?)

こちらにかなりまとまっています。
Titanium Mobileの開発事例 « Titanium BBS(JP unofficial)


是非読んでいただきたい記事やスライドや動画やコード!

小さな Titanium Mobile の読み物

JavaScriptを使って一週間でiPhoneアプリを作ってみた。 - おんがえしの日記

Session06 - TitaniumでiOS/Android同時リリース:NIFTY-Serveの事例 from astronaughts on Vimeo.

Session07 - MogSnap 開発秘話&すぐに使える Titanium アニメーションテク from astronaughts on Vimeo.

toru0325/TKAnimationSample

toru0325/TiMetro - GitHub


まとめ

とにかくハマる!
ハマる!
ハマる!

でも、ふと思ったんですが、そりゃiPhoneとAndroidの両方をJavaScriptで開発し、かつ同じコードでもそこそこ動く環境という時点で非常にありがたい。
あとはUIを分けるなどして、分岐していくのかなーと思いますが、iPhoneではアニメーションすごくいい!Androidだとそこそこいい!なので、これから流行ってきそうですね。

Titanium Mobile 2.0リリース発表を東京でも行います! 詳細は後日公開しますが4/20の予定となっています!参加しようかな?と思う方はFavを頂けるとうれしいです!


via: Twitter / @masuidrive: Titanium Mobile 2.0リリース発表を ...

TitaniumMobile2.0期待!

Titanium Mobileで開発するiPhone/Androidアプリ (Smart Mobile Developer)
北尾 雅人
翔泳社
売り上げランキング: 11403

Trackback:0

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1286
Listed below are links to weblogs that reference
TitaniumMobileのハマりポイントとお作法メモ from HouseTect, JavaScriptな情報をあなたに

Home > 技術 > TitaniumMobileのハマりポイントとお作法メモ

Tag cloud
月別アーカイブ
Powered by
Powered by
Movable Type Commercial 4.261

Page Top