从备份文件夹防止应用程序?(Prevent app from backing up document

2019-07-04 11:00发布

我试图阻止我的应用程序备份文件到iCloud,但已经变得完全混乱,有点失落。

-编辑-

我已经更新这反映我做了感谢以下海报的变化。

我想,以防止备份被下载到应用程序的文件目录中的文件。

到目前为止,我有一个叫做类PreventBackup用下面的方法:

+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{    
   NSError *error = nil;
   BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                              forKey: NSURLIsExcludedFromBackupKey error: &error];
   if(!success){
       NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
   }
   NSLog(@"prevent backup method called without error");
   return success;
}

我然后用这个代码调用它的应用程序启动时:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSURL *pathURL= [NSURL fileURLWithPath:documentsDirectory];
[PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];

该cosole打印prevent backup method called without error ,但应用程序仍表现出具有数据的背面,同样的量了它没有之前。

任何想法,这是怎么回事了?

- 编辑2-

OK,我认为这是解决。 该文件被下载到被称为“下载”子文件夹。 改变上述以便它的内容如下看起来已经做的伎俩的代码:

NSString *downloadsFolder = [documentsDirectory stringByAppendingPathComponent:(@"/downloads")];
NSURL *pathURL= [NSURL fileURLWithPath:downloadsFolder];
[PreventBackup addSkipBackupAttributeToItemAtURL:pathURL];

感谢大家的帮助。

Answer 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;
}

NSURL *documentURLWithExtension = [documentURL URLByAppendingPathExtension:extensionType];

通过这个“ documentURLWithExtension ”这个功能

[self addSkipBackupAttributeToItemAtURL:documentURLWithExtension];


Answer 2:

在斯威夫特:

//Path of document directory
var docPathAry : NSArray! = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
var docDirPathStr: AnyObject? = docPathAry.count > 0 ? docPathAry[0] : nil

self.addSkipBackupAttributeToItemAtURL(NSURL.fileURLWithPath(docDirPathStr as NSString))

和:

func addSkipBackupAttributeToItemAtURL(URL: NSURL!) -> Bool {
    assert(NSFileManager.defaultManager().fileExistsAtPath(URL.path))
    var err : NSError? = nil
    var success : Bool! = URL.setResourceValue(NSNumber.numberWithBool(true), forKey: NSURLIsExcludedFromBackupKey, error: &err)

    if(!success) {
        println("Error excluding \(URL.lastPathComponent) from backup\(err) ")
    }

    return success
}


文章来源: Prevent app from backing up documents folder?