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.