【问题标题】:How to store the core data files in the Private folder如何将核心数据文件存储在 Private 文件夹中
【发布时间】:2019-03-26 08:47:53
【问题描述】:

我已通过 Adhoc 分发向用户发布了 iOS 应用程序。用户已安装该应用程序,他们可以查看存储在文档目录中的文件,例如 sqlite 文件、图像。这可以通过 iExplorer、iMazing 等第三方应用程序访问。

问题:

1.是否可以将数据存储在私有目录中,其他来源或软件无法访问。

2.是否有任何库可以加密核心数据并且不应该被其他应用程序读取?

我尝试了以下解决方案,但这无济于事。

1.我使用了数据保护属性 - NSFileProtectionComplete 和 NSFileProtectionCompleteUnlessOpen。但是即使设备被锁定,数据仍然是可读的。

2.我尝试使用 SQLCipher 库对数据进行加密,但它不支持核心数据框架。

请指教,谢谢。

【问题讨论】:

    标签: ios core-data swift3 encrypted-core-data-sql


    【解决方案1】:

    您应该使用应用程序支持目录来安全地存储您的数据库文件。您可以像这样获取该文件夹的路径:

    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")
    

    当您在 NSPersistentStoreCoordinator 上调用 addPersistentStore(ofType:configurationName:at:options:) 以在磁盘上创建数据库时,最后使用该 URL。

    我不知道有任何库可以帮助您加密整个 Core Data DB,但我实际上认为一旦您的 DB 文件无法再访问,您就不需要这样做了 - 至少对于具有常规安全性的应用程序而言不需要要求。

    【讨论】:

    • 嗨,多利安,感谢您的回复。我已经使用应用程序目录来存储文件。但该文件在 iExplorer、iMazing 等 3rd 方软件中是可读/查看的。您能否就其他方法提出建议。谢谢。
    • 对不起,我一开始看错了你的评论。 “应用程序目录”是指哪个目录?
    • 是的。我已将文件存储在应用程序目录中,但仍然可以从 iExplorer、iMazing 等其他 3rd 方软件读取。
    • 那么您的意思是“应用程序支持”目录吗?如果是这样,您是否使用上面代码中系统提供的路径创建它?它应该导致容器内的路径 /Library/Application Support/ 没有暴露给 iMazing,我只是检查了它
    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2020-08-05
    • 2011-08-31
    • 2011-03-21
    • 2018-07-28
    • 2011-07-14
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多