WatchKit扩展程序没有看到针对App Group的NSUserDefaults的更新

时间:2015-03-16 16:06:05

标签: iphone xcode nsuserdefaults watchkit ios-app-group

我已经看到了几个问题,并尝试了所提供的所有答案,但这对我来说仍然不起作用。

我正在尝试在我的iPhone App和WatchKit扩展程序之间共享几个小块数据(字符串和BOOL)。 (如果它有任何区别,WK应用程序的GlanceController正在读取信息)

通过开发者网站,我创建了一个App组(group.com.theYawns.Sorcerers-Apprentice)。如果我查看“App ID”,我的应用程序似乎有两个相同的ID(com.theYawns.Sorcerers-Apprentice)加上一个用于扩展名(com.theYawns.Sorcerers-Apprentice.watchkitextension)。其中每个都启用了“应用程序组”(用于开发和分发),如果我编辑应用程序ID,则选择应用程序组。

我在App和扩展程序的功能中打开了“App Groups”。我有一个问题,我定期 - 一天几次,但不是每次构建 - 如果我进入并查看功能选项卡,我有一个红色感叹号说'添加应用程序组'权利到您的权利文件。如果我查看权利文件,则授权存在,如果单击“修复问题”,红色感叹号将变为复选标记。但事实上,每天需要多次这样做,这让我觉得有些不妥。

我已多次在XCode偏好设置下刷新我的配置文件,虽然我没有在权利下看到应用程序组图标,但如果我悬停,我会看到弹出的工具提示中的应用程序组。

在我的应用和扩展程序中,我通过

获得用户默认值的引用
NSUserDefaults *sharedAppDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.theYawns.Sorcerers-Apprentice"]; 

我还尝试在每次写入之后和WatchKit尝试读取之前添加[sharedAppDefaults synchonize],以防万一没有被刷新。 (没有任何区别)。

我的WatchKit扩展程序包ID与我的iPhone App包ID不同,这是我在其他线程上看到的答案之一。

我还添加了一个NSTimer来每10秒刷新一次,所以如果发现更改的时间问题,我希望它会在一两个更新周期后自行解决,但事实并非如此。

真的难过......似乎其他人已经通过其他线程的答案解决了他们的问题,但没有一个对我有效。

我搜索过的其他主题包括:

Why won't app groups work inside my WatchKit extension?

https://stackoverflow.com/questions/27047455/how-to-shared-storage-between-app-and-extension-with-app-group-and-

WatchKit NSUserDefaults and NSKeyedUnarchiver issue

2 个答案:

答案 0 :(得分:2)

好的,我在Apple开发者论坛上找到了答案。

从XCode目标“功能”标签中可以看出,我设置了所有正确的权利。我可以在我的项目中看到'Entitlements'文件,打开它,看看它是否设置正确。

但是 - 如果我查看App Target的“构建设置”标签下的“代码签名”部分,则没有显示授权文件。 (这一切都显示在WatchKit扩展中,但不适用于主iPhone应用程序。)

当我在代码签名下插入我的权利文件的名称时,一切都开始起作用了。

这对我来说似乎是个错误 - 我不相信同一目标的“功能”标签和“构建设置”标签应该在不同的地方寻找权利。但是想发布一个对我有用的答案,以防其他人遇到这个问题。

摘要:要确保权利正确,您必须在功能中看到交换机设置正确,并且您必须在Build Settings / Code Signing下看到引用的权利文件。

答案 1 :(得分:0)

您必须将权利添加到应用扩展程序的配置文件中。要执行此操作,请在下载最新的配置文件后登录到您的开发者帐户以添加权利。要验证应用程序组是否已启用,请在" TextEditor"中打开下载的配置文件。并搜索" app group"。如果您已正确完成,这将显示结果。使用这些新下载的配置文件,它将显示功能中的复选标记。