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

IOS: не сохранять атрибут?

Наше приложение недавно было отклонено за нарушение iOS Data Storage Guidelines о резервном копировании файлов в iCloud.

Я должен отмечать данные атрибутом do not back up.

Я храню все свои важные данные в базах данных SQLite и моих пользовательских настройках в UserDefaults.plist. Должен ли я пометить файлы database.sqlite как do no back up?

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

Ничто в моем приложении действительно не нуждается в резервном копировании, могу ли я просто отключить поддержку iCloud в своем AppID и не беспокоиться о маркировке файлов как do not back up??

Вот ответ рецензента:

2,23

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

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

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

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

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

Данные, которые могут быть воссозданы, но должны сохраняться для правильной работы вашего приложения, или потому, что клиенты ожидают его доступности для использования в автономном режиме, должны быть отмечены атрибутом "не создавать резервные копии". Для объектов NSURL добавьте атрибут NSURLIsExcludedFromBackupKey, чтобы предотвратить резервное копирование соответствующего файла. Для объектов CFURLRef используйте соответствующий атрибут kCFURLIsExcludedFromBackupKey.

Для получения дополнительной информации см. Техническое Q & A 1719: Как предотвратить резервное копирование файлов в iCloud и iTunes?.

Необходимо изменить ваше приложение, чтобы оно соответствовало требованиям Руководства по хранению данных iOS. Для дискретных вопросов на уровне кода вы можете обратиться к технической поддержке Apple Developer. Обязательно выполните следующие действия:

  • включают в себя полную информацию о ваших проблемах с отказом.
  • подготовьте любые символические журналы сбоев, снимки экрана и шаги для воспроизведения проблем, возникающих при повторении работы DTS-инженера.
4b9b3361

Ответ 1

В принципе, это зависит от типа данных, которые вы храните.

Если данные могут быть восстановлены (например, когда пользователь устанавливает приложение на другое устройство, например), то он не должен быть скопирован.

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

В первом сценарии у вас есть в основном два способа достижения этого...

Либо вы используете NSURL для установки kCFURLIsExcludedFromBackupKey в своих файлах, либо сохраняете их в месте, которое не будет выполняться под резервными копиями, например <Application_Home>/Library/Caches. Обратите внимание, что второе решение лучше, ИМХО.

Для информации kCFURLIsExcludedFromBackupKey можно использовать следующим образом:

NSURL * fileURL;

fileURL = [ NSURL fileURLWithPath: @"some/file/path" ];

[ fileURL setResourceValue: [ NSNumber numberWithBool: YES ] forKey: NSURLIsExcludedFromBackupKey error: nil ];

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

Ответ 2

Вы можете вызвать следующую функцию, чтобы передать путь вашего "map.sqlite" как NSURL:

NSURL *url = [NSURL fileURLWithPath:yourSQLitePath];
[self addSkipBackupAttributeToItemAtURL:url];
The function is provided in Apple as:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                              forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success){
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }
    return success;
}