设置捆绑不能在watchOS 2上工作

这在watchOS 1上不是问题,但现在在watchOS 2上我无法读取手表扩展中的值。

根据苹果公司的文件 ,这是可能的。 根据这个线程上的一些人,这是可能的。 根据这个线程的苹果员工,这是可能的。

据我所知,我正确地设置了一切:

  • 我使用相同的标识符在iOS应用程序和监视扩展上启用了应用程序组。
  • 我将Settings-Watch.bundle添加到iOS应用程序,并向Plist添加了具有相同标识符的ApplicationGroupContainerIdentifier

当我使用标识符作为套件名称初始化NSUserDefaults对象时,我无法读取手表扩展中的值。 我可以在iOS应用上阅读。 这发生在模拟器和真实的设备上。

请不要发表关于如何使用Watch连接的答案。 在watchOS 2上,只有共享应用程序组才可以做到这一点,而不需要手表连接,人们可以做到这一点,这里直接出来的文档 :

在watchOS 2中,您的WatchKit扩展可能会读取首选项的值,但不能写入新的值。 watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS。

我已经编辑了我的答案。 以前,它谈到无法使用应用程序组来同步watchOS 2中的数据,但是您的具体问题是有关Settings Bundle,它仍然在watchOS 2中从iOS同步到Apple Watch。

我无法在模拟器的Xcode 7.1 / 7.2中使用但是它可以在真实的设备上运行。 从文档:

watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS。 在watchOS 1中,WatchKit扩展可以直接访问默认数据库,并且可以读取和写入数值。

所有3个目标应该configuration相同的应用程序组(这里的Watch App目标似乎是OP中缺less的组件):

目标 应用程序组

我的设置包:

在这里输入图像说明 在这里输入图像说明

InterfaceController.swift一些简单的接口代码:

 @IBOutlet var label: WKInterfaceLabel! @IBAction func buttonAction() { let sharedDefaults = NSUserDefaults.init(suiteName: "group.testSettings") let name_preference = String(sharedDefaults?.objectForKey("name_preference")) self.label.setText(name_preference) } 

最后的结果是:

在这里输入图像说明 在这里输入图像说明

所以,它确实按预期工作,只在模拟器中没有。 看起来模拟器中的两个设备之间有一些隔离,试图把我的手指放在那里发生的事情有点令人沮丧。

这是因为这些应用现在在Apple Watch上运行,这意味着他们无法从iPhone获取设置,因为这些设置不再存储在同一台设备上。 更多信息: 无法从watchOS 2中的设置包中获取值

使用`WCSessions处理的新过程可以在下面提到的文件中的示例苹果应用程序 – 列表器中看到。

https://developer.apple.com/library/ios/samplecode/Lister/Listings/Objective_C_ListerKit__WatchOS__AAPLConnectivityListsController_m.html#//apple_ref/doc/uid/TP40014701-Objective_C_ListerKit__WatchOS__AAPLConnectivityListsController_m-DontLinkElementID_57

此外, https: //stackoverflow.com/a/32628105/1640786中提到的答案似乎使整个过程更加方便。