15

アプリの使用を拡大できる「モジュール」をダウンロードできるアプリがあります。
ユーザーがモジュールをダウンロードすると、サーバーからZIPファイルを取得し、それを彼のCachesフォルダーに抽出します。(これらの各zipは、60kから2MBのサイズにすることができます)。

残念ながら、300を超えるモジュールが利用可能であり、ユーザーの多くはこれらの少なくとも50〜60をデバイスにダウンロードします。

最近、モジュールがユーザーデバイスから消えてしまうという苦情がたくさん寄せられたので、調査を行ったところ、Appleのドキュメントで次のような表現に出くわしました。

iOSは必要に応じてCachesディレクトリからファイルを削除するため、データファイルが削除された場合、アプリは正常に機能を低下させる必要があります。

また、この状況についてさらに説明する次の記事:http: //iphoneincubator.com/blog/data-management/local-file-storage-in-ios-5

私の問題は、ユーザーにこれほど多くのモジュールを自動的にダウンロードさせることができないため、実際に正常に劣化させる方法がないことです。インターネット接続とモジュールのサイズによっては、数時間かかる場合があります。

だから私はいくつかの質問があります:

  1. 同様の状況に対処しなければならなかった人はいますか?もしそうなら、どのように?
  2. iOSがいつキャッシュをパージするかを正確に知っている人はいますか?「スペース不足」警告とは何ですか?このようにして、少なくともユーザーに、新しいモジュールをインストールするのに十分なスペースがないことを警告することができます。
  3. キャッシュフォルダがクリアされる前に、ある種の警告を受け取る方法はありますか?

これはAppleからの本当に苛立たしい動きであり、私は本当に抜け道を見ていません。あなたからいくつかのアイデアを聞いてみたいです。

4

1 に答える 1

11

編集:いくつかのテストの後、これは問題なく機能しているようで、パージされません。

これはまだ100%確認されていませんが、基本的なテストでは問題なく機能しました(より詳細な結果が得られたら投稿します)。このフォルダは削除されないため、データをアプリの「アプリケーションサポート」フォルダに保存すると、これらの問題が解決するようです。

ドキュメントの状態:

アプリケーションサポートディレクトリ定数NSApplicationSupportDirectoryを使用して、次のものを追加<bundle_ID>します。アプリがユーザーのために作成および管理するリソースファイルとデータファイル。このディレクトリを使用して、アプリの状態情報、計算またはダウンロードされたデータ、さらにはユーザー/自動保存ファイルに代わって管理するユーザー作成データを保存できます。

次のようにそのフォルダにアクセスできます(公式のアップルドキュメントで要求されたバンドルIDの追加に注意してください)。

[[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[[NSBundle mainBundle] bundleIdentifier]]

これが誰にでも役立つことを願っています、そして私が言ったように、私は週末の間にもっと徹底的なテスト結果を投稿します。

編集2: アプリケーションサポートからの一時的なコンテンツの同期を防ぐために、この行を追加することは非常に重要です。アプリケーションの最後に使用しますDidFinishLaunching:

[[NSURL URLWithString:NSApplicationSupportDir] setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];
于 2012-07-12T14:01:42.830 に答える