【问题标题】:Don't Backup to iCloud but still rejected不要备份到 iCloud 但仍然被拒绝
【发布时间】:2012-06-09 02:44:50
【问题描述】:

在我的应用程序中,我必须存储核心数据数据库和音频文件,所以我将它们解码以将它们放在 Documents 目录中。 为了防止他们备份,当我第一次启动应用程序时,我把 Don't BackUp flag like this

- (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];
  }
}

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

我们发现您的应用未遵循 App Store 审核指南所要求的 iOS 数据存储指南。

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

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

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

中看到我的应用

设置 > iCloud > 存储和备份 > 管理存储

也许问题只出在我这里没有考虑的 5.0 上?

【问题讨论】:

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


【解决方案1】:

问题出在 iOS 5.0 上,在这个 iOS 中你不应该放置不备份标志 在 ios 5.0.1 中引入了不备份标志 我们的应用确实遇到过类似的问题,它已经被拒绝了好几次 所以我们不得不做一个工作来处理不同的iOS 我们需要支持 iOS 5.0

所以在联系了苹果之后,除了在不同的 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

【讨论】:

  • 感谢您的出色回答,但我想我只需将部署目标更改为 5.0.1,就可以了,对吧?
  • 是的,我的情况是,我做不到,因为我需要支持所有 iOS 版本,你必须在 iTunes 上连接最低 ios 版本到 5.0.1
  • 我不明白这如何符合 Apple 的 iCloud 规则。这将返回版本 5.0.1 的文档文件夹的路径。您是否还为 >5.0.1 版本设置了NSURLIsExcludedFromBackupKey
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2012-05-22
  • 2016-10-27
  • 2022-11-02
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多