Приложения должны следовать Правилам хранения данных iOS, иначе они будут отклонены

Я разработал приложение, которое может загружать mp3-файлы (размером от 6 до 8 МБ) из Интернета и храниться в NSDocumentDirectory. мое приложение отклонено сегодня и говорит, что

"Apps must follow the iOS Data Storage Guidelines or they will be rejected"


 We found that your app does not follow the iOS Data Storage Guidelines, which is
 required per the App Store Review Guidelines. The iOS Data Storage Guidelines 
 indicate that only content that the user creates using your app, e.g., documents,
 new files, edits, etc., may be stored in the /Documents directory - and backed up
 by iCloud. 

 Temporary files used by your app should only be stored in the /tmp directory; 
 please remember to delete the files stored in this location when the user exits 
 the app. "

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

вот мой код

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);



 NSString *documentsDirectoryPath = [[paths objectAtIndex:0]stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];
NSLog(@"ddddddd psalmsMusic%d.mp3",i);
i++;


 NSLog(@"path %@",documentsDirectoryPath);
 [receivedData writeToFile:documentsDirectoryPath atomically:YES];

действительно нужна помощь

Ответы на вопрос(7)

Apple хочет уменьшить размер вашей резервной копии.

Во-первых, прекратите использовать документы. Это не подходит.

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

Если их трудно загрузить снова, вы должны хранить их где-нибудь в папке библиотеки.

Вы можете найти каталог Caches, используя:

NSArray *paths = NSSearchPathForDirectoriesInDomains(
                        NSCachesDirectory, NSUserDomainMask, YES);

По сути, это то, что у вас есть сейчас, но вместоNSDocumentDirectory ты используешьNSCachesDirectory.

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

 12 июл. 2012 г., 07:49
Да. Это не гарантия, что вы не столкнетесь с дополнительными проблемами от Apple, но она должна решить эту проблему.
 neerajPK12 июл. 2012 г., 07:34
извини, у меня все еще есть сомнения
 12 июл. 2012 г., 07:35
Обновлено, чтобы показать, как найти кеши.
 neerajPK12 июл. 2012 г., 07:22
как я буду использовать NSCachesDirectory для хранения файлов,
 neerajPK12 июл. 2012 г., 07:44
хорошо, я могу заменить этот код NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); с твоим ..?

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

Вам нужно хранить данные в каком-то другом месте. Храните файлы MP3 в другом месте.

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

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

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

Другой следует ..........

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

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

Увидетьhttp://developer.appcelerator.com/question/134926/ipad-app-rejected-ios-data-storage-guidelines для деталей.

в руководящих принципах говорится, что только важные файлы, которые не могут быть воссозданы (загружены) из Интернета, должны попадать в каталог документов, поскольку

Согласно Руководству по хранению iOS (которое можно найти наhttp://developer.apple.com/icloud/documentation/data-storage/) вы должны поместить весь пользовательский контент в каталог Documents и весь повторно загружаемый контент в каталог Caches. Так что вы должны хорошо разместить базу данных sqLite там.

Основанием для этого является то, что, начиная с iOS 5, папка Documents архивируется в iCloud. Поскольку многие приложения, как правило, хранят свои полные данные, резервные копии iCloud становятся достаточно большими, что занимает свободное место и создает сетевой трафик, что в свою очередь раздражает пользователя, потому что он / она задается вопросом, почему. Чтобы смягчить это, Apple теперь, похоже, более внимательно смотрит на то, что сохраняется в каталоге Documents и, возможно, это регенерируемый контент (например, загружаемые файлы).

Помните, что каталог Caches может и будет очищаться операционной системой iOS 5 в те моменты, когда свободного места на устройстве становится мало. Таким образом, ваше приложение больше не может просто предполагать, что все там, как было раньше, но вы должны перепроверять каждый раз, когда получаете доступ к чему-то из вашего кэша.

Надеюсь это поможет...!

 neerajPK12 июл. 2012 г., 09:29
я думаю, что могу получить доступ к загруженной песне с Itunes, как NSDocumentDictionary сделал
 12 июл. 2012 г., 08:59
Да, это то, что вам нужно сделать.
 neerajPK12 июл. 2012 г., 08:45
Итак, могу ли я сохранить свои mp3-данные в кеш-память и получить к ним доступ после этого?

мое приложение также было отклонено по той же причине - (2.3)

попробуй это -

NSString * paths = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES);

Преимущество этого - всякий раз, когда ваше устройство будет синхронизироваться с облаком, в это время данные приложения не будут синхронизироваться, поскольку они находятся в NSCachesDirectory, а не в NSDocumentDirectory.

И недостатком является то, что всякий раз, когда вы будете использовать свое устройство и если у вас меньше памяти на вашем устройстве. тогда процессор может быть очищен кеш для получения свободного места. так что если у вас есть какие-либо данные для автономного использования, вы можете быть потеряны.

2) Если вы не можете использовать NSCachesDirectory (возможно, потому что ваши данные слишком важны), тогда вы можете пойти по этому пути -

используйте этот метод и укажите путь к своей базе данных - «добавленный добавочный_каталог_буквенного_сервера»;

перейти по этой ссылке -Как использовать API addSkipBackupAttributeToItemAtURL?

Решение Вопроса

мое приложение было отклонено по той же причине, решение действительно простое: вместо сохранения загруженных файлов в каталог «Документы» необходимо сохранить их в каталоге «Кэш», который является временным каталогом, резервное копирование которого в iCloud невозможно и может быть случайным образом удаленным ОС в некоторых случаях ... так вы сохраняете файл в директорию кеша

NSString *filePath = [[self applicationCachesDirectory] stringByAppendingPathComponent:fileName];


BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];

EDIT

NSString *filePath = [[self applicationCachesDirectory]  stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];
NSLog(@"ddddddd psalmsMusic%d.mp3",i);
i++;
BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];
if ( flag )
  NSLog("success");
 12 июл. 2012 г., 08:27
ну это своего рода точка за этим. Ваши данные не будут синхронизированы ни через iTunes, ни через iCloud !!
 neerajPK12 июл. 2012 г., 08:16
хорошо, одно сомнение, как я буду синхронизировать данные кэша приложения с моим устройством. я имею в виду, как я получу загруженные данные? через итунес?
 neerajPK12 июл. 2012 г., 08:30
Итак, как я буду воспроизводить загруженный файл mp3?
 12 июл. 2012 г., 08:08
@neerajPK проверьте редактирование ,,, все, что вам нужно сделать, это добавить имя файла к пути cachesDirectiory ... и в методе createFileAtPath: contents: 1-й параметр - путь, в который вы хотите записать, а 2-й параметр - это NSData вы хотите написать по этому пути
 neerajPK12 июл. 2012 г., 07:33
хорошо, не могли бы вы сравнить мой код с вашим. у меня все еще есть некоторые сомнения относительно того, как сохранить mp3 файлы в NSCachesDirectory

Вы не можете хранить в,NSDocumentDirectory потому что этот каталог для синхронизации с iCloud сейчас. Но вы можете использоватьNSCachesDirectory или используйте временную директорию в качестве состояния комментария Apple для музыкального файла магазина.

 neerajPK12 июл. 2012 г., 07:21
Можете ли вы помочь мне с кодом для хранения в NSCachesDirectory?

Ваш ответ на вопрос