Не резервируйте iCloud, но все же отклоните

В моем приложении я должен хранить базовую базу данных и аудиофайлы, поэтому я декодировал их в папку "Документы". Чтобы предотвратить их резервное копирование, когда я впервые запускаю приложение, я помещаю флаг Do not BackUp как

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
}
    - (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
  if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
    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;
  } else { // iOS >= 5.1
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
  }
}

Но похоже, что он не работает - я все еще отклоняюсь:

Мы обнаружили, что ваше приложение не соответствует Руководствам по хранению данных iOS, которое требуется в Руководстве по обзору приложений для магазина.

В частности, мы обнаружили, что при загрузке и/или загрузке контента приложений 3,6 МБ. Чтобы проверить, сколько данных хранится ваше приложение:

  • Установка и запуск приложения
  • Перейдите в Настройки > iCloud > Хранение и резервное копирование > Управление хранилищем
  • При необходимости коснитесь "Показать все приложения"
  • Проверьте хранилище приложений

И другая проблема в том, что я просто не могу проверить это - я не вижу свое приложение в

Настройки > iCloud > Хранение и резервное копирование > Управление хранилищем

Может быть, проблема только в версии 5.0, о которой я не думаю здесь?

Ответы

Ответ 1

Проблема с iOS 5.0, в этом iOS вам не следует устанавливать флаг резервной копии dont Флаг dont back up был введен в ios 5.0.1 Мы столкнулись с подобной проблемой с нашим приложением, он был отклонен несколько раз Поэтому нам нужно было работать, чтобы обрабатывать разные iOS Нам нужно было поддерживать iOS, 5.0, iOS 5.0 и iOS > 5.0

Итак, после контакта с яблоком мы не нашли никакого решения, кроме как иметь разные пути для разных iOS

У нас была такая функция:

+ (NSString*) savePath
{
    NSString *os5 = @"5.0";

    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

    if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedAscending) //lower than 4
    {
        return path;
    }
    else if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedDescending) //5.0.1 and above
    {        
        return path;
    }
    else // IOS 5
    {
        path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
        return path;
    }

    return nil;
}

Мы использовали и по-прежнему используем эту функцию.

Пожалуйста, прочитайте больше

iOS 5.0

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

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