предотвращение резервного копирования из приложения в iCloud

#iphone #ipad #ios5 #wifi #icloud

#iPhone #iPad #ios5 #wi-Fi #icloud

Вопрос:

То, как действуют рекомендации Apple по хранению данных, создает для меня еще больше проблем, потому что большая часть данных, которые я храню, находится в каталоге Documents (файлы, база данных и некоторые материалы, связанные с приложениями).Недавно я загрузил двоичный файл в app Store, он был отклонен, и Apple предоставила мне отчет Отчет об отказе Apple в соответствии с этим пунктом я собираюсь изменить свой код следующим образом

 - (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, amp;attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
  

МОИ ВОПРОСЫ:

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

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

Комментарии:

1. У меня такая же проблема. Мое приложение также отклонено из-за той же проблемы, что и у вас. Вы меняете местоположение файла на путь к библиотеке или пытаетесь использовать «Не создавать резервные копии»?

2. я все еще в затруднении, потому что в кэше устройства мало места, и временный файл будет deleted.my все приложение зависит от каталога документов. если я использую «не создавать резервные копии», это будет работать для всех версий, кроме ios5.0. я хочу подумать еще несколько дней.

3. Мое приложение снова отклонено. из-за iCloud. Я изменил каталог своей папки на путь к библиотеке, а также пометил его «не создавать резервные копии». Я также сохраняю некоторые данные в каталоге библиотеки, но не даю им «Не отмечать».

4. Привет, ты решил проблему? и дайте мне знать, как вы решили эту проблему?

5. я загрузил двоичный файл, ожидающий воспроизведения.

Ответ №1:

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

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

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

Комментарии:

1. спасибо за быстрый повтор .. я постараюсь создать папку и поместить в нее все мои файлы .. для чего я предоставлю атрибут «не создавать резервные копии».

Ответ №2:

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

 -(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (amp;NSURLIsExcludedFromBackupKey == nil) {
    // iOS 5.0.1 and lower
    u_int8_t attrValue = 1;
    int result = setxattr(filePath, attrName, amp;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:amp;error];
    return error == nil;
}
 }
  

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