Domanda Aggiunta dell'attributo "Non eseguire il backup" in una gerarchia di cartelle in iOS 5.0.1


Riferimenti iCloud + Archiviazione di contenuti multimediali nella cartella Documenti di iPhone, che mostra come impostare l'attributo "Non eseguire il backup" di iOS 5.0.1 per un file.

Esiste un modo efficace per farlo per un'intera cartella / gerarchia di file? Ad esempio, la mia app crea / Library / PrivateDocs e la popola con diverse cartelle, sottocartelle e file. Posso semplicemente impostare l'attributo do-not-backup nella cartella di livello superiore, o deve essere impostato anche su ogni singolo file e cartella?

E, se deve essere impostato su ogni file / sottocartella, qual è un modo efficace per farlo?


10
2018-01-01 16:23


origine


risposte:


Si può mettere una directory specifica all'interno della dir documenti per questo scopo, mettere tutto dentro e segnare solo quella singola directory come non-backup usando il

 addSkipBackupAttributeToItemAtURL

metodo mostrato nell'articolo che hai collegato, oppure usa quello che usa un percorso invece di un URL:

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

esempio usando una directory:

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

[Utilities addSkipBackupAttributeToPath:yourContentsDirPath];

[MODIFICARE]

Ho dimenticato questo metodo utilizzare nel delegato per ottenere la dir dei documenti:

- (NSString *)applicationDocumentsDirectory {

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

25
2018-01-01 18:09



Per tutti i miei amici qui, che hanno bisogno di Swift - guarda sotto (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;

}

6
2017-07-07 08:02



Per me, in Swift, le funzioni precedentemente risolte non hanno funzionato. In particolare, la linea di affermazione è fallita. Avevo bisogno di aggiornarlo da URL.absoluteString! a URL.path! Quindi alla fine il mio assomiglia a questo:

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

2
2017-07-06 19:56



forse questo potrebbe aiutare qualcuno che usa swift 2:

Appena prima @UIApplicationMain Aggiungi questo:

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

Nel tuo lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { dopo aver dichiarato il tuo URL puoi aggiungere questo:

 do {
            let url = url
            try NSFileManager.defaultManager().addSkipBackupAttributeToItemAtURL(url)

        } catch {
            // Handle error here
            print("Error: \(error)")
        }

1
2018-03-07 13:25



puoi fare quanto segue in 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
}

-1
2017-07-29 15:04



Correzione sul metodo sopra, utilizzare questo per 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;
}

-1
2018-06-27 07:17