Where should I save data & files I want to keep long term, and how do I prevent iCloud from backing them up
Saving files locally changed from iOS5.0 and earlier, 5.0.1, and 5.1 and newer primarily to the address iCloud backup issues. There are two Apple source documents (the File System Programming Guide, and QA1719) that together provide the information supporting the following:
- iOS 5.0
Files should be saved in the "Caches" directory, as there is no way to prevent backups if they are stored in the Documents folder. Note that the system may remove these files (see QA1719), so you would need the ability to recreate each as needed. To find the caches directory, use this:
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
- iOS 5.0.1
Files should be saved in '/Library/Application Support' (FSP, page 15), which can be better accessed via:
[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]
My experience is that this directory doesn't always exist, and thus you may need to create it:
- (NSString *)applicationAppSupportDirectory
{
return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
}
NSFileManager *manager = [NSFileManager defaultManager];
NSString *appSupportDir = [self applicationAppSupportDirectory];
if(![manager fileExistsAtPath:appSupportDir]) {
__autoreleasing NSError *error;
BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error];
if(!ret) {
NSLog(@"ERROR app support: %@", error);
exit(0);
}
}
Files saved to this directory (or subdirectories) need an extended attribute to tell iCloud not to back them up (see QA1719).
PS: I have not found a way to set the Deployment target to this release, if there is a way please leave a comment.
- iOS 5.1
Files (or folders of files) should be located in the 'Application Support' folder as described above. To prevent iCloud from backing up use:
[URL setResourceValue: [NSNumber numberWithBool: YES] forKey:NSURLIsExcludedFromBackupKey error:&error]
as described in QA1719. Note that you can apply this key to a directory to prevent its contents from being backed up. The complete method from QA1719:
- (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;
}
How to hide Open and Save document features in a Document Based application?
It is very simple - just remove (delete) the Open, Open Recent..., Save, Save as... menu items from the menu XIB. If you don't want a title bar, simply untick the "Title" checkbox for the window in the XIB, though that makes the window difficult to move.
If you have a title bar, to override "Untitled", you could
override var displayName: String! {
get {
return "Anything you like, even \"\""
}
set {
}
}
however that would still allow access to the save as menu through the chevron. To suppress that, you need an NSWindowDelegate
Docs
window(_:shouldPopUpDocumentPathMenu:)
Asks the delegate whether the window displays the title pop-up menu in response to a Command-click or Control-click on its title.
How can I stop iOS from asking to save an incorrect password?
If you set the username and password field contents to nil
before dismissing the view controller, then iOS will not prompt to save the account information.
Related Topics
How to Decode the Body of an Error in Alamofire 5
How to Submit Swift 2.2 App with Xcode 7.3 When iOS 10 Is Released
Tap Gesture Not Working as Expected When Added to Uiview in Collectionview Cell
How to Stop/Cancel Playsoundfilenamed in Swift
Cast Cgfloat to Int in Extension Binaryfloatingpoint
Override Multiple Overloaded Init() Methods in Swift
Swiftui Classes That Conforms Observableobject Should Be Singleton
Use Background Image on Uisearchcontroller iOS 11
How to Restore Window Position in an Osx Application
Swift Build Time Too Long When the Configuration Is 'Release'
How to Prevent Multiple Instances of the Same Window from Opening in MACos
How to Add a Loading View for Apple Watch
How to Check If Dark Appearance Is Enabled Tvos
Passing Property Type as Parameter