我正在开发一个由插件和主应用程序组成的 macOS 应用程序。我希望两个目标能够共享相同的设置。我想使用
Defaults
类来操作我的设置。
首先,我按以下方式扩展
UserDefaults
:
extension UserDefaults {
static let group = UserDefaults(suiteName: "the same as app group????")
}
我随后创建了我的
Defaults
课程:
import SwiftUI
class Defaults: ObservableObject {
// Initial set of user settings
@AppStorage("some_value", store: .group) var someValue: Bool = false
}
然后我可以使用
方便地参考该类中的值和出价@StateObject var defaults = Defaults()
Puneet,在这个有用的答案中将
suiteName
定义为:
suiteName:是一种标识符,可帮助您创建首选项(UserDefaults)存储。通过使用特定的 suiteName,您正在创建一个首选项存储,该存储不受特定应用程序的限制(而标准 UserDefaults 对于每个应用程序都是不同的)。
有关实施应用程序组的文档建议使用
$(TeamIdentifierPrefix)com.example.mygroup
。
suiteName
和App Group字段中提供的字符串之间有什么关系?
给出产品大纲(macOS应用程序+插件),正确的实现是什么:
a)我应该使用相同的字符串作为应用程序组值和
suiteName
。
b)我应该以编程方式导出
$(TeamIdentifierPrefix)
的值并将其用作 suiteName
的值
c)
suiteName
的值应与跨应用程序组值键入的字符串不同。
您正在开发一个由主应用程序和插件组成的 macOS 应用程序。您希望两个目标共享相同的设置,并使用
Defaults
类进行操作,该类扩展了 UserDefaults
。
您已将
UserDefaults
扩展如下:
extension UserDefaults {
static let group = UserDefaults(suiteName: "the same as app group????")
}
并创建了一个
Defaults
类:
import SwiftUI
class Defaults: ObservableObject {
// Initial set of user settings
@AppStorage("some_value", store: .group) var someValue: Bool = false
}
然后您可以使用以下方法引用值和绑定:
@StateObject var defaults = Defaults()
您已为每个目标添加了应用程序组功能,如图所示。
suiteName
和App Group字段中提供的字符串之间有什么关系?
suiteName
中的UserDefaults(suiteName:)
应与您在目标功能中设置的应用程序组标识符相匹配。这允许应用程序的不同部分(或同一组中的不同应用程序)访问同一组首选项。
鉴于产品大纲(macOS 应用程序+插件),正确的实现是什么?
正确的实现是:
a) 您应该使用 相同的字符串 作为应用程序组值和
suiteName
。
原因如下:
group.com.yourcompany.yourappgroup
)定义了主应用程序和插件都可以访问的共享容器。suiteName
时使用与 UserDefaults
相同的标识符,您可以告诉您的应用程序使用共享容器来存储和检索首选项。正确的实现如下所示:
extension UserDefaults {
static let group = UserDefaults(suiteName: "group.com.yourcompany.yourappgroup")
}
其中
"group.com.yourcompany.yourappgroup"
是您在主应用程序和插件目标的应用程序组功能中输入的确切字符串。
当您在 Xcode 中设置应用程序组标识符时,通常会在应用程序组标识符中使用
$(TeamIdentifierPrefix)
。但是,当您实际在代码中使用它时,您应该使用完整的扩展字符串。
设置应用程序组功能后,您可以在 Apple 开发者帐户或 Xcode 中找到完整的应用程序组标识符。
确保您的主应用程序和插件都具有应用程序组权限并且属于同一组。
分发您的应用程序时,请确保在您的配置文件中正确设置应用程序组功能,并且主应用程序和插件均使用正确的团队和配置配置文件进行签名。
请记住处理共享
UserDefaults
可能不可用的情况(例如,如果应用程序组未正确设置)。在这种情况下,您可能需要回到标准UserDefaults
。