不要备份到iCloud但仍然拒绝

时间:2012-06-05 03:41:59

标签: objective-c ios app-store storage icloud

在我的应用程序中,我必须存储核心数据数据库和音频文件,所以我解码后将它们放在Documents目录中。 为了防止他们备份,当我第一次启动应用程序时,我把不要像这样的BackUp标志

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
}
    - (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
- (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
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
  }
}

但似乎它不起作用 - 我仍然被拒绝:

  

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

     

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

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

另一个问题是我无法检查 - 我没有在

中看到我的应用程序
  

设置&gt; iCloud&gt;存储&amp;备份&gt;管理存储

也许这个问题只出现在5.0,我在这里有点想不到?

1 个答案:

答案 0 :(得分:9)

问题出在iOS 5.0上,在这个iOS中你不应该把dont备份标志 在ios 5.0.1中引入了备份标志 我们的应用程序遇到了类似的问题,它被拒绝了好几次 所以我们不得不做一个处理不同iOS的工作 我们需要支持iOS&lt; 5.0,iOS 5.0和iOS&gt; 5.0

所以在联系apple之后,我们没有找到任何解决方案,除了在不同的iOS上有不同的路径

我们有这样的功能:

+ (NSString*) savePath
{
    NSString *os5 = @"5.0";

    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

    if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedAscending) //lower than 4
    {
        return path;
    }
    else if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedDescending) //5.0.1 and above
    {        
        return path;
    }
    else // IOS 5
    {
        path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
        return path;
    }

    return nil;
}

我们使用并仍然使用此功能。

请阅读更多

  

iOS 5.0

     

无法从iOS 5.0上的备份中排除数据。如果你的   应用必须支持iOS 5.0,然后您需要存储您的应用数据   缓存以避免备份数据。 iOS将删除您的文件   必要时从Caches目录,所以你的应用程序将需要   如果删除了数据文件,则会优雅地降级。

http://developer.apple.com/library/ios/#qa/qa1719/_index.html