iPhone: Где сохранить данные пользователей, когда резервное копирование icloud не требуется

Привет, я собираюсь отправить свое приложение в магазин приложений. Я прочитал, что есть несколько изменений в правилах хранения данных Apple, поскольку введено хранилище iCloud. Я сохранял все данные пользователя в каталоге документов приложений, поскольку содержимое каталога документов автоматически поддерживается. до iCould, если он включен, я думаю переместить их в каталог библиотеки приложений. Утверждено ли сохранять содержимое в библиотеке с учетом рекомендаций Apple по хранению данных? Если нет, где сохранить данные? Пожалуйста помоги.


person Hariprasad    schedule 03.01.2012    source источник


Ответы (2)


У вас есть два основных варианта:

  • Поместите свои файлы в каталог Cache, тогда они не будут создавать резервные копии, и Apple не отклонит ваше приложение. Однако, когда в iOS 5 не хватает места, она может удалить все находящиеся там файлы.
  • Поместите файлы в Документы, но пометьте их, чтобы они не копировались. Есть техническое примечание (QA1719) о том, как это сделать. Это работает только в iOS 5.0.1 и более поздних версиях.
person Stephen Darlington    schedule 03.01.2012

Вы можете поместить данные в папку «Документы», но перед сохранением в папке «Документы» создайте папку в папке «Документы», например, temp. Затем напишите следующий код, чтобы не выполнять резервное копирование в iCloud.

[[NSFileManager defaultManager] createDirectoryAtPath:temp 
                          withIntermediateDirectories:NO
                                           attributes:nil
                                                error:nil];
NSURL *dbURLPath = [NSURL URLWithString:temp];
[self addSkipBackupAttributeToItemAtURL:dbURLPath]; 

Также реализуйте метод addSkipBackupAttributeToItemAtURL не забудьте включить

#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;
}
person Rajesh    schedule 03.01.2012