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

我已经看到所有关于共享主机应用程序和附加应用程序之间的NSUserDefaults数据的其他职位,但我仍然无法正常工作。 以下是我所做的一切:

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

而所有这一切,这个代码仍然无法正常工作:

// 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首选项时,我注意到这些图标,没有一个具有“应用程序组”图标: Xcode首选项 - 权利

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

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

帮帮我?

编辑 :访问组正在我的今天和Safari扩展,只是不在WatchKit扩展。 我不知道为什么,所有的构build设置似乎configuration相同的方式。

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

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

不久之后: WatchKit App和Extension的Bundle标识符应该是不同的!

你有没有尝试从iPhone应用程序读取相同的密钥?

我相信问题在于您没有激活WatchKit扩展程序中的App Group权利。

  1. 在您的项目设置下select您的WatchKit扩展。

  2. select“WatchKit扩展”下的“function”选项卡,然后查找“应用程序组”并将其打开

  3. select您之前创build的相同的应用程序组标识符(它应该自动出现,只是检查它)。

这是对我的伎俩。 显然Xcode自动为新的扩展创build一个新的权利文件(可能是我从“function”设置后,但不幸的是数组的值丢失… …

在应用程序权利:

在这里输入图像说明

在扩展权利中,数组中缺less值:

在这里输入图像说明

此外,确保该组出现在两个目标(应用程序和扩展程序)的“function”选项卡中,并且所有3个选中标记都是绿色,请参阅示例:

应用目标

在这里输入图像说明

扩展目标

在这里输入图像说明