WatchKit 扩展看不到 App Group 的 NSUserDefaults 更新

WatchKit extension doesn't see updates to NSUserDefaults for App Group

我已经看到了几个关于此的问题,并尝试了所有提供的答案,但这仍然不适合我。

我正在尝试在我的 iPhone 应用程序及其 WatchKit 扩展之间共享几小段数据(字符串和布尔值)。 (如果有任何不同,信息正在被 WK 应用程序的 GlanceController 读取)

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

我已经为应用程序和扩展程序启用了 'App Groups' 功能。我担心的是定期 - 一天几次,但不是每次构建 - 如果我进入并查看“功能”选项卡,我会看到一个红色感叹号,上面写着 'Add the App Groups' entitlement to your entitlements file。如果我查看权利文件,权利就在那里,如果我单击 'Fix issue',红色感叹号会变为复选标记。但事实上这需要每天多次完成,这让我担心有些不对劲。

我已经多次在 XCode 首选项下刷新我的配置文件,虽然我没有在权利下看到应用程序组图标,但如果我将鼠标悬停在弹出的工具提示中,我确实会看到应用程序组.

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

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

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

我的 WatchKit 扩展包 ID 与我的 iPhone 应用程序包 ID 不同,这是我在另一个线程上看到的答案之一。

我还添加了一个 NSTimer 以每 10 秒刷新一次 glance,因此如果获取更改时出现时间问题,我希望它会在一两个更新周期后自行解决,但确实如此没有。

真的很难过...似乎其他人已经通过其他线程的回答解决了他们的问题,但 none 对我有用。

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

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

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

从 XCode 目标 'Capabilities' 选项卡看来,我已经设置了所有正确的权利。我可以在我的项目中看到 'Entitlements' 文件,打开它,发现它设置正确。

但是——如果我在我的 App Target 的 'Build Settings' 选项卡下查看,在 'Code Signing' 部分,没有显示授权文件。 (对于 WatchKit 扩展,它都正确显示,但对于主要的 iPhone 应用程序却没有正确显示)。

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

这对我来说似乎是一个错误 -- 我不认为同一目标的 'Capabilities' 选项卡和 'Build Settings' 选项卡应该在不同的地方寻找权利。但是想 post 在这里对我有用的答案,以防其他人遇到这个问题。

总结:为确保授权正确,您必须查看功能中正确设置的开关,并且必须查看构建设置/代码签名下引用的授权文件。