3

有点被这件事难住了。我正在开发一个需要通过 NSUserDefaults 与其容器应用程序通信的 Xcode 扩展。为此,您需要在扩展程序和容器应用程序中设置应用程序组权利,签署您的应用程序,然后像这样初始化默认值...

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

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

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

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

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

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

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

4

1 回答 1

3

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

这似乎在大多数情况下都有效。但随后某些 App Group 功能突然停止工作,或者可能一直没有工作。

一项小研究发现了我以前不知道的特定于 Mac 的应用程序组命名要求:macOS 应用程序组名称应该以 `group.` 开头还是开发团队 ID 开头?

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

苹果来源:

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

我将我的 App Group 名称切换为:$(TeamIdentifierPrefix)MyAppGroup在 Xcode 中。

请注意缺少".",它显然包含在 $Prefix 中。如果您添加自己"."的 App Group 最终会得到".."

于 2018-10-15T22:03:55.840 回答