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); }
Comments
[…] Titaniumでリジェクト・iCloud関連 | Selfkleptomaniac […]
[…] ようです。 〜〜〜 http://selfkleptomaniac.org/archives/1857 […]
[…] 題でリジェクトされた事例。今はどうなっているか要調査 Titaniumでリジェクト・iCloud関連 | Selfkleptomaniac […]