沙盒OSX应用程序和扩展程序之间共享NSUserDefault

问题描述 投票:5回答:1

背景

我正在开发具有关联的Today Widget扩展的OSX应用程序。我想要主应用程序和扩展程序共享用户首选项,就像Apple的Sharing Data with Your Containing App中所述。就我而言,主应用程序编写首选项,而扩展程序则读取它们。

  • OSX 10.11.6
  • Xcode 7.3.1
  • Swift 2.2

应用程序和扩展名都被沙箱化。他们也是同一应用程序组的成员。相关权利,已使用验证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实例已填充期望值。

注意:从Xcode构建和运行应用程序时,只有在选择产品->存档,然后选择导出->导出为Mac应用程序时,才不会发生以下情况。从Xcode构建/运行时,主应用程序会在扩展程序期望的位置创建plist文件,如上所述。

xcode macos nsuserdefaults appstore-sandbox appgroups
1个回答
0
投票

我现在正在做同样的事情-沙箱应用程序+共享扩展名+ NSUserDefault +应用程序组,它工作正常。也许苹果在此期间修复了一些错误?

© www.soinside.com 2019 - 2024. All rights reserved.