如何使用仅限应用访问权限将应用特定数据写入设备的文件存储

时间:2016-02-16 17:05:20

标签: ios icloud file-permissions nsfilemanager

我想将数据写入给定文件夹中的设备文件存储,以使设备所有者浏览文件存储无法访问该文件夹中的文件,也无法访问设备上的任何其他应用程序,也不会将其作为备份进行备份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];

1 个答案:

答案 0 :(得分:0)

在您的应用中启用Data Protection功能。数据保护通过使用密码保护硬件加密密钥来增强内置硬件加密。这为您的电子邮件附件和第三方应用程序提供了额外的保护层。

您可以在配置文件中启用data protection或按照以下文件启用文件来加密完整的应用数据.....

[[NSFileManager defaultManager] createFileAtPath:[self filePath]
                          contents:[@"super secret file contents"
                 dataUsingEncoding:NSUTF8StringEncoding]
                        attributes:[NSDictionary dictionaryWithObject:NSFileProtectionComplete
                                                               forKey:NSFileProtectionKey]];