резервное копирование предотвратить из приложения в iCloud - PullRequest
4 голосов
/ 11 ноября 2011

Способ рекомендации по хранению в яблоках создает для меня больше проблем, потому что большая часть данных, которые я храню из каталога «Документы» (файлы, база данных и некоторые другие вещи, связанные с приложениями). Недавно я загрузил двоичный файлФайл в магазине приложений был отклонен, и Apple предоставила мне отчет Apple rejection report, в соответствии с этим пунктом я собираюсь изменить свой код следующим образом:

- (NSString *)applicationDocumentsDirectory {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *pathURL= [NSURL fileURLWithPath:documentPath];
[self addSkipBackupAttributeToItemAtURL:pathURL];
return documentPath;

}

 - (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;
}

МОИ ВОПРОСЫ:

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

2. Вышеупомянутого кода достаточно, чтобы мое приложение былоОдобрить в магазине приложений на тот случай, если мой последний двоичный файл отклонен из-за того, что атрибут «не выполнять резервное копирование» не включен в каталог моих документов.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

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

Обратите внимание, однако, что это может быть хорошим подходом, чтобы сделать это для полной папки «Документы».Прежде всего, это создаст ситуацию, когда у вашего приложения нет резервной копии контента, поэтому при восстановлении телефона приложение будет в ванильном состоянии.Я мог бы также предположить, что это просто не тот путь, «который задумал Apple», и, следовательно, может привести к отказу от приложения (всегда догадки).Если возможно, я бы создал подпапку для вашего несохраненного содержимого в каталоге «Документ» и поместил туда все (для этого может потребоваться код миграции, хотя, если у вас уже есть версия этого приложения в магазине).

Обратите внимание, что рекомендации по хранению допускают хранение созданного пользователем / не восстанавливаемого контента в каталоге Documents, и вам нужно только пометить такие вещи, как загруженный контент и т. Д., Которые вы не можете поместить в каталог Caches (например, если пользователь ожидаетэтот контент будет доступен в автономном режиме).

0 голосов
/ 10 июня 2013

Используйте эту функцию

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (&NSURLIsExcludedFromBackupKey == nil) {
    // iOS 5.0.1 and lower
    u_int8_t attrValue = 1;
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;

}
else {
    // First try and remove the extended attribute if it is present
    int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
    if (result != -1) {
        // The attribute exists, we need to remove it
        int removeResult = removexattr(filePath, attrName, 0);
        if (removeResult == 0) {
            NSLog(@"Removed extended attribute on file %@", URL);
        }
    }

    // Set the new key
    NSError *error = nil;
    [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
    return error == nil;
}
 }

это реализованный код. Спасибо

...