【发布时间】:2023-03-15 00:07:01
【问题描述】:
我已经看过 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:对于那些坚持认为我的能力设置不正确的人,这里是截图:
【问题讨论】:
-
您是否尝试过单击 Xcode 配置文件列表左下角的“刷新”按钮?
-
大概一百万次。 :(
-
在您附加的视图中,权利列中没有应用程序组图标(至少我没有它并且应用程序组对我有用)。回到问题:您是否 100% 确定主机应用程序和扩展目标都使用正确的配置文件和代码签名身份进行签名?正确的意思是
com.mycompany.foo.myapp和com.mycompany.foo.myapp.myappwatchkitextension。通配符在这里不起作用。 -
FWIW,我的个人资料都没有包含应用程序组图标,即使那些确实与应用程序组一起工作的个人资料也是如此。我不会注意该图标是否显示在该列表中。如果应用目标设置的“功能”部分显示应用组已启用,那么应该就足够了。
-
好的,我将忽略这些图标。功能肯定是启用的。并且配置文件是明确设置的,没有通配符(com.myapp 和 com.myextension)。我正在拔头发,一开始我的头发已经不多了。
标签: ios nsuserdefaults ios-app-extension watchkit ios-app-group