Подтвердить что ты не робот

Будет ли доступно приложение <Application_Home>/Library/Caches для обновления приложения?

В моем приложении iPhone я кэширую необработанные данные некоторых сжатых файлов, чтобы сохранить время загрузки. Но эти файлы могут измениться в обновлении.

Будет ли iOS прозрачным /Library/Cache для меня, когда приложение будет обновлено, или мне нужно очистить его сам?

4b9b3361

Ответ 1

Short:

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

Long

Файлы, сохраненные во время обновлений приложений Когда пользователь загружает обновление приложения, iTunes устанавливает обновление в новом приложении каталог. Затем он перемещает файлы данных пользователей из старого перед установкой в ​​новую директорию приложения перед удалением старый установка. Файлы в следующих каталогах гарантированы сохраняться в процессе обновления:

  • Application_Home/Документы
  • Application_Home/Library

Хотя файлы в других каталогах пользователя также могут быть перемещены, вы не должны полагаться на то, что они присутствуют после обновления.

От Яблоков Документация: Среда выполнения приложений - Резервное копирование и восстановление

Application_Home/Library/Caches Используйте этот каталог для записи любых файлы поддержки приложений, которые вы хотите сохранить между запуска приложений или во время обновлений приложений. Ваш приложение обычно несет ответственность за добавление и удаление этих файлы. Он также должен иметь возможность воссоздать эти файлы по мере необходимости потому что iTunes удаляет их во время полного восстановления устройства. В iOS 2.2 и более поздних версиях содержимое этого каталога не копируется от iTunes.

От Яблоков Документация: Среда выполнения приложений - Файловая система (daveoncode)

Вот пример того, когда он очищает кеш во время "обновления": Вы устанавливаете приложение X V1.0. Обед это один раз и начало делать что-то еще. iOS и нуждается в восстановлении. Разработчик выпускает V1.1. Вы обновляете приложение в iTunes на своем Mac. Вы восстанавливаете свое устройство через 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. Как Кендалл также указал, что это кеш, поэтому файлы могут быть удалены из него операционной системой в любой момент. Поэтому каждый раз, когда вы загружаете любой файл из Application_Home/Library/Caches, вам приходится учитывать, что файл больше не существует (Кендалл коснулся этого).

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

Ответ 2

Чтобы быть в безопасности, вы должны очистить его самостоятельно. Там, похоже, нет документации, в которой говорится, что она будет очищена для вас, поэтому, даже если это произойдет, вы не можете рассчитывать на ее продолжение.

Ответ 3

Каталог кэшей будет очищен, если iOS закончится. Если пользователь выбирает "обновить все" из опций хранилища приложений, вполне вероятно, что у них закончится свободное пространство.

Вы должны хранить файлы только в каталоге Caches, если они могут быть восстановлены приложением. Насколько я понимаю, медиа-плеер в 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);
            }
        }
    }

}

Ответ 4

Это вам! Цитата из Apple documentation:

Используйте этот каталог для записи любых файлов поддержки приложений которые вы хотите сохранить между запусками приложения или во время обновления приложений. Ваша заявка, как правило, отвечает за добавление и удаление этих файлов. Он также должен быть способен воссоздать эти файлы по мере необходимости, потому что iTunes удаляет их во время полного восстановление устройства. В iOS 2.2 и более поздних версиях содержание этого каталог не копируется iTunes.

Ответ 5

Вся суть /Caches состоит в том, что система может очищать данные, хранящиеся там в любое время - если это необходимо. Вы не должны беспокоиться об очистке этого каталога.