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

ICloud + Хранение носителей в папке документов iPhone

Я, как и многие разработчики, недавно получил электронное письмо от Apple, в котором говорится, что мы должны перенести наши данные из каталога документов в другую папку, чтобы разрешить более упорядоченное резервное копирование в iCloud.

В недавнем тестировании выясняется, что [ваше приложение] хранит достаточное количество данных в папке "Документы".

Так как резервные копии iCloud выполняются ежедневно по Wi-Fi для каждого пользователя iOS, важно обеспечить наилучший пользовательский интерфейс минимизируя объем данных, хранящихся в вашем приложении.

Marco Arment, из-за неустойчивой славы, имеет хорошее отношение к проблеме, которая заключается в том, что рекомендуемое место для хранения загружаемых файлов находится в /Library/Caches. Однако проблема заключается в том, что оба /tmp и/Caches могут быть "очищены" в любое время, когда ОС решает, что устройство работает на низком уровне хранения. Если ваше приложение очищено, данные, загруженные вашим приложением и сохраненные вашим пользователем, исчезли. Естественно, пользователь будет обвинять вас, а не Apple.

Что делать?

4b9b3361

Ответ 1

В iOS 5.0.1 был введен флаг для решения этой проблемы:

https://developer.apple.com/library/ios/#qa/qa1719/_index.html

Их рекомендация - создать папку в /Library/like/Library/PrivateDocs и поместить туда ваши файлы. Однако вам также придется установить на них флаг "не делать резервные копии", поскольку по умолчанию каждый файл в /Library, за исключением тех, что находятся в /Library/Cache или tmp, по умолчанию. Установите флажок в папке PrivateDocs с помощью этой команды:

#include <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}

Ответ 2

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

Для приложений, у которых есть данные, которые не входят в Caches, рассмотрим Library/Application Support.

http://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1

Поддержка приложений:

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

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

В iOS содержимое этого каталога создается iTunes.


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