[英]UserDefaults in shared app group container won't save when editing manually
我正在开发我的 macOS 应用程序的新版本,该应用程序将version
属性存储在UserDefaults.standard
中。 现在我想测试从版本1到版本2的更新过程。只有版本2写入version
属性。 所以版本 1 不应该有它。
UserDefaults:应用程序版本 1
UserDefaults:应用程序版本 2
这是一个沙盒应用程序,所以我 go 到这里并删除整个容器。
~/Library/Containers/com.example.myapp/
我切换到 Xcode,在我的 git 历史记录中检查版本 1,然后运行该应用程序。
运行应用程序的版本 1 时,它会写入settings
属性。 但同时它也写入了版本 1 甚至没有实现的version
属性。 所以,我认为发生了一些奇怪的缓存问题。
为了“从头开始”运行应用程序,我还需要做些什么吗?
我与一位 Apple 工程师交谈过,结果发现后台有一个守护进程用于访问用户默认值。
只有守护进程应该有权访问共享应用程序组中的用户默认值。 您使用用户默认值的应用程序也只与守护进程对话。
守护进程也有一个缓存并将其返回,因为它不知道您的手动更改并认为文件没有更改。
杀死恶魔
苹果工程师还说,从技术上讲,你可以每次都杀死守护进程,但这不是推荐的方式。 他们也没有告诉我这个恶魔的名字。
使用默认命令行工具
推荐的方法似乎是使用defaults
命令行工具。 这个工具基本上和你的应用程序一样。 它与守护进程对话,守护进程将更新实际文件。 请注意,对于共享应用程序组中的用户默认值,您需要指定文件的完整路径。 使用捆绑标识符是不够的。
这是defaults
的参考: https://ss64.com/osx/defaults.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.