背景
我正在开发一个带有相关Today Widget扩展的OSX应用程序。我希望主应用程序和扩展程序共享用户首选项,就像Apple的Sharing Data with Your Containing App中所描述的那样。在我的情况下,主应用程序编写首选项,扩展名读取它们。
应用和扩展程序都是沙盒。他们也是同一应用程序组的成员。相关权利,使用经过验证
应用和扩展程序codesign -d --entitlements
:
com.apple.security.app-sandbox: true
com.apple.security.application-groups:
- com.example.Common
代码
应用和扩展程序共享相同的代码以初始化和访问NSUserDefaults
。
NSUserDefaults.init(suiteName: "com.example.Common")
问题
主应用程序在以下位置创建首选项:
~/Library/Containers/com.example/Data/Library/Preferences/com.example.Common.plist
然后打开扩展名时,其NSUserDefault
实例为空。
如果我将应用创建的plist移动到:
~/Library/Group Containers/com.example.Common/Library/Preferences/com.example.Common.plist
扩展程序的NSUserDefault
实例将填充预期值。
注意: 仅当选择Product - >时,在从Xcode构建和运行应用程序时才会发生以下情况。存档,然后导出 - >导出为Mac应用程序。当从Xcode构建/运行时,主应用程序会创建plist文件,扩展程序在其中如上所述。
答案 0 :(得分:0)
我现在正在做同样的事情-沙箱应用程序+共享扩展名+ NSUserDefault +应用程序组,它工作正常。也许苹果在此期间修复了一些错误?