【问题标题】:Share data between main app and today widget macOS在主应用程序和今日小部件 macOS 之间共享数据
【发布时间】:2017-12-08 10:02:38
【问题描述】:

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

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

有什么想法吗?

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

编辑 1:在 iOS 项目上检测到应用程序组...
编辑 2:我尝试使用 Xcode 9 但同样的问题
编辑 3:在证书、标识符和配置文件苹果网站上,您没有 macOS 的“应用程序组”类别,是否已弃用?
编辑 4:如果我添加两者都手动添加组名称,然后我在输出中遇到错误:。 [用户默认值] 无法读取 CFPrefsPlistSource 中的值(域:726328455Z.test,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):仅允许将 kCFPreferencesAnyUser 与容器一起用于系统容器,从 cfprefsd 分离.

Edit 5 : 看起来可行,使用此代码成功保存数据

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

使用这段代码获取,我得到了之前的错误,但我忽略了它

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

【问题讨论】:

  • 您是否尝试单击加号并添加组名?
  • 是的,我使用了相同的应用名称,按团队编号、按组开始。等等,没有任何效果
  • 你有开发者账号的管理员权限吗?
  • 是的,我只有 1 个帐户,我是开发者
  • 解决方案已解决?

标签: swift xcode macos-sierra today-extension


【解决方案1】:

在 macOS 项目中的应用/应用扩展之间共享数据:

1/ 在您的 Main 项目目标中,选择 Capabilities 并启用“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

【讨论】:

  • 我试过了,但我在控制台中收到了这个错误:Unsatisfied entitlements: com.apple.security.application-groups
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多