在iOS 5.0.1中将“不备份”属性添加到文件夹层次结构中

在iPhone Documents文件夹中引用iCloud +媒体存储 ,显示如何为文件设置iOS 5.0.1“不备份”属性。

是否有一个有效的方法来完成整个文件夹/文件层次结构? 例如,我的应用程序创build/ Library / PrivateDocs,并用几个文件夹,子文件夹和文件填充。 我可以只在顶层文件夹中设置“不备份”属性,还是必须在每个单独的文件和文件夹下设置呢?

而且,如果必须在每个文件/子文件夹上设置,那么这样做的有效方法是什么?

你可以把一个特定的目录放在文档目录中,为了这个目的,把所有的东西都放在里面,并且只把那个单独的目录标记为不要备份

addSkipBackupAttributeToItemAtURL 

方法显示在你链接的文章中,或者使用这个使用path而不是URL的方法:

 + (void)addSkipBackupAttributeToPath:(NSString*)path { u_int8_t b = 1; setxattr([path fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0); } 

使用目录的例子:

 NSString *docsDirPath = [(AppDelegate*)[[UIApplication sharedApplication] delegate] applicationDocumentsDirectory]; NSString *yourContentsDirPath = [docsDirPath stringByAppendingPathComponent:gContentsDirName]; [Utilities addSkipBackupAttributeToPath:yourContentsDirPath]; 

[编辑]

我忘记了在代理中使用这个方法来获取文档目录:

 - (NSString *)applicationDocumentsDirectory { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; return basePath; } 

对于我这里的所有朋友,谁需要在Swift中 – 只要看下面(iOS8.0)

 func addSkipBackupAttributeToItemAtURL(URL:NSURL) ->Bool{ let fileManager = NSFileManager.defaultManager() assert(fileManager.fileExistsAtPath(URL.absoluteString)) var error:NSError? let success:Bool = URL.setResourceValue(NSNumber.numberWithBool(true),forKey: NSURLIsExcludedFromBackupKey, error: &error) if !success{ println("Error excluding \(URL.lastPathComponent) from backup \(error)") } return success; } 

对于我来说,在Swift中,以前回答的function并没有起作用。 特别是断言行失败。 我需要从URL.absoluteString更新它! 到URL.path! 所以最后我的样子是这样的:

 func addSkipBackupAttributeToItemAtURL(URL:NSURL) ->Bool{ let fileManager = NSFileManager.defaultManager() assert(fileManager.fileExistsAtPath(URL.path!)) var error:NSError? let success:Bool = URL.setResourceValue(NSNumber(bool: true),forKey: NSURLIsExcludedFromBackupKey, error: &error) if !success{ println("Error excluding \(URL.lastPathComponent) from backup \(error)") } return success; } 

也许这会帮助使用swift 2的人:

@UIApplicationMain之前添加这个:

 extension NSFileManager{ func addSkipBackupAttributeToItemAtURL(url:NSURL) throws { try url.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey) } } 

在你的lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {在声明你的URL之后,你可以添加这个:

  do { let url = url try NSFileManager.defaultManager().addSkipBackupAttributeToItemAtURL(url) } catch { // Handle error here print("Error: \(error)") } 

你可以在swift执行以下操作:

 func addSkipBackupAttributeToItemAtPath(path:String) -> Bool { let filePath = path.fileSystemRepresentation() let attrName = "com.apple.MobileBackup" var attrValue : uint_fast8_t = 1 let result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue.dynamicType), 0, 0) return result == 0 } 

上面的方法更正,用于swift

  func addSkipBackupAttributeToItemAtURL(URL:NSURL) ->Bool { let fileManager = NSFileManager.defaultManager() assert(fileManager.fileExistsAtPath(URL.absoluteString!)) var error:NSError? let success:Bool = URL.setResourceValue(NSNumber(bool: true),forKey: NSURLIsExcludedFromBackupKey, error: &error) if !success{ println("Error excluding \(URL.lastPathComponent) from backup \(error)") } return success; }