为什么赢得的应用程序组在我的WatchKit扩展程序中工作?

时间:2015-03-05 18:59:49

标签: ios nsuserdefaults ios-app-extension watchkit ios-app-group

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

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

    // 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”图标: Xcode Preferences - Entitlements

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

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

    帮助?

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

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

2 个答案:

答案 0 :(得分:5)

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

很快: WatchKit App和Extension的捆绑标识符应该不同!

答案 1 :(得分:2)

您是否尝试从iPhone应用程序中读取相同的密钥?

我认为问题在于您未在WatchKit扩展程序中激活应用程序组权利。

  1. 在项目设置下选择您的WatchKit扩展程序。

  2. 选择WatchKit Extension下的功能选项卡,然后查找应用程序组并将其打开

  3. 选择您之前创建的相同应用组标识符(它应自动显示并进行检查)。