T

Titaniumでリジェクト・iCloud関連

Titanium Mobileで作ったアプリがリジェクトされたので記念に。

今回リジェクトされた理由は、iCloud対応でデータの格納場所が厳密に定められ、チェック内容が変更になったからです。これからのアプリは生成されたデータを格納する際には以下のルールに従う必要があります。

(1) アプリが再生成できないファイルは/Documentsに保存

例えば、メモ帳アプリでユーザが書いたメモなんかはこちらに保存しないといけません。iCloudで自動的にバックアップされます。

(2) 再生成可能なファイルは/Library/Cachesに

データベースのキャッシュも含む、とありますが、ダウンロードされたファイルなどもここに置くのが正しいようです。

(3) 一時的なファイルはちゃんと/tmpに

アプリ終了時に消すのをお忘れなく。

(4) バックアップされては困るデータは”do not back up”

オフラインでの利用などで使いたい、iCloudやiTunesにバックアップされては困るファイルにはこの属性を追加しましょう。

さて、Titanium Mobileですが、例えばsqliteを使った場合、データファイルは/Library/Application Support/database以下に保存されてしまいます。残念ながら、Appleの新しい規制ではこれはリジェクトの理由になります。

Ti.Database.install('Resouces以下に置いたdbファイル', 'my_app');

このようにinstallを使って設置したデータファイルは/Library/Application Support/database/my_app.sqlとして保存されます。

これをAppleの規制に適応されるためには、例えば

Ti.Database.install('Resouces以下に置いたdbファイル', '../../Caches/my_app');

とすることで、/Library/Caches/my_app.sqlとして保存することができるようになります。

また、ファイルを保存する際にTi.Filesystem.applicationDataDirectoryを使っていた場合は

var root_dir = Ti.Filesystem.applicationDataDirectory + '../Library/Caches/';

このように変更すると/Library/Cachesを指定することができます。

既存のアプリをアップデートする場合は、Ti.Database.installを上のようにしてあげて、アプリの起動時に古いデータファイルを新しい場所に移動してあげるとかしないといけませんね。途中、スペースを含むパスがありますのでこんな風に指定します。

var db_file = 'my_app.sql';
var old_file = Ti.Filesystem.applicationDataDirectory + '../Library/Application%20Support/database/' + db_file;
var new_file = Ti.Filesystem.applicationDataDirectory + '../Library/Caches/' + db_file;
var old = Ti.Filesystem.getFile(old_file);
if(old.exists()){
  old.move(new_file);
}

Posted by on 11月 23, 2011 in Apple, Titanium

Comments

  • […] 題でリジェクトされた事例。今はどうなっているか要調査 Titaniumでリジェクト・iCloud関連 | Selfkleptomaniac […]

  • コメントを残す