Ios 如何将特定于应用程序的数据写入设备';s仅具有应用程序访问权限的文件存储

Ios 如何将特定于应用程序的数据写入设备';s仅具有应用程序访问权限的文件存储,ios,icloud,file-permissions,nsfilemanager,Ios,Icloud,File Permissions,Nsfilemanager,我想将数据写入设备在给定文件夹中的文件存储,这样,浏览文件存储的设备所有者或设备上的任何其他应用程序都无法访问该文件夹中的文件,也无法将其作为iCloud或任何其他此类服务的一部分进行备份 下面的代码正确吗?具体来说,带有“用户域”掩码的“应用程序支持”目录是否是保存这些文件的正确位置?我是否需要对单个文件设置特定权限以保证其有限的可见性?我是否需要单独指定要从备份服务中排除的每个文件 NSString* bundleIdentifier = [[NSBundle mainBundle] bun

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

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

您可以通过在您的配置文件中启用
数据保护来加密完整的应用程序数据,或按文件加密,如下所示

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

据我所知,
NSFileProtectionComplete
仅适用于设备设置了密码的情况。。。对吗?如果是这样,则这不是一个保证受保护存储的解决方案。iReddy,请参阅此处的问题: