为什么基于应用程序组(即suiteName)的NSUserDefaults返回不同的实例?

时间:2018-04-12 20:21:13

标签: xcode nsuserdefaults xcode-extension

有点难过。我正在开发一个Xcode扩展,需要通过NSUserDefaults与其容器应用程序进行通信。要执行此操作,您需要在扩展程序和容器应用程序中设置应用程序组权利,签署您的应用程序,然后初始化默认值,如此...

let defaults = UserDefaults(suiteName: "group.com.MyCo.TestCode")!

问题是即使没有抛出任何错误,扩展程序和应用程序也会获得两个不同的默认副本。

但是,如果我返回并在添加组时,保留TeamIdentifierPrefix,我最终会得到一个组名...

"03V7NBU5AX.group.com.MyCo.TestCode"

我在初始化中使用的是这样......

let defaults = UserDefaults(suiteName: "03V7NBU5AX.group.com.MyCo.TestCode")!

......现在一切正常!但为什么第一个案例不起作用呢?我已经看到的每个教程都说,只要应用程序组匹配它就应该可以工作,而不是我曾经看过的单个教程提到了团队标识符前缀。这是Xcode扩展特有的吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我使用的是iOS风格的应用组:group.com.MyCompany.MyTarget

在大多数情况下,这似乎是可行的。但是随后某些应用程序组功能突然停止工作,或者可能一直没有工作。

一项小小的研究发现了Mac专用的App Group的命名要求,我以前不知道这些要求:Should macOS App Group name start with `group.` or Development Team ID?

  

[App Group ID]必须由您的开发团队ID 组成,后跟一个句点,然后是您的开发团队选择的任意名称。例如:DG29478A379Q6483R9214.HolstFirstAppSuite

Apple来源:

https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple_ref/doc/uid/TP40011195-CH4-SW19

我在Xcode中将应用组名称切换为:$(TeamIdentifierPrefix)MyAppGroup

请注意,缺少".",它显然包含在$ Prefix中。如果您添加自己的".",则应用组将以".."

结尾