为什么应用程序组不能在我的WatchKit扩展中工作?
我已经看到所有关于共享主机应用程序和附加应用程序之间的NSUserDefaults数据的其他职位,但我仍然无法正常工作。 以下是我所做的一切:
- 在Xcode的“function”选项卡上为扩展程序和主机应用程序启用应用程序组。
- 将组名称设置为“group.com.mycompany.foo”,并确认扩展程序和主机应用程序已添加到组中。
- 通过将“com.apple.security.application-groups”键设置为我的应用程序组名称,确认存在权利文件。 (对于它的价值,我也使用扩展和主机应用程序之间的共享钥匙串function,这是可行的 – 所以我不认为这是权利问题)
- 重新生成所有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首选项时,我注意到这些图标,没有一个具有“应用程序组”图标:
但正如我之前所说的,在设置应用程序组之后,我尽可能清除了我的钥匙串,证书和configuration文件。 所以,如果这实际上是问题,我如何将配额添加到configuration文件?
我错过了什么? 我是新鲜的想法。
帮帮我?
编辑 :访问组正在我的今天和Safari扩展,只是不在WatchKit扩展。 我不知道为什么,所有的构build设置似乎configuration相同的方式。
编辑2 :对于那些坚持我的能力没有正确设置,这里是一个截图:
我有类似的问题。 我注意到,我的WatchKit扩展和WatchKit应用程序具有相同的包标识符。 我改变了我WatchKit应用程序的捆绑ID。 此外,我没有忘记改变NSExtensionAttributes / WKAppBundleIdentifier在info.plist的扩展名匹配该ID。 现在一切正常。 我希望这能帮到您!
不久之后: WatchKit App和Extension的Bundle标识符应该是不同的!
你有没有尝试从iPhone应用程序读取相同的密钥?
我相信问题在于您没有激活WatchKit扩展程序中的App Group权利。
-
在您的项目设置下select您的WatchKit扩展。
-
select“WatchKit扩展”下的“function”选项卡,然后查找“应用程序组”并将其打开 。
-
select您之前创build的相同的应用程序组标识符(它应该自动出现,只是检查它)。
这是对我的伎俩。 显然Xcode自动为新的扩展创build一个新的权利文件(可能是我从“function”设置后,但不幸的是数组的值丢失… …
在应用程序权利:
在扩展权利中,数组中缺less值:
此外,确保该组出现在两个目标(应用程序和扩展程序)的“function”选项卡中,并且所有3个选中标记都是绿色,请参阅示例:
应用目标
扩展目标