【发布时间】:2017-11-08 20:33:30
【问题描述】:
原来的情况:
我正在 macOS 10.13 上开发沙盒应用。这是一个类似鞋盒的应用程序,由带有工具栏的主窗口组成。在 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 和共享的?
【问题讨论】:
标签: cocoa nsuserdefaults appstore-sandbox appgroups