iOS: Can't save file to 'Application Support' folder, but can to 'Documents' iOS: Can't save file to 'Application Support' folder, but can to 'Documents' ios ios

iOS: Can't save file to 'Application Support' folder, but can to 'Documents'


In case anyone is unsure how to do what rmaddy describes:

NSString *appSupportDir = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];//If there isn't an App Support Directory yet ... if (![[NSFileManager defaultManager] fileExistsAtPath:appSupportDir isDirectory:NULL]) {    NSError *error = nil;//Create one     if (![[NSFileManager defaultManager] createDirectoryAtPath:appSupportDir withIntermediateDirectories:YES attributes:nil error:&error]) {        NSLog(@"%@", error.localizedDescription);    }    else {// *** OPTIONAL *** Mark the directory as excluded from iCloud backups         NSURL *url = [NSURL fileURLWithPath:appSupportDir];        if (![url setResourceValue:@YES                            forKey:NSURLIsExcludedFromBackupKey                             error:&error])        {            NSLog(@"Error excluding %@ from backup %@", url.lastPathComponent, error.localizedDescription);        }        else {            NSLog(@"Yay");        }    }}


Unlike the Documents directory, the Application Support directory does not exist in the app's sandbox by default. You need to create it before you can use it.

And a much simpler way to get a reference to the directory is:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);NSString *appSupportDirectory = paths.firstObject;


I came across the same issue and decided to use a more concise approach:

let fileManager = NSFileManager.defaultManager()let urls = fileManager.URLsForDirectory(.ApplicationSupportDirectory, inDomains: .UserDomainMask) as! [NSURL]if let applicationSupportURL = urls.last {    fileManager.createDirectoryAtURL(applicationSupportURL, withIntermediateDirectories: true, attributes: nil, error: nil)}

This works because createDirectoryAtURL using withIntermediateDirectories: true only creates the folder if it doesn't exist.