我的iphone应用程序最近遭到拒绝&出于以下原因:
“我们发现您的应用不符合iOS数据存储指南,该指南不符合App Store审核指南。”
对于这个应用程序,我将数据库(sqlite文件)存储在iOS 5.0.1&的/ Documents /目录中。以上&适用于iOS 5.0&以下版本我使用了Library / Cache目录。
其他数据,如PDF&我从服务器下载的艺术作品图片我采用了与上述相同的方法: iOS 5.0.1&稍后:将这些数据保存到/ Documents /目录中 iOS 5.0&早期版本:将数据保存到库/缓存目录。
这种做法是否正确?
根据Apple指南: 重要:新的“请勿备份”属性仅供iOS 5.0.1或更高版本使用。在iOS 5.0及更早版本中,应用程序需要将其数据存储在/ Library / Caches中以避免备份。由于旧系统会忽略此属性,因此您需要确保您的应用符合您的应用支持的所有iOS版本上的iOS数据存储指南。
对于为iOS 5.0.1&存储的数据存储的“不备份”属性分配也非常困惑。后来。我需要为哪些文件分配这个标志?我可以将它用于数据库吗?。
需要摆脱这些拒绝,因为它已经发生过两次。请提供一些存储我的应用程序数据的指导。提前致谢。期待积极的回应。
答案 0 :(得分:17)
检查https://developer.apple.com/icloud/documentation/data-storage/
具体是:
将此属性与可以重新创建但需要的数据一起使用 即使在低储存条件下也能保持正常运行 应用程序或因为客户希望它在脱机使用期间可用。 此属性适用于标记文件,无论它们是哪个目录 在,包括Documents目录。
将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;
}
我在我的应用程序中使用数据库并将其存储在缓存文件夹中(设置了上面的标志)并且刚刚获得批准没问题。
此外,您可以将数据存储在文档目录的子文件夹中,我相信这些子文件夹不会备份,但会保留。
答案 1 :(得分:6)
我的一个朋友有同样的问题。基本问题是您可能在应用程序文档目录中存储大量数据。
在Apple中实施iCloud后,文档目录数据与iCloud Storage有某种关联。因此,Apple现在拒绝在文档目录中使用大量数据存储的应用程序。
您需要将数据存储在其他位置。存储PDF和&其他艺术品档案在其他地方。
此链接可以帮助您。
http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29
我希望它能解决你的问题。
答案 2 :(得分:2)
要解决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目录中存储任何内容,那么您必须修改上面的代码,不要错过这部分代码。
如果您不放置该代码,应用程序将被拒绝。所以现在,每当你在文档目录中创建数据库,存储缓存的图像等时,每个人都必须添加那些代码。 希望下次因为这个原因我不会拒绝app。