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