我已经设置了应用程序组,并且正在使用 NSUserDefaults initWith suiteName
以允许我的应用程序和我的扩展访问相同的偏好设置。我现在想用一个可以通过iCloud同步这些偏好设置的实现来代替这个实现(如果他们启用了iCloud)。
我已经阅读了关于 NSUbiquitousKeyValueStore
似乎正是我所需要的。然而,文档指出 "应用程序必须始终使用默认的iCloud键值存储对象来获取和设置值。这个存储与你的应用在其权限请求中提供的唯一标识符字符串绑定。" 这让我相信,如果我采用这种方式,应用程序扩展将不会访问与主应用程序相同的商店。在《扩展程序指南》中并没有说过要共享这样的商店,它只提到了一种解决方案,允许访问相同的偏好设置,但只能存储在该设备的本地。
如何实现iCloud同步简单的偏好设置,也可以从该应用的扩展中访问?
另一个快速的问题,iOS 8有什么变化吗?我知道iCloud API方面有重大变化,但可能他们没有触及简单的偏好同步,只实现了iCloud Drive?
我最近也遇到了同样的问题,我在这里分享一下我的解决方案,希望能帮到大家。
com.apple.developer.ubiquity-kvstore-identifier
主应用程序和扩展应用程序之间必须是相同的。
如果你创建一个扩展应用(今天扩展),你将有2个 .entitlements
文件,一个是主程序,另一个是扩展程序。
你可以找到 com.apple.developer.ubiquity-kvstore-identifier
从两 .entitlments
文件。您需要确保两个 价值观 是 一样.
我用的是 $(TeamIdentifierPrefix)$(CFBundleIdentifier)
对于两个 .entitlements
文件,这是错误的。因为 $(CFBundleIdentifier)
是 bundle id,实际上主程序和扩展程序的值是不同的。
解决方法是使用硬编码的 bundle id。$(TeamIdentifierPrefix)com.youcompnay.app
.