所以我正在开发一个应用程序,用于在本地存储CoreData
框架的用户信息。信息可能很敏感,所以我在思考如何保护存储在数据库中的信息。在Xcode仪表板的功能选项卡下,我找到了这个数据保护开关:
任何人都知道这是如何运作的?如果我打开开关,Xcode会自动编码我的CoreData
文件吗?或者如何在我的CoreData
文件上实现此保护?
感谢您的时间和耐心。谢谢!
答案 0 :(得分:2)
您找到了正确的位置,您必须打开目标功能窗格中的数据保护开关,以表示您要使用数据保护。根据{{3}},这应该足够了:
默认保护级别是完整保护,即文件 当设备被锁定时,它们被加密并且不可访问。您可以 以编程方式设置您的文件创建的文件的保护级别 app [...]
它声明可以以编程方式设置保护级别。如果你想这样做(我仍然这样做,要保存;),你应该在创建persistentStoreCoordinator时使用适当的选项:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
@YES, NSMigratePersistentStoresAutomaticallyOption,
@YES, NSInferMappingModelAutomaticallyOption,
NSPersistentStoreFileProtectionKey, NSFileProtectionComplete, // <-- HERE
nil];
...
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
...
}
NSFileProtectionComplete
表示
文件以加密格式存储在磁盘上,无法读取 在设备锁定或启动时从或写入。
您也可以使用NSFileProtectionCompleteUnlessOpen
,请参阅Xcode快速帮助了解差异。
答案 1 :(得分:0)
根据Apple文档,当用户设置设备的活动密码时,将自动启用数据保护。系统会在后台对您的内容进行加密和解密。这些过程是自动的,硬件已加速。
但是我们仍然可以使用none
,complete
,completeUnlessOpen
和completeUntilFirstUserAuthentication
let options = [NSMigratePersistentStoresAutomaticallyOption:true,
NSInferMappingModelAutomaticallyOption:true,
NSPersistentStoreFileProtectionKey: FileProtectionType.complete] as [String : Any]
try persistantStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: options)
请参阅此link,以了解有关不同类型选项的更多信息。