我已经通过Adhoc发行版向用户发布了iOS应用。用户已经安装了该应用程序,他们能够查看文件,例如sqlite文件,文档目录中存储的图像。可以通过第三方应用程序(例如iExplorer,iMazing)来访问它。
问题:
1。是否可以将数据存储在私有目录中,而其他来源或软件无法访问该数据。
2。是否有用于加密核心数据的库,并且其他应用程序不应读取该库?
我尝试了以下解决方案,但这并没有帮助。
1。我使用了“数据保护”属性-NSFileProtectionComplete和NSFileProtectionCompleteUnlessOpen。但是即使设备被锁定,数据仍然可读。
2。我已经尝试使用SQLCipher库对数据进行加密,但是它不支持核心数据框架。
请提出建议并谢谢。
答案 0 :(得分:0)
您应该使用应用程序支持目录安全地存储数据库文件。您可以这样获取该文件夹的路径:
let appSupportDirURL = FileManager.default.urls(for:.applicationSupportDirectory, in:.userDomainMask).last
您需要在第一次使用时在do / catch中创建该目录:
try FileManager.default.createDirectory(at: appSupportDirURL, withIntermediateDirectories: true, attributes: nil)
现在将您的数据库文件名添加到该路径:
let storeURL = appSupportDirURL.appendingPathComponent("MyDatabaseName")
最后,当您在addPersistentStore(ofType:configurationName:at:options:)
上调用NSPersistentStoreCoordinator
在磁盘上创建数据库时,使用该URL。
我不知道有任何可帮助您加密整个Core Data DB的库,但实际上我认为一旦数据库文件不再可访问,您就不需要这样做-至少对于具有常规安全性的应用而言要求。