私のiPhoneアプリでは、ローディング時間を節約するためにいくつかの圧縮ファイルの生データをキャッシュしています。しかし、これらのファイルはアップデートで変更される可能性があります。<Application_Home>/Library/Cachesはアプリのアップデート時にクリアされますか?
アプリが更新されたとき、または自分でクリアする必要があるときに、iOSのクリア/ライブラリ/キャッシュが表示されますか?
私のiPhoneアプリでは、ローディング時間を節約するためにいくつかの圧縮ファイルの生データをキャッシュしています。しかし、これらのファイルはアップデートで変更される可能性があります。<Application_Home>/Library/Cachesはアプリのアップデート時にクリアされますか?
アプリが更新されたとき、または自分でクリアする必要があるときに、iOSのクリア/ライブラリ/キャッシュが表示されますか?
ショート:
Will iOS clear /Library/Caches for me when the app is updated
ん
それは、iOSがアップデート中に明確にすべてまたはApplication_Home/Library/Caches
の一部を行うことは可能ですか? はい
or I need to clear it myself?
クリアする内容が消去されていることを確認する必要があります。
両方の状況に備えてください。
アプリが更新されたかどうかiOS Application Update Test
ロング参照してください:アプリケーションの更新時に
保存したファイル、ユーザーが アプリケーションのアップデートをダウンロードし、iTunesは新しいアプリケーション ディレクトリにアップデートをインストールします。次に、古いインストール を削除する前に、ユーザーのデータファイルを古いアプリケーション から新しいアプリケーションディレクトリに移動します。他のユーザー・ディレクトリ内のファイルも上に移動することができるが、あなたは、
- APPLICATION_HOME /書類
- APPLICATION_HOME /ライブラリ
:以下のディレクトリ内のファイルは、更新処理中に保存されること に保証されています は、更新後に存在していることに頼るべきではありません。リンゴのドキュメントから
:The Application Runtime Environment - Backup and Restore
APPLICATION_HOME /ライブラリ/キャッシュ使用このディレクトリは、あなたが アプリケーションの起動や間で保持したい任意の アプリケーション固有のサポートファイルを書き込みますアプリケーションの更新中にあなたの アプリケーションは、一般に、これらのファイルを追加したり削除したりする責任があります。また、必要に応じてこれらのファイルを再作成する必要があります。 iTunesはデバイスを完全に復元する際にiTunesを削除するためです。 iOS 2.2以降では、このディレクトリの内容はiTunesによってバックアップされません。 リンゴのドキュメントから
:The Application Runtime Environment - The File System(daveoncode)ここで
それは "更新" の間にキャッシュをクリアしない場合の例は: あなたは、アプリのX V1.0をインストールします。それを一度昼食し、何か他のことをし始める。 iOSの誤動作が復旧する必要があります。開発者はV1.1をリリースします。 MacのiTunesでアプリを更新します。あなたはiTunes経由でデバイスを復元します。 iTunesはV1.1をインストールします。ユーザーがあなたのアプリをランチします。あなたのアプリは、そのようなことが起こったことは通知されませんが、Application_Home/Library/Cache
のすべてのファイルはなくなっています(iTunes removes them during a full restoration of the device
)。
そこに本当に重要な情報:It should also be able to re-create these files as needed
。 Kendallのように、それはキャッシュであることが指摘されているため、オペレーティングシステムによってファイルが削除される可能性があります。だから、ファイルをロードするたびにApplication_Home/Library/Caches
からファイルがなくなった(Kendallがこれに触れた)場合を考慮する必要があります。
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
if(![fileManager fileExistsAtPath:[cachePath stringByAppendingPathComponent:@"myfile.zip"]]) {
//create it, copy it from app bundle, download it etc.
}
//start using it
/キャッシュの全体的なポイントは、システムがいつでもそこに保存されているデータをクリアできることです。そのディレクトリをクリアすることについて心配するべきではありません。
安全のためには、自分でクリアする必要があります。それはあなたのためにクリアされることを示すいかなる文書も存在しないようであり、そうであってもそれを続けることにあなたは頼ることができません。
これはあなた次第です! Appleのdocumentationからの引用:
使用このディレクトリは、アプリケーションのか アプリケーションのアップデート時に起動間で保持したい任意のアプリケーション固有のサポートファイル を書き込みます。あなたのアプリケーションは、一般的に これらのファイルの追加と削除を担当しています。また、 の復元時にiTunesがこれらのファイルを削除するため、必要に応じてこれらのファイルを再作成することができます。 iOS 2.2以降では、この ディレクトリの内容はiTunesによってバックアップされません。
iOSの領域が不足している場合、キャッシュディレクトリは削除されます。ユーザーがアプリストアオプションから「すべて更新」を選択すると、スペースが足りなくなる可能性があります。
ファイルをアプリケーションで再作成できる場合は、ファイルをキャッシュディレクトリに保存する必要があります。私が理解から、iOS7でのメディアプレーヤーのみがキャッシュディレクトリに保存された動画を再生し、そしてここで私は(念のため)、手動でそれらをクリアする方法ですします:
-(void)deleteAllVideos
{
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *directoryContent = [fileManager contentsOfDirectoryAtPath:cachePath error:NULL];
NSError* error;
NSString* fullFilePath = nil;
for(NSString* fileName in directoryContent)
{
if([fileName hasSuffix:@".mp4"])
{
fullFilePath = [cachePath stringByAppendingPathComponent:fileName];
[fileManager removeItemAtPath:fullFilePath error:&error];
if(error)
{
DLog(@"Error: %@",error);
}
}
}
}
非常にシンプルで良いコードです。キャッシュディレクトリの.zipファイルに適用します。 – BlackSheep
システムをアップデートする前にキャッシュをクリアした場合、そこにあります問題ない。問題は、更新後にキャッシュがクリアされない場合、キャッシュされたファイルの一部が変更されている可能性があり、古いファイルが引き続き使用されることです。 – fbafelipe
アプリのバージョン番号をキャッシュされたファイルと何らかの形で関連付けると、これは問題にはなりません。 –