iOS: зарезервируйте минимальный объем свободного места на диске для приложения

Мое приложение должно убедиться, что всегда есть минимальное количество (возможно, 5-10 МБ) свободного места на диске, чтобы оно работало правильно. Я должен сохранить важные данные в файл, иначе все будет повреждено.

Основная проблема: что, если пользователь загружает мое приложение, и у него было ТОЧНО столько свободного места на диске, которое ему нужно для приложения (без моих данных, созданных при первом запуске)

Когда он сейчас запускает приложение, я пытаюсь выполнить некоторые начальные настройки - здесь мне нужно записать около 2-3 МБ в файл, и это место должно быть свободным.

Что я могу сделать, чтобы достичь этого?


person Max    schedule 05.03.2015    source источник
comment
Когда именно вы хотите это проверить? При запуске приложения? Почему бы просто не показать сообщение об ошибке нехватки места на диске для этого приложения при запуске для первого места? На самом деле вы не можете зарезервировать память, вы можете записать/выделить ее, чтобы ни одно другое приложение не могло использовать эту часть.   -  person Erfan    schedule 06.03.2015
comment
В Android приложение не установится (будет загружено), если на устройстве недостаточно места. Это особенность платформы, я думаю, iOS делает что-то подобное.   -  person Mathemats    schedule 06.03.2015
comment
Но App Store покажет только тот объем дискового пространства, который необходим моему приложению для его установки. При первом запуске мне нужно записать дополнительно 2-3 МБ на диск и App Store разрешит загрузку, но тогда этих 2-3 МБ нет. Конечно, я мог бы показать сообщение об ошибке. Мне просто интересно, можно ли установить объем необходимого дискового пространства выше, чем он есть на самом деле.   -  person Max    schedule 06.03.2015
comment
можете ли вы включить ненужный файл размером 3 МБ в свое приложение, который будет удален позже?   -  person aaaaa says reinstate Monica    schedule 06.03.2015
comment
@aandreev, нет, нельзя. Единственный материал, который вы можете включить в загрузку, — это контент в пакете приложений, и он доступен только для чтения в iOS.   -  person Duncan C    schedule 06.03.2015


Ответы (2)


Вы можете сделать две вещи:

Во-первых, когда ваше приложение запускается, вы можете узнать доступное пространство, используя NSFileManager.attributesForFilesystemofPath:. Если места мало (а свободных 5 МБ очень мало), вы можете предупредить пользователя и, возможно, даже отказаться от запуска действий в вашем приложении, которые требуют этого доступного места.

Во-вторых, вы можете создать рабочий файл. Если вы знаете, что вам нужно хранилище объемом 5 МБ, то, возможно, вы можете выделить файл размером 5 МБ и использовать этот файл для своего хранилища.

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

Это требует дополнительного учета, но вы гарантированно получаете место для своих данных.

person Stefan Arentz    schedule 06.03.2015
comment
Я тоже думал об этом, но надеялся, что есть лучшее решение. Спасибо! У меня есть несколько файлов для записи на диск (и будьте уверены, что это всегда возможно). Вы хотите сказать, что я мог бы создать файл-контейнер размером 5 МБ, а затем записать в него? Так что мне не пришлось бы удалять мои фиктивные файлы, если мне нужна дополнительная память? - person Max; 06.03.2015

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

person Duncan C    schedule 06.03.2015