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

Share data between main app and today widget macOS

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

共享数据

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

有什么想法吗?

顺便说一句:团队资料在应用程序和扩展程序上是相同的。我尝试删除临时文件、清理项目、恢复 Xcode 和计算机。

编辑 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")

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

1/ 在您的主项目目标中,select 功能并启用 "App Groups".

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

3/ 为您的扩展应用程序目标重复 1/ 和 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