原因
2.23:应用必须遵循iOS数据存储指南,否则将被拒绝 2.23
我们发现您的应用不符合iOS数据存储指南,这是App Store审核指南所要求的。
特别是,我们发现在启动和/或内容下载时,您的应用存储了64 MB。要检查应用存储的数据量:
iOS数据存储指南指出,只有用户使用您的应用创建的内容(例如文档,新文件,编辑等)才能由iCloud备份。
您的应用使用的临时文件只应存储在/ tmp目录中;请记得在用户退出应用程序时删除存储在此位置的文件。
可以重新创建但必须保持应用程序正常运行的数据 - 或者因为客户希望它可供离线使用 - 应标记为"不要备份"属性。对于NSURL对象,请添加NSURLIsExcludedFromBackupKey属性以防止备份相应的文件。对于CFURLRef对象,请使用相应的kCFURLIsExcludedFromBackupKey属性。
有关详细信息,请参阅技术问答1719:如何阻止文件备份到iCloud和iTunes?
有必要修改您的应用以满足iOS数据存储指南的要求。 对于离散的代码级问题,您可以咨询Apple Developer技术支持。请务必:
有关如何表示和阅读崩溃日志的信息,请参阅技术说明TN2151了解和分析iPhone OS应用程序崩溃报告。
如果您有困难复制此问题,请尝试在https://developer.apple.com/library/ios/qa/qa1764/技术问答集描述测试工作流程; A QA1764:如何重现崩溃或错误,只有应用程序审查或用户看到。 我在AppDelegate.m中设置了这个功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *pathCaches = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
NSString *pathTmp = [NSHomeDirectory() stringByAppendingPathComponent:@"/tmp"];
NSString *pathDocuments = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents"];
[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:pathCaches]];
[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:pathTmp]];
[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:pathDocuments]];
return YES;
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
assert([[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask]);
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.mycompany.MyApp";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
没有下载.sqlite3文件所以我把它放在/ Documents和其他pdf文件和图像下载 并且我的申请被拒绝了,理由相同 我忘记了什么吗??? 请帮帮我
谢谢
答案 0 :(得分:2)
如果您要提交适用于iOS 5.0.1及更高版本的版本,请使用以下代码。我不认为你需要从iCloud备份跳过缓存和tmp目录,因为iCloud并不关心这些目录。
+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL {
// First ensure the file actually exists
if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) {
NSLog(@"File %@ doesn't exist!",[fileURL path]);
return NO;
}
// Determine the iOS version to choose correct skipBackup method
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer isEqualToString:@"5.0.1"]) {
const char* filePath = [[fileURL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
NSLog(@"Excluded '%@' from backup",fileURL);
return result == 0;
}
else if (&NSURLIsExcludedFromBackupKey) {
NSError *error = nil;
BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
if (result == NO) {
NSLog(@"Error excluding '%@' from backup. Error: %@",fileURL, error);
return NO;
}
else { // Succeeded
NSLog(@"Excluded '%@' from backup",fileURL);
return YES;
}
} else {
// iOS version is below 5.0, no need to do anything
return YES;
}
}
如果可以从服务器下载数据,那么不要将下载的文件保存到Documents目录,而是将它们保存到Cache目录,这是一个临时目录,不会备份到iCloud,可以被随机删除。操作系统在某些情况下。
答案 1 :(得分:0)
问题在于:
const char* attrName = "com.mycompany.MyApp";
不要使用您的包ID更改值,它应始终为:
const char* attrName = "com.apple.MobileBackup";