在启用应用程序组的情况下保留标准 NSUserDefaults

Persisting standard NSUserDefaults with App Groups enabled

原情况:

我正在 macOS 10.13 上开发沙盒应用程序。这是一个类似鞋盒的应用程序,由一个带工具栏的主 window 组成。 window 框架和工具栏配置的自动保存在 Interface Builder 中设置。

如果我 运行 并退出应用程序,我可以在应用程序的沙盒容器中看到包含预期数据的首选项文件(名为 <app-identifier>.plist)。一切正常。

使用应用组扩展应用:

为了允许与其他沙盒应用进行数据交换,我在 Xcode 的目标 Capabilities 选项卡中创建了一个应用组。

到目前为止这是有效的,即在启动应用程序时创建了一个额外的组容器。也可以通过 UserDefaults.init(suiteName:"<group-name>").

创建 UserDefaults 对象,将共享首选项存储到组容器中

问题:

添加应用组后,自动保存机制如工具栏配置不再有效。在干净的 Mac 上启动和退出应用程序不再在应用程序容器的 Preferences 目录中创建 .plist 文件。相反,控制台会显示如下消息:

[User Defaults] attempt to set <value> for key in <key> in
non-persistent preferences domain CFPrefsPlistSource<address>
(Domain: <app-identifier>, User: kCFPreferencesCurrentUser,
ByHost: No, Container: (null), Contents Need Refresh: Yes)

它在寻找我,自动保存机制不再能够将其数据写入首选项文件。

是否可以在应用组中同时使用标准 UserDefaults 和共享用户默认值?

问题已解决:重新启动 Mac 后,一切正常。这真的很奇怪。