为什么我的WatchKit扩展程序中的应用程序组不起作用?

use*_*435 18 nsuserdefaults ios ios-app-extension ios-app-group watchkit

我已经看过关于在主机应用和应用扩展之间共享NSUserDefaults数据的所有其他帖子,但我仍然无法工作.以下是我所做的一切:

  1. 在Xcode的"功能"选项卡上为扩展和主机应用启用应用组.
  2. 将组名设置为"group.com.mycompany.foo",并确认扩展名和主机应用程序已添加到组中.
  3. 已确认两者都存在权利文件,并且"com.apple.security.application-groups"键设置为我的应用程序组名称.(对于它的价值,我也使用扩展和主机应用程序之间的共享钥匙串功能,这是有效的 - 所以我不认为这是权利问题)
  4. 重新生成所有配置文件.事实上,我甚至撤销了所有证书,并在设置应用程序组后重新生成了所有配置文件.

毕竟,这段代码仍然不起作用:

// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];
Run Code Online (Sandbox Code Playgroud)

然后:

// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);
Run Code Online (Sandbox Code Playgroud)

这导致:

(null)
Run Code Online (Sandbox Code Playgroud)

当我查看Xcode首选项时,我注意到这些图标,其中没有一个具有"App Group"图标: Xcode首选项 - 权利

但正如我之前所说,我在设置应用程序组后清除了我的钥匙串,证书和配置文件.因此,如果这实际上是问题,我如何将权利添加到配置文件?

我错过了什么?我是新鲜的想法.

救命?

编辑:访问组正在我的今日和Safari扩展中工作,而不是在WatchKit扩展中.我不知道为什么,并且所有构建设置似乎都以相同的方式配置.

编辑2:对于那些坚持我的功能设置不正确的人,这里有一个截图:功能

kel*_*lin 5

我有类似的问题.我注意到,我的WatchKit扩展和WatchKit应用程序具有相同的包标识符.我更改了WatchKit App的bundle id.此外,我没有忘记在Extension的info.plist中更改NSExtensionAttributes/WKAppBundleIdentifier以匹配该ID.现在一切正常.我希望这能帮到您!

简而言之:WatchKit App和Extension的捆绑标识符应该是不同的!