我想将数据写入给定文件夹中的设备文件存储,以使设备所有者浏览文件存储无法访问该文件夹中的文件,也无法访问设备上的任何其他应用程序,也不会将其作为备份进行备份iCloud或任何其他此类服务。
以下代码是否正确实现此目的?具体来说,具有“用户域”掩码的“应用程序支持”目录是否是保存这些文件的正确位置?我是否需要为保证其可见性有限的单个文件设置特定权限?我是否需要单独指定每个文件以从备份服务中排除?
NSString* bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *urls = [fileManager URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
NSURL *url = [urls objectAtIndex:0];
url = [url URLByAppendingPathComponent:bundleIdentifier];
url = [url URLByAppendingPathComponent:@"MyFolder"];
if (![url checkResourceIsReachableAndReturnError:nil]) {
[fileManager createDirectoryAtURL:url
withIntermediateDirectories:YES
attributes:nil
error:nil];
[url setResourceValue:[NSNumber numberWithBool: YES]
forKey:NSURLIsExcludedFromBackupKey
error:nil];
}
url = [url URLByAppendingPathComponent:@"MyFile.txt"];
[@"MyString" writeToURL:url
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
答案 0 :(得分:0)
在您的应用中启用Data Protection
功能。数据保护通过使用密码保护硬件加密密钥来增强内置硬件加密。这为您的电子邮件附件和第三方应用程序提供了额外的保护层。
您可以在配置文件中启用data protection
或按照以下文件启用文件来加密完整的应用数据.....
[[NSFileManager defaultManager] createFileAtPath:[self filePath]
contents:[@"super secret file contents"
dataUsingEncoding:NSUTF8StringEncoding]
attributes:[NSDictionary dictionaryWithObject:NSFileProtectionComplete
forKey:NSFileProtectionKey]];