繁体   English   中英

手动编辑时不会保存共享应用程序组容器中的 UserDefaults

[英]UserDefaults in shared app group container won't save when editing manually

我正在开发我的 macOS 应用程序的新版本,该应用程序将version属性存储在UserDefaults.standard中。 现在我想测试从版本1到版本2的更新过程。只有版本2写入version属性。 所以版本 1 不应该有它。

期待

UserDefaults:应用程序版本 1

版本 1

UserDefaults:应用程序版本 2

版本 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM