4

我已经设置了 App Groups 并正在使用NSUserDefaults initWith suiteName它,以允许我的应用程序和我的扩展程序访问同一组首选项。我现在想用一个可以通过 iCloud 同步这些首选项的实现来替换该实现(如果它们启用了 iCloud)。

我已经阅读了NSUbiquitousKeyValueStore这似乎正是我所需要的。但是,文档指出“应用程序必须始终使用默认的 iCloud 键值存储对象来获取和设置值。此存储与您的应用程序在其权利请求中提供的唯一标识符字符串相关联。” 这让我相信如果我采用这个,应用程序扩展将不会访问与主应用程序相同的商店。扩展编程指南中没有提到共享这样​​的商店,它只提到了一个允许访问相同首选项但仅本地存储在该设备上的解决方案。

如何实现简单首选项的 iCloud 同步,也可以从该应用程序的扩展程序访问?

另一个小问题,iOS 8 有什么变化吗?我知道 iCloud API 发生了重大变化,但也许他们没有触及简单的首选项同步,只实现了 iCloud Drive?

4

1 回答 1

12

我最近遇到了同样的问题,我在这里分享我的解决方案,希望它可以帮助某人。

com.apple.developer.ubiquity-kvstore-identifier主应用和扩展应用之间必须相同。

如果您创建一个扩展应用程序(今天的扩展程序),您将有 2 个.entitlements文件,一个用于主应用程序,另一个用于扩展应用程序。

com.apple.developer.ubiquity-kvstore-identifier您可以从两个.entitlments文件中找到 的值。您需要确保两个相同。

$(TeamIdentifierPrefix)$(CFBundleIdentifier)对这两个.entitlements文件都使用了,这是错误的。因为$(CFBundleIdentifier)是bundle id,所以它对于主应用程序和扩展应用程序实际上是不同的值。

该修复程序使用硬编码的捆绑包 id: $(TeamIdentifierPrefix)com.youcompnay.app

于 2020-05-23T05:32:53.387 回答