最近,我正在制作一个简单的iOS 8分享扩展程序,以了解系统的工作方式。正如苹果在其应用扩展编程指南中所述:
默认情况下,您的承载应用程序及其扩展程序之间没有直接访问对方容器的权限。
这意味着扩展程序和承载应用程序不共享数据。但是在同一页中,苹果提出了一种解决方案:
如果您希望您的承载应用程序及其扩展程序能够共享数据,请使用Xcode或开发人员门户网站为应用程序及其扩展启用应用组。然后,在门户网站中注册应用组并指定要在承载应用程序中使用的应用组。
然后就可以使用NSUserDefaults在承载应用程序和扩展程序之间共享数据。这正是我想要做的。但出于某些原因,它无法正常工作。
在同一页中,苹果建议使用标准设置:
var defaults = NSUserDefaults.standardUserDefaults()
在一次 WWDC 演示 (217) 中,他们建议使用一个通用的包:
var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
此外,我为包含应用程序目标和扩展目标启用了 App Groups,并使用相同的 App Group 名称:
但是所有这些设置都是无用的。 我无法从扩展中检索存储在包含应用程序中的数据。 就像两个目标使用完全不同的 NSUserDefaults 存储一样。
因此,
- 是否有解决此方法的方案?
- 如何在包含应用程序和共享扩展之间共享简单数据? 该数据仅为 API 的用户凭据。