在主应用程序和今天的小部件macOS之间共享数据

时间:2017-07-04 21:40:07

标签: swift xcode macos-sierra today-extension

我正在尝试在我的主macOS应用和我创建的扩展程序之间共享数据 我看到我必须使用“App Groups”并与“UserDefault(suiteName:”name“)”

共享数据

问题:在主应用程序上打开应用程序组并添加了名称后,我在扩展程序上打开应用程序组,列表为空,我没有看到我刚创建的组?

有什么想法吗?

btw:团队成员在app和扩展程序上是相同的。我试图删除临时文件,清理项目,恢复Xcode和计算机。

enter image description here

编辑1:在iOS项目中,检测到应用程序组...
编辑2:我尝试使用Xcode 9,但同样的问题 编辑3:关于证书,标识符&对于苹果网站,您没有macOS类别“App Groups”,是否已弃用?
编辑4:如果我手动添加两个添加组名称,则输出中出现错误。 [用户默认值]无法读取CFPrefsPlistSource中的值< 0x6000000e4200> (域:726328455Z.test,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):只允许将容器与kCFPreferencesAnyUser一起使用,从而与cfprefsd分离。

编辑5:看起来有效,使用此代码成功保存数据

UserDefaults(suiteName: "7263xxx55Z.test")!.set(selectedRow, forKey: "selectedRow")
UserDefaults(suiteName: "7263xxx55Z.test")!.synchronize()

使用此代码获取,我收到了上一个错误,但我忽略了它

let selectedRow = UserDefaults(suiteName: "726xxx55Z.test")!.integer(forKey: "selectedRow")

1 个答案:

答案 0 :(得分:0)

在macOS项目中的app / app扩展程序之间共享数据:

1 / 在您的主项目目标中,选择功能并启用“应用组”。

2 / 点击“+”并添加新的应用组名称,必须以您的团队ID开头(例如643J438K.name.app)

3 / 为您的扩展应用目标重复1/2/2,请务必添加相同的名称

4 / 要保存和获取数据,请使用:

// Store data
UserDefaults(suiteName: "643J438K.name.app")!.set(yourVariable, forKey: "yourKey")
UserDefaults(suiteName: "643J438K.name.app")!.synchronize()

// Fetch data (integer type here)
UserDefaults(suiteName: "643J438K.name.app")!.integer(forKey: "yourKey")

5 / 您可以通过打开此文件来检查您的数据是否已正确保存:

/Users/UserName/Library/Group Containers/643J438K.name.app/Preferences/643J438K.name.app.plist