在app扩展和主应用程序中使用NSUbiquitousKeyValueStore

时间:2014-09-21 22:45:17

标签: ios nsuserdefaults icloud ios-app-extension nsubiquitouskeyvaluestore

我已设置应用群组并使用NSUserDefaults initWith suiteName以允许我的应用和我的扩展程序访问同一组首选项。我现在想用一个将iCloud同步这些首选项的实现替换(如果他们启用了iCloud)。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

我对两个$(TeamIdentifierPrefix)$(CFBundleIdentifier)文件都使用了.entitlements,这是错误的。由于$(CFBundleIdentifier)是捆绑销售ID,因此对于主应用和扩展应用来说,它实际上是不同的值。

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