Папка кэшей очищена (очищена/очищена) автоматически на iOS
У меня есть приложение, которое позволяет загружать "модули", которые могут расширить использование вашего приложения.
Когда пользователь загружает модуль, я извлекаю ZIP файл с сервера и извлекаю его в свою папку Caches. (Каждый из этих почтовых индексов может быть размером от 60 до 2 МБ).
К сожалению, доступны более 300 модулей, и многие пользователи загружают по меньшей мере 50-60 из них на свое устройство.
В последнее время у меня появилось много жалоб, что модули просто исчезают с пользовательского устройства, поэтому я провел некоторое расследование и наткнулся на следующую формулировку в документации Apple.
iOS удалит ваши файлы из каталога Caches, когда это необходимо, поэтому ваше приложение должно будет деградировать, если файлы данных будут удален.
А также следующую статью, объясняющую далее об этой ситуации:
http://iphoneincubator.com/blog/data-management/local-file-storage-in-ios-5
Моя проблема в том, что у меня нет фактического способа унижения изящно, так как я не могу автоматически позволить пользователю загружать так много модулей. Это может занять часы в зависимости от подключения к Интернету и размера модулей.
Итак, у меня есть несколько вопросов:
- Кто-нибудь из вас когда-либо имел дело с подобной ситуацией, и если да, то как?
- Кто-нибудь знает, когда именно iOS чистит кеш? Что считается предупреждением о "низком пространстве"? Таким образом, я мог бы хотя бы дать пользователю предупреждение о том, что у него недостаточно места для установки нового модуля.
- Есть ли способ получить какое-то предупреждение перед очисткой папки Cache?
Это очень неприятный шаг от Apple, и я действительно не вижу выхода. Было бы очень приятно услышать от вас некоторые идеи.
Ответы
Ответ 1
Изменить. После некоторого тестирования это кажется очень хорошим и не очищается.
Это еще не подтверждено на 100%, но он отлично работал на наших основных тестах (я принесу более подробные результаты по мере их поступления). Кажется, сохранение данных в приложении "Поддержка приложений" устраняет эти проблемы, так как эта папка не очищается.
Состояние docs:
Используйте постоянную директорию службы поддержки NSApplicationSupportDirectory, добавив ваш <bundle_ID>
для: Файлы ресурсов и данных, которые ваше приложение создает и управляет для пользователя. Вы можете использовать этот каталог для хранения информации о состоянии приложения, вычисленных или загруженных данных или даже пользовательских данных, которые вы управляете от имени пользователя/файлов автосохранения. `
Вы можете попасть в эту папку следующим образом (обратите внимание на добавление идентификатора пакета в соответствии с требованиями официальных документов Apple):
[[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[[NSBundle mainBundle] bundleIdentifier]]
Надеюсь, это поможет всем, и, как я сказал, я опубликую более подробные результаты теста в выходные.
Изменить 2:
Очень важно добавить эту строку, чтобы предотвратить синхронизацию временного содержимого от поддержки приложений. Я использую его в конце моего приложенияDidFinishLaunching:
[[NSURL URLWithString:NSApplicationSupportDir] setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];