【Titanium Advent Calendar 2011:三日目】バージョンチェック

はじめに

この記事は、@astronaughtsさん企画の「Titanium Advent Calendar 2011」向けに書いています。

ちょっと宣伝1

いきなりで恐縮ですが、過日 Titanium Mobile で制作したアプリがリリースされているので紹介させてください。
クイズ早押しボタン

このアプリはあたまソフトさんによる企画で、私はプログラム部分だけ担当しました。先に述べたとおり、Titanium Mobile 製です。
クイズサークル等で早押し大会をするときに使えます。
iOS向けリリースになっていて、Andoridではまだ見た目の調整が必要ですが、とりあえず動作はします。私は未確認ですがiPadでも動作すると思います。
プログラム的な出来としてはイマイチ感が否めないとか、広告を出す予定だったのが、某社のSDKが正式に対応していなくて、サードパーティでモジュール化されていたものを取り込んだところ画面遷移で落ちまくる事象が頻発し、諦めた経緯があります。
Ti製アプリコレクターはぜひ買ってあげてください。(無償で開発したので私には特になにも起きませんがw)

今日の本題

で、今日の本題です。
みんないろいろ悩むところだけどあまり議論されていない(と思う)バージョンアップのチェック方法、です。

上記のアプリは、ユーザデータをSQLiteで管理しているのですが、何回か開発中にレイアウト変更をしました。
その都度DBを再作成していたのですが、これはリリース後に同じことをすると、蓄積したデータが消えてしまうのでよろしくありません。
そのため、アプリ内でバージョンを判別して、初回起動時、通常時、バージョンアップ時で処理を分けることにしました。

具体的なコードはこんな感じです(かなり端折っています)。


var V = Ti.App.getVersion(); // tiapp.xml の Version の値が入る
var CV = Ti.App.Properties.getString('CV',0); // 第二引数は初期値
if (CV == 0){
// 初回起動時(テーブルの生成とか)
}
if (CV < V){
// バージョンアップ時処理(データの更新とか。バージョン毎の処理はこの中でやる)
}
Ti.App.Properties.setString('CV',V); // Version の値を CV としてしまう(次回に備える)
// ここから通常処理

これにより、アプリの初回起動時はバージョン値(CV)を持っていないので、初期化処理が行われ、通常時は保持しているバージョン値があるので処理はスルーし、バージョンアップ後の初回起動時にバージョンアップ処理が行われるようになっています。

今日の本題は、そもそもコレでいいのか?もっといいやり方とかわかりやすいやり方はないかを聞きたいのと、コレでいいやって人には使ってもらってフィードバック欲しいなっていう二点です。

三日目なのにすごいささやかなネタで申し訳ありません m(_._)m

ちょっと宣伝2

排水管プロジェクト

上記のコードは乗っていませんが、Titanium のサンプルコードの KitchenSink に倣って、排水管(DrainPipe)という名前で Titanium Mobile のサンプルコードを蓄積するプロジェクトをやっています。
最近全然手を入れられていませんが、国際化対応、Android&iOS両対応準備、JSSがどんな感じになるのかを簡単にチェック、くらいができていて、もっとコードを集めたいと思っています。
その他のこともいろいろやってた経緯があって、google code なのですが、最近 git も使える感じなので移動しようかなとか考えています。
これを読んでいる人の中で蓄積に付き合ってもいいぜ、とか言ってくれる方がいらっしゃいましたらご連絡ください。

自己紹介など

最後になりますが、ちょっとだけ自己紹介。

Office L という屋号でフリーランスのSE(みたいなこと)をやっています。Twitter / raki です。

IT業界18年目、フリーになって8年目のごく普通のおっさんで、既婚、子持ち、ヘビースモーカー、ノンアルコール、音ゲーマー(jubeat,REFLEC BEAT,ちょっとだけDDR)です。

現職は某「てれーれってれ」って感じのCMで有名な企業さんの、それとは別の部隊でSE兼PGみたいなことをしています。

業界歴が長いので結構な数の言語(BASICやCOBOLから始まってCやVB,VC,Perl,PHP,シェルも書きますし、もちろんObj-Cも書きます。SGML,xml,HTML,CSS,JSはjQuery派)やDBMSMySQL,PostgreSQL,Oracle,DB2,珍しいところだとInfoMixとかいじってた時期があります)やOS(WindowsMacはもちろん、Linux系OSってゆうか、SolarisAIXなどのUNIX OSとか、OS2なども)が使えます。ネットワークもそこそこいけますし、オペレータとしてならFireworksも使えます(このブログの過去記事参照)。ご推察のとおり、立派な器用貧乏です。

たぶん一番得意なのは橋渡しで、ITなんかちんぷんかんぷんな企画屋さんとかデザイナーさん、IT以外は知ったこっちゃないSIerの間で、うまいこと仕事を回したり、調整したり、通訳したりするところで結構真価を発揮するみたいです。
個人的にはコード書いてる時間が一番幸せですけど。

メインの仕事は大抵常に埋まってるってゆうか、埋めてもらっている(超強力で優秀で友人でもある営業さんがついている)のであんまり必要ありませんが、サブのお仕事とか企画やシステムのご相談とか勉強会講師の依頼とかご飯食べに行きたいとか友達になりたいとかデートしたいとか(※ただし艶女に限るww)、もろもろお問い合わせお待ちしておりますw


というわけで、明日は @papetto_tvさんでしょうか?
よろしくお願いします!