应用程序在2.23之前拒绝相同的原因

时间:2013-12-18 07:30:27

标签: ios objective-c

原因

2.23:应用必须遵循iOS数据存储指南,否则将被拒绝 2.23

我们发现您的应用不符合iOS数据存储指南,这是App Store审核指南所要求的。

特别是,我们发现在启动和/或内容下载时,您的应用存储了64 MB。要检查应用存储的数据量:

  • 安装并启动您的应用
  • 转到设置> iCloud>存储&备份>管理存储
  • 如有必要,请点击"显示所有应用"
  • 检查您应用的存储空间

iOS数据存储指南指出,只有用户使用您的应用创建的内容(例如文档,新文件,编辑等)才能由iCloud备份。

您的应用使用的临时文件只应存储在/ tmp目录中;请记得在用户退出应用程序时删除存储在此位置的文件。

可以重新创建但必须保持应用程序正常运行的数据 - 或者因为客户希望它可供离线使用 - 应标记为"不要备份"属性。对于NSURL对象,请添加NSURLIsExcludedFromBackupKey属性以防止备份相应的文件。对于CFURLRef对象,请使用相应的kCFURLIsExcludedFromBackupKey属性。

有关详细信息,请参阅技术问答1719:如何阻止文件备份到iCloud和iTunes?

有必要修改您的应用以满足iOS数据存储指南的要求。 对于离散的代码级问题,您可以咨询Apple Developer技术支持。请务必:

  • 包含拒绝问题的完整详情
  • 准备任何符号化的崩溃日志,屏幕截图和步骤,以重现DTS工程师跟进时的问题。

有关如何表示和阅读崩溃日志的信息,请参阅技术说明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文件和图像下载 并且我的申请被拒绝了,理由相同 我忘记了什么吗??? 请帮帮我

谢谢

2 个答案:

答案 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";