应用程序必须遵守iOS数据存储指南,否则将被拒绝



我开发了一个应用程序,可以从网上下载mp3文件(大小接近6到8mb)并存储在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];

真的需要一些帮助。

我的应用程序因同样的原因被拒绝了,解决方案非常简单,而不是将下载的文件保存到Documents目录,你必须将它们保存到Cache目录,这是一个临时目录,不会备份到iCloud,在某些情况下可以被操作系统随机删除。。。这就是将文件保存到缓存目录的方法

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

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

编辑

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");

一旦iCloud在Apple中实现,文档目录数据在某种程度上与iCloud存储相关。因此,苹果现在拒绝在文档目录中使用大量数据存储的应用程序。

您需要将数据存储在其他位置。将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详细信息。

Apple希望减少备份占用空间。

首先,停止使用文档。这不合适。

如果你能够很容易地再次下载这些文件,你应该把它们存储在一个不会备份的地方。我建议使用缓存。如果它们被清除,您应该重新下载它们。

如果很难再次下载,您应该将它们存储在Library文件夹中的其他位置。

您可以使用找到Caches目录

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

基本上,这就是您现在所拥有的,但您使用的不是NSDocumentDirectory,而是NSCachesDirectory

如果你控制文件名,这就可以了。如果你不控制,你可能应该创建一个子目录并从那里开始工作,这样你就不会与任何东西发生冲突。

您不能存储在NSDocumentDirectory中,因为此目录现在用于与iCloud同步。但您可以使用NSCachesDirectory或使用临时目录作为存储音乐文件的apple注释状态。

指南规定,只有无法从互联网上重新创建(下载)的重要文件才能进入文档目录,因为这是

根据iOS存储指南(可在http://developer.apple.com/icloud/documentation/data-storage/)您应该将所有用户生成的内容都放在Documents目录中,并将所有可重新下载的内容放在Caches目录中。因此,您应该可以将sqLite数据库放在那里。

背景是,从iOS 5开始,Documents目录将备份到iCloud。由于许多应用程序倾向于将完整的数据存储在那里,因此iCloud备份变得相当大,这会占用可用空间并产生网络流量,这两种情况反过来都会激怒用户,因为他/她想知道为什么。为了缓解这种情况,苹果现在似乎更仔细地查看了保存到Documents目录中的内容,以及这是否可能是可重新生成的内容(例如可下载文件)。

请注意,当设备上的可用空间不足时,操作系统可能会在iOS 5上清除Caches目录。因此,你的应用程序不能再假设一切都像以前一样存在,而是每次访问缓存中的内容时都必须重新检查。

希望这能帮助。。。!

我的应用程序也因为同样的原因被拒绝了-(2.3)

试试这个-

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

这样做的好处是,每当您的设备与云同步时,应用程序数据都不会同步,因为它位于NSCachesDirectory而不是NSDocumentDirectory中。

缺点是,无论何时你都会使用你的设备,如果你的设备内存不足。则CPU可能是用于获得空闲空间的清除缓存。因此,如果您有任何离线使用的数据,您可能会丢失。

2) 如果你不能使用NSCachesDirectory(可能是因为你的数据太重要了),那么你可以使用这种方法-

使用此方法并给出您的数据库路径-"addskipbackupattributetoiematurl"

通过这个链接-如何使用addSkipBackupAttributeToItemAtURL API?

相关内容

最新更新