我可以为iCloud的"Document Directory"添加"不备份"吗



我听说我可以在ios 5.1及以后的版本中将文件夹标记为"不备份"属性

据我所知,在这种情况下,目录中的所有内容都将被排除在备份之外。

在我的应用程序中,我们需要从备份中排除文档目录中的所有文件(文件可以在应用程序执行期间从文档中添加或删除)。我需要把我们的文件存储在Documents目录下。

我可以用"不备份属性"标记文档目录吗?

苹果允许这样做吗?

这会成为拒绝我们的应用程序的理由吗?

可以为Document目录下的文件夹(文件)设置do not backup标志。

do not backup属性适用于标记的文件,无论它们在哪个目录,包括Documents目录。这些文件不会被清除,也不会包含在用户的iCloud备份中。因为这些文件使用设备上的存储空间,你的应用程序负责定期监控和清除这些文件。

要了解更多相同的信息,请访问此链接

下面的方法设置不备份标志,以避免不必要的备份|从应用程序目录(文档和缓存)删除。只需要调用下面的方法并传递文件夹(文件)的url。

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
    if (&NSURLIsExcludedFromBackupKey == nil) { // for 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 { // For iOS >= 5.1
        NSError *error = nil;
        [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
        return error == nil;
    }
}

首先,把这个贴在苹果内部论坛上,看看你能不能得到苹果工程师的回复,我对此表示怀疑。问题是,即使它今天工作,它可能会坏了。

建议:

1)在Documents中创建一个文件夹,标记它,然后只在其中存储文件。

2)添加一个方法到你的应用程序委托,接受一个文件名参数,然后当被调用时定位文件并标记它。在本例中,您需要确保在每个文件创建操作之后调用它。

从Apple文档中,对于iOS 5.1或更高版本,您应该使用以下命令:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success){
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }
    return success;
}
    func addSkipBackupAttributeToItemAtURL(filePath:String) -> Bool
{
    let URL:NSURL = NSURL.fileURLWithPath(filePath)
    assert(NSFileManager.defaultManager().fileExistsAtPath(filePath), "File (filePath) does not exist")
    var success: Bool
    do {
        try URL.setResourceValue(true, forKey:NSURLIsExcludedFromBackupKey)
        success = true
    } catch let error as NSError {
        success = false
        print("Error excluding (URL.lastPathComponent) from backup (error)");
    }
    return success
}

最新更新