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

Мое приложение iphone было отклонено по этой причине: "Мы обнаружили, что ваше приложение не соответствует рекомендациям по хранению данных iOS..."

Мое приложение iphone недавно отклонилось и с приведенной ниже причиной:

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

Для этого приложения я хранили базу данных (файл sqlite) в каталоге/Documents/для iOS 5.0.1 и выше, а для версий iOS 5.0 и ниже я использовал каталог Library/Cache.

Для других данных, таких как изображения в формате PDF и изображений, которые я загружал с сервера, я придерживался того же подхода, что и выше: iOS 5.0.1 и более поздние версии: Сохраненные данные в каталоге /Documents/ iOS 5.0 и более ранние версии: Сохраненные данные в каталог Library/Cache.

Правильно ли этот подход?

Согласно руководству Apple: Важно. Новый атрибут "не создавать резервные копии" будет использоваться только iOS 5.0.1 или новее. На iOS 5.0 и более ранних версиях приложениям необходимо хранить свои данные в /Library/Caches, чтобы избежать их резервного копирования. Поскольку этот атрибут игнорируется в более старых системах, вам необходимо обеспечить, чтобы ваше приложение соответствовало Руководству по хранению данных iOS на всех версиях iOS, поддерживаемых вашим приложением.

Также очень смущен, что назначение атрибутов "не создавать резервные копии" для данных, хранящихся для iOS 5.0.1 и более поздних версий. Для каких файлов мне нужно назначить этот флаг? Могу ли я использовать его для базы данных?

Нужно избавиться от этого отказа, как это произошло дважды. Просьба предоставить некоторые рекомендации по хранению данных для моего приложения. Заранее спасибо. Ждем позитивного ответа.

4b9b3361

Ответ 1

Проверить https://developer.apple.com/icloud/documentation/data-storage/

а именно:

Используйте этот атрибут с данными, которые можно воссоздать, но сохраняются даже в ситуациях с низким уровнем хранения для правильного функционирования вашего приложение или потому, что клиенты ожидают его доступности в автономном режиме. Этот атрибут работает с отмеченными файлами независимо от того, в каком каталоге они находятся, включая каталог "Документы".

Сохраните базу данных SQLite в папке caches и установите флаг donotbackup, который остановит файл, удаляемый системой очистки кэша

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

Я использую базу данных в своем приложении и сохраняю ее в папке с кешем (с указанным выше флагом) и просто не получил никаких проблем.

Кроме того, вы можете хранить свои данные в подпапках каталога документов, которые, я считаю, не будут скопированы, но будут сохраняться.

Ответ 2

У моей подруги одна и та же проблема. Основная проблема заключается в том, что вы можете хранить тяжелые данные в Каталоге документов приложения.

После того, как iCloud реализована в Apple, данные каталога Document каким-то образом связаны с iCloud Storage. Следовательно, Apple теперь отвергает приложения, использующие тяжелое хранилище данных в каталоге документов.

Вам нужно сохранить данные в другом месте. Сохраните файл PDF и другие файлы в другом месте.

Эта ссылка может помочь вам.

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

Надеюсь, это решит вашу проблему.

Ответ 3

Чтобы разрешить приложение, отклоненное Apple для вашего приложения, не соответствует рекомендациям по хранению данных iOS, добавьте следующий код в свое приложение.

   - (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  
             NSError *error = nil;  
            // if you set YES in Resources value then iTune will not backup that file or folder.
            //  You set FALSE in Resources value then iTune will backup that file or folder.
             [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];  
             return error == nil;
        } 
}

Использовать этот метод (пример)

NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"CDTDatabaseNew" ofType:@"sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
NSURL *guidesURL = [NSURL fileURLWithPath:dbPath];
[self addSkipBackupAttributeToItemAtURL:guidesURL];

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

ПРИМЕЧАНИЕ. -Apple изменила направляющую для хранения данных, и если вы храните что-либо в каталоге Document, тогда вам нужно сделать правильный код, не пропустите эту часть кода.

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