gpt4 book ai didi

ios - 在 Swift 模块、Cocoa Touch 框架中,将一些私有(private)数据存储在哪里?

转载 作者:可可西里 更新时间:2023-11-01 01:39:04 24 4
gpt4 key购买 nike

我需要存储一些私有(private)数据(当前 session 票证或设置)在我当前的 Swift 模块中。对于简单的应用程序,选项通常是 NSUserDefaults 或磁盘上的某些文件,因此我不需要任何使用我的 Cocoa Touch Framework 的应用程序即可从外部访问(至少修改)此数据,因为某些应用程序可能会清理它由于某些原因,我拥有自己的文档文件夹,开发人员可能根本不知道我存储在这里的数据。与 NSUserDefaults 相同的情况。

模块有自己的文档文件夹吗?

我只是想知道,这样做的正确方法是什么?

任何帮助都会很棒,谢谢!

最佳答案

Swift 模块定义了一个框架。框架有自己的包(它们可以用于框架随附的静态 Assets ),但我相信没有 API 指南或约定定义它们应该在何处保存框架想要对应用程序隐藏的数据。

如果您查看 Apple 的 File System Programming Guide ,它只有一个部分是关于为持久化数据定义“特定于应用程序”的位置。 Framework Programming Guide 似乎没有说明定义每个框架的位置。

鉴于此,我在我的框架代码中要做的只是使用特定于应用程序的存储位置,但将我框架的所有数据放在一个子目录或独特的键字符串下,这些字符串用框架的名称清楚地标记它并且是很可能是独一无二的。因此,我不会保存到 Application Support/目录,而是保存到 Application Support/MyFramework/。

这将阻止您的框架破坏托管应用程序的数据。它不会阻止恶意托管应用程序检查您的框架正在保存的内容,但这是一个更难解决的问题。此外,如果一个编写笨拙的托管应用程序只是使用通配符删除它自己的所有数据,它可能会删除您的数据,但这可能是它的意图。

更新:

正如评论者所建议的,钥匙串(keychain)也是一个合理的地方。但是钥匙串(keychain)的安全基础设施(我相信)实际上并没有以加密方式保护您免受托管应用程序的侵害。尽管如此,它还是一个键值存储,托管应用不太可能意外完全清除。

如果您真的想尝试从托管应用程序中隐藏大量框架数据,那么您也可以探索使用 URLForDirectory(_:inDomain:appropriateForURL:create:) 来找到一个系统范围(而不是特定于应用程序)的临时目录,然后将框架的数据隐藏在那里。但我认为所有这些目录都可能被系统随意删除,所以只有当你保存你的框架以后可以重新生成的数据时,它才会起作用,可能基于较小的数据种子,存储在像钥匙串(keychain)这样的地方.

底线是,如果您要发布一个框架供其他人使用,您就不能向使用该框架的应用程序开发人员隐瞒任何内容。他们可以附加调试器。那你就输了。 (如果你想深入了解这一点,有一个叫做“白盒密码学”的领域,它描述了保护数据免受可以完全观察你的操作的对手的攻击。这是现代 DRM 系统的基础。)

关于ios - 在 Swift 模块、Cocoa Touch 框架中,将一些私有(private)数据存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com