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

问题描述 投票:3回答:1

我已经设置了应用程序组,并且正在使用 NSUserDefaults initWith suiteName 以允许我的应用程序和我的扩展访问相同的偏好设置。我现在想用一个可以通过iCloud同步这些偏好设置的实现来代替这个实现(如果他们启用了iCloud)。

我已经阅读了关于 NSUbiquitousKeyValueStore 似乎正是我所需要的。然而,文档指出 "应用程序必须始终使用默认的iCloud键值存储对象来获取和设置值。这个存储与你的应用在其权限请求中提供的唯一标识符字符串绑定。" 这让我相信,如果我采用这种方式,应用程序扩展将不会访问与主应用程序相同的商店。在《扩展程序指南》中并没有说过要共享这样的商店,它只提到了一种解决方案,允许访问相同的偏好设置,但只能存储在该设备的本地。

如何实现iCloud同步简单的偏好设置,也可以从该应用的扩展中访问?

另一个快速的问题,iOS 8有什么变化吗?我知道iCloud API方面有重大变化,但可能他们没有触及简单的偏好同步,只实现了iCloud Drive?

ios nsuserdefaults icloud ios-app-extension nsubiquitouskeyvaluestore
1个回答
0
投票

我最近也遇到了同样的问题,我在这里分享一下我的解决方案,希望能帮到大家。

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.

© www.soinside.com 2019 - 2024. All rights reserved.