CoreData&数据保护

时间:2016-12-21 00:05:28

标签: ios swift xcode core-data data-protection

所以我正在开发一个应用程序,用于在本地存储CoreData框架的用户信息。信息可能很敏感,所以我在思考如何保护存储在数据库中的信息。在Xcode仪表板的功能选项卡下,我找到了这个数据保护开关:

任何人都知道这是如何运作的?如果我打开开关,Xcode会自动编码我的CoreData文件吗?或者如何在我的CoreData文件上实现此保护? 感谢您的时间和耐心。谢谢!

2 个答案:

答案 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文档,当用户设置设备的活动密码时,将自动启用数据保护。系统会在后台对您的内容进行加密和解密。这些过程是自动的,硬件已加速。 但是我们仍然可以使用nonecompletecompleteUnlessOpencompleteUntilFirstUserAuthentication

以编程方式设置文件保护级别选项
let options = [NSMigratePersistentStoresAutomaticallyOption:true,
                           NSInferMappingModelAutomaticallyOption:true,
                           NSPersistentStoreFileProtectionKey: FileProtectionType.complete] as [String : Any]
            try persistantStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: options)

请参阅此link,以了解有关不同类型选项的更多信息。