「東京恋愛ぬいぐるみ計画」アプリ作ってみた (◍•ᴗ•◍)

![スクリーンショット 2015-12-17 7.10.09.png](https://qiita-image-store.s3.amazonaws.com/0/100210/7fd69e8f-c473-edd7-a9a9-163fb8530874.png)


# Titaniumフレームワークで個人アプリ作ってみた

App Store: https://itunes.apple.com/jp/app/dong-jing-lian-ainuigurumi/id923830297?mt=8
Google Play: https://play.google.com/store/apps/details?id=com.kyuuppidodan.renainuigurumi
よろしければ是非使ってみてください (^^)/

Titaniumフレームワークで個人アプリを作ってみました^^  海外のRandom Acts of Kindness（知らない人のためになんかいいことをしてあげる遊び - 自動販売機に使えるコインを貼ったり、ホテルを出る時に「きれいな部屋掃除をありがとう！」カードを残したり - 説明： http://greenz.jp/2011/02/04/random_acts_of_kindness/ ）が大好き - すごくピュアな心で、忍びいたずら。そうして自分の「死ぬまでにしたい10のこと」リストの一件は「自分がいたおかげで、誰かと誰かが結婚する」がきかっけで、恋愛テーマのRandom Acts of Kindnessにしました。

アプリは簡単 - アプリ内で場所を決めたら、いつかの日にその場所にぬいぐるみ系お守りが現れます - 見つけたら自分のものにしてください！それほどシンプルです - ユーザーがぬいぐるみを置いたりすることはないです =)  アプリは一年間前にリリースされてちょこちょこ更新され続けました。

Note: アプリはGumiと関係ないです。

# 反省

## Titanium (Appcelerator)の選択肢は正解だったと思う

### ニーズに応えた

欲しかったのは
- iOS & Androidを一発でビルドできるフレームワーク
- エキゾチックなことしなくてもいいからとりあえずアプリの定番機能ができるフレームワーク

その条件を考えたら自分のイメージはTitaniumかPhoneGapかXamarinでした。

うちのアプリに動的更新ないし、会社でもずっとHTMLを使っていたから新しいこと試したかったし、PhoneGapは個人的に魅力さを感じませんでした。Xamarinは「欲しかった」項目に対応していますがTitaniumと違ってオープンソースじゃないです。結局周りから話をよく聞いたTitaniumを経験したくてそれにしました。

（2011のブログに「メモリは無くなるからTitanium使うな！」書いてある - 未だにそれを読んで怖いw
： https://usingimho.wordpress.com/2011/06/14/why-you-should-stay-away-from-appcelerators-titanium/ なおそれは4年前の話なのでご安心ください =) ）

### 機能揃った

Titaniumには実装したかった機能は特に問題なく揃っていました -

- 普通の画像、テキスト、ボタンレイアウト
- メニューバー付きタブグループ&タブ
- Photo Gallery（チュートリアルの）
- マップ
- Webview
- ネットワーク
- プッシュ通知

はイメージした通りできました。

AlloyというMVCフレームワークもあってXMLでビューのテンプレート書きました。

### プラグインで強化ができた

Titaniumはオープンソースで、プラグインも書けますので問題がある時は自分で機能を実装できると安心しました。

基本的にフレームワークはそのまま大丈夫でした。ただ自分が使っていた時のAppcelerator解析サービス(Appcelerator Analytics)はあまりにもひどくて解析情報はまったくダッシュボードに出てくれなくて（いろいろなユーザーは同じ現象でした - https://developer.appcelerator.com/question/160201 とか - 答え数は０でした =( ）、結局Google Analyticsをプラグイン型で使いました。

### ただ、Appcelerator Studioが途中で有利になってしまってめんどくさくなった

- もともとAppcelerator Studio (古い名前：Titanium Studio）は無料版とenterprise版ありました
- ほとんどのユーザーは無料版でした
- 今年、無料版はなくなって月々4000円になりました。今までのユーザーは特別な例外として無料で続けられました
- ただ、私は必要な申請が遅すぎて無料派に入れませんでした
- 泣きながらCSに問い合せしましたがだめでした
- 今も払っていないためAppceleratorからのTitaniumビルドツールは本番アプリをビルドしてくれません
- Titaniumのオプーンソース版も続けますので、結局オプーンソース版を無理やり自分でビルドしています ^^;
- ただ、まあオプーンソース版も続けている限り文句できないだろう ^^;

# Herokuサーバーの出番

サーバーはHeroku上で動くかなりひどく書いたNode.js。

最初のサーバーはAppceleratorが提供したPaaS「Node.ACS｣を使いましたが、サポートを探すのは難しかったです - 検索しても使っている人はよく見つからなくて、Appceleratorからのサポートもenterpriseメンバーにしか提供されてなかったです。

Node.ACSにアプリを乗せたら、数日後サーバーはなんかの理由でスリープ状態に入りました。「ああやっぱりアクティブじゃないと止まる」と思いましたが、どうもユーザーがいてもいなくてもランダムにスリープでしはじめました。

ドキュメンテーションはなくて、すぐにHerokuアカウント作りました =)

# その他

## 頻繁にバージョンアップしてくれる

Appceleratorサービスを別にして、Titanium自体のコミュニティー&会社は揃っていて頻繁にバージョンアップしてくれます。サポートされ続けます。JIRA（ https://jira.appcelerator.org ）を見たらコミュニティーは元気です。iOS9, Android M対応はすぐに出ました。

## Unit testしていない気がする

Appcelerator 5.0.2でAndroidのデータpostはいかなり動かなくなりました（ https://jira.appcelerator.org/browse/TIMOB-19661 ）。チケットは「優先度 Medium」になっていてムカつく =)

次のバージョンで治りましたが、バージョンアップが怖くなってきて結局そのパッチだけ与えて自分でビルドしました。

ローカルでのデバッグはバラバラです。JavascriptロジックはV8エンジンで動いていますので簡単にAppcelerator Studioからブレイクポイントを作れます。その下のレイヤにバグある場合、Java/NDK/Objective Cデバッグになります（一つの調査でコマンドラインjdbを使って端末につなぐことになりました）。他に経験したバグは結局AndroidのXMLスタイルの問題でした。

## iOS版もAndroidも作る時、時間は+20%

- アクションバーの場所
- マップビュー
- プッシュ
- パーミッション

等はAndroidで再調整。コードで「 if(Ti.Platform.osname == "android") 」は19回出ています。

##「Appcelerator頼む」主義

プラグインつくれます＆上記のようにTitaniumは自分でも編集、ビルドできすが、大体の場合最終的にAppceleratorに依存しています。

FB等のsdkアクセスはAppceleratorを通していますので、少し古いバージョンを使う前提です。Titanium 4までFacebookのネイティブシェアダイアログに対応していませんでしたので、シェアする時にsingle sign onなしでwebviewが出されてユーザーはパスワードを記入する必要ありました。

そうして、もちろんのことですが自分のコードを作る時にAppceleratorのデザインに従わなければならないです - AndroidレイアウトのthemeはAppCompat派生じゃないとだめ、とか。



# 時々運が悪いだけ =)

Android 4.1.1で治ったマップ周りクラッシュありましたが、（ http://stackoverflow.com/questions/6018126/problem-with-runtime-exec-and-android : Runtime.exec()中に他のスレッドがmallocしたらフリーズ ）私ずっとAndroid 4.0.3でしかテストしていませんでしたw