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

Отклонение приложения iOS из-за 2.23 - Руководство по хранению данных iOS

Здесь сообщение от Apple об отказе:

2.23 - Приложения должны следовать рекомендациям по хранению данных iOS или они будут отклонены 2.23 Детали

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

Следующие шаги

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

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

Я проверил файлы данных своего приложения как для устройства, так и для симулятора. Я обнаружил, что если приложение какое-то время использовало, то при запуске все данные приложения могут хранить 5-6 МБ. Но я удалил и снова установил приложение и снова проверил, я вижу ~ 3MB хранилище данных при запуске приложения.

Я не храню базы данных Core Data или любые другие файлы базы данных. Но я понял, что Google Analytics и Диспетчер тегов Google хранят некоторые данные sqlite по этому пути: "AppData/Library". Я имею ввиду, что он НЕ хранится по этому пути: "AppData/Library/Caches". Имеет ли значение для iOS Data Storage Guidelines?

Кстати, iCloud отключен для приложения.

Также я использую SDWebImage для загрузки изображений, и он сохраняет в памяти почти 3 МБ изображений и сохраняет данные изображения по этому пути: "AppData/Library/Caches"

Есть ли у вас какая-то идея, что я должен сделать, чтобы справиться с этой проблемой?

4b9b3361

Ответ 1

Вчера я получил сообщение об отказе.

Я использую следующий код в application:didFinishLaunchingWithOptions:, чтобы узнать, какое у моего приложения есть в папке документов и каково разрешение каждого элемента в резервном хранилище iCloud:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSArray *documents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:basePath error:nil];
NSURL *URL;
NSString *completeFilePath;
for (NSString *file in documents) {
    completeFilePath = [NSString stringWithFormat:@"%@/%@", basePath, file];
    URL = [NSURL fileURLWithPath:completeFilePath];
    NSLog(@"File %@  is excluded from backup %@", file, [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil]);
}

У меня было несколько файлов внутри этой папки, которые синхронизировались с iCloud. Поэтому вместо сохранения этих файлов в другом месте я установил значение ресурса для ключа NSURLIsExcludedFromBackupKey, установленного на YES, чтобы исключить резервное копирование этих файлов iCloud, например:

NSURL *URL = [NSURL fileURLWithPath:photoPath];
[URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];

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

Надеюсь на эту помощь.

Ответ 2

Недавно мы были отклонены командой Apple Review с той же проблемой,

При загрузке и загрузке контента ваше приложение хранит 9,65 МБ для пользователя iCloud, что не соответствует рекомендациям по хранению данных iOS.

Они предлагают следовать тем же <сильным > следующим шагам, как упомянуто в вопросе выше.

В нашем случае мы уже устанавливаем этот NSURLIsExcludedFromBackupKey в коде при загрузке содержимого. Мы информировали группу по обзору, что мы уже это делаем, поэтому они перенаправили нас в Техническую поддержку Apple Developer (DTS), чтобы лучше решить эту проблему.

DTS ответила, что причиной этого являются наши файлы AppIcon.

AppIcons резервируются в iCloud, так как Apple требует отображения значка на устройстве во время загрузки приложения. Оказывается, наши файлы приложений AppIcons настолько велики, что вызвали отказ, потому что он поддерживает большое количество данных в iCloud. Это не было ясно сообщено нам командой App Review, так как некоторые из них не знают об этом новом изменении инструмента, который отслеживает AppIcons.

Теперь, когда мы знаем причину, мы оптимизировали наши значки с помощью ImageOptim и минимизировали размер до 75 КБ.

Мы отправили наше приложение и, надеюсь, оно будет одобрено через 1-2 дня.:)

Я надеюсь, что это поможет кому-то, кто имеет такую ​​же проблему.:)

Ответ 3

Рань в эту же проблему недавно и только что перевел Glauco на Swift (хотя, вероятно, он мог бы быть написан быстрее)

let directories = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
    if let documentDirectory = directories.first {
        do {
            let documents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentDirectory)
            for files in documents {
                let urlForm = NSURL.fileURLWithPath(documentDirectory + "/" + files)
                do {
                    try print("\(files): \(urlForm.resourceValuesForKeys([NSURLIsExcludedFromBackupKey]))")
                } catch {
                    print("can't find key")
                }
            }
        } catch {
            print("can't retrieve contents")
        }
    }

Код для setResourceValue

let urlToExclude = NSURL.fileURLWithPath(quoteSavePath!)
    do {
        try urlToExclude.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
    } catch { print("failed to set resource value") }