我已经看过 SO 的所有其他关于在主机应用程序和应用程序扩展之间共享 NSUserDefaults 数据的帖子,但我的仍然不起作用。这是我所做的一切:
- 在 Xcode 的“功能”选项卡上为扩展和主机应用程序启用应用程序组。
- 将组名设置为“group.com.mycompany.foo”并确认扩展和主机应用程序已添加到组中。
- 确认两者都存在一个权利文件,其中“com.apple.security.application-groups”键设置为我的应用程序组名称。(对于它的价值,我还在扩展程序和主机应用程序之间使用共享的钥匙串功能,这是有效的——所以我不认为这是权利的问题)
- 重新生成所有配置文件。事实上,我什至在设置应用程序组后撤销了所有证书并重新生成了所有配置文件。
毕竟,这段代码仍然不起作用:
// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];
进而:
// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);
这导致:
(null)
当我查看 Xcode 首选项时,我注意到这些图标,它们都没有“App Group”图标:
但正如我之前所说,我什至在设置应用程序组后清除了我的钥匙串、证书和配置文件。因此,如果这确实是问题所在,我该如何将权利添加到配置文件中?
我错过了什么?我的想法很新鲜。
帮助?
编辑:访问组在我的 Today & Safari 扩展中工作,而不是在 WatchKit 扩展中。我不知道为什么,所有构建设置似乎都是以相同的方式配置的。
编辑2:对于那些坚持我的能力设置不正确的人,这里是一个截图: