了解 suiteName 和 App Groups 之间的关系

问题描述 投票:0回答:1

背景

我正在开发一个由插件和主应用程序组成的 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()

应用程序组

然后我将为每个目标添加应用程序组功能: app Grpup

背景

Puneet,在这个有用的答案中将

suiteName
定义为:

suiteName:是一种标识符,可帮助您创建首选项(UserDefaults)存储。通过使用特定的 suiteName,您正在创建一个首选项存储,该存储不受特定应用程序的限制(而标准 UserDefaults 对于每个应用程序都是不同的)。

有关实施应用程序组的文档建议使用

$(TeamIdentifierPrefix)com.example.mygroup

问题

  1. suiteName
    和App Group字段中提供的字符串之间有什么关系?

  2. 给出产品大纲(macOS应用程序+插件),正确的实现是什么:

    a)我应该使用相同的字符串作为应用程序组值和

    suiteName

    b)我应该以编程方式导出

    $(TeamIdentifierPrefix)
    的值并将其用作
    suiteName

    的值

    c)

    suiteName
    的值应与跨应用程序组值键入的字符串不同。

swift xcode swiftui nsuserdefaults appgroups
1个回答
0
投票

使用应用程序组的 macOS 应用程序和插件的共享设置

背景

您正在开发一个由主应用程序和插件组成的 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()

应用程序组

您已为每个目标添加了应用程序组功能,如图所示。

问题与解答

  1. suiteName
    和App Group字段中提供的字符串之间有什么关系?

    suiteName
    中的
    UserDefaults(suiteName:)
    应与您在目标功能中设置的应用程序组标识符相匹配。这允许应用程序的不同部分(或同一组中的不同应用程序)访问同一组首选项。

  2. 鉴于产品大纲(macOS 应用程序+插件),正确的实现是什么?

    正确的实现是:

    a) 您应该使用 相同的字符串 作为应用程序组值和

    suiteName

    原因如下:

    • 您在目标功能中设置的应用程序组标识符(例如,
      group.com.yourcompany.yourappgroup
      )定义了主应用程序和插件都可以访问的共享容器。
    • 通过在初始化
      suiteName
      时使用与
      UserDefaults
      相同的标识符,您可以告诉您的应用程序使用共享容器来存储和检索首选项。

    正确的实现如下所示:

    extension UserDefaults {
        static let group = UserDefaults(suiteName: "group.com.yourcompany.yourappgroup")
    }
    

    其中

    "group.com.yourcompany.yourappgroup"
    是您在主应用程序和插件目标的应用程序组功能中输入的确切字符串。

补充说明

  1. 当您在 Xcode 中设置应用程序组标识符时,通常会在应用程序组标识符中使用

    $(TeamIdentifierPrefix)
    。但是,当您实际在代码中使用它时,您应该使用完整的扩展字符串。

  2. 设置应用程序组功能后,您可以在 Apple 开发者帐户或 Xcode 中找到完整的应用程序组标识符。

  3. 确保您的主应用程序和插件都具有应用程序组权限并且属于同一组。

  4. 分发您的应用程序时,请确保在您的配置文件中正确设置应用程序组功能,并且主应用程序和插件均使用正确的团队和配置配置文件进行签名。

  5. 请记住处理共享

    UserDefaults
    可能不可用的情况(例如,如果应用程序组未正确设置)。在这种情况下,您可能需要回到标准
    UserDefaults

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.