GO Feature Flag - OpenFeature Swift 提供程序

CI codecov GitHub Release Join us on slack

此存储库包含官方的 Swift OpenFeature 提供程序,用于通过 GO Feature Flag 访问您的功能标志。

结合 OpenFeature SDK,您将能够在您的 iOS/tvOS/macOS 应用程序中评估您的功能标志。

有关 GO Feature Flag 中标志管理的文档,请参阅 GO Feature Flag 文档网站

功能

依赖项设置

Swift Package Manager

Package.swift 的依赖项部分添加

.package(url: "https://github.com/go-feature-flag/openfeature-swift-provider.git", from: "0.3.0")

并在目标依赖项部分添加

.product(name: "GOFeatureFlag", package: "openfeature-swift-provider"),  

Xcode 依赖项

您有两种选择,都从代码菜单中的“文件”>“添加包...”开始。

首先,确保您已将您的 GitHub 帐户添加为一个选项(+ > 添加源代码控制帐户...)。 您将需要创建一个具有 Xcode 界面中定义的权限的个人访问令牌

  1. 添加为远程存储库
    • 搜索 git@github.com:go-feature-flag/openfeature-swift-provider.git 并单击“添加包”
  2. 在本地克隆存储库
    • 使用您首选的方法在本地克隆
    • 使用“添加本地...”按钮选择本地文件夹

注意: 仅当您要更改 SDK 时,才建议使用选项 2。 您还需要手动添加相关的 OpenFeature SDK 依赖项。

开始使用

初始化提供程序

需要创建 GO Feature Flag 提供程序,然后将其设置在全局 OpenFeatureAPI 中。

创建 GoFeatureFlagProvider 唯一需要的选项是您的 GO Feature Flag relay-proxy 实例的 URL。

import GOFeatureFlag
import OpenFeature


let options = GoFeatureFlagProviderOptions(endpoint: "https://your_domain.io")
let provider = GoFeatureFlagProvider(options: options)

let evaluationContext = MutableContext(targetingKey: "myTargetingKey", structure: MutableStructure())
OpenFeatureAPI.shared.setProvider(provider: provider, initialContext: evaluationContext)

评估上下文是客户端指定 GO Feature Flag 用于评估功能标志的上下文数据的方式,它允许在标志上定义规则。

targetingKey 对于 GO Feature Flag 来说是强制性的,以便评估功能标志,它可以是用户 ID、会话 ID 或您认为适合在评估期间用作标识符的任何内容。

setProvider() 函数是同步的并立即返回,但这并不意味着提供程序已准备好使用。 必须首先由提供程序完成对 GO Feature Flag 后端的异步网络请求,以获取为您的应用程序配置的所有标志。 然后,提供程序将发出一个 READY 事件,指示您可以开始解析标志。

如果您希望等到提取完成后,您可以使用可用于等待提供程序准备就绪的 async/await 兼容 API

await OpenFeatureAPI.shared.setProviderAndWait(provider: provider)

更新评估上下文

在您使用应用程序期间,可能会出现需要更新 EvaluationContext 的情况。 例如,如果未登录的用户验证了自己,您可能必须更新评估上下文。

let ctx = MutableContext(targetingKey: "myNewTargetingKey", structure: MutableStructure())
OpenFeatureAPI.shared.setEvaluationContext(evaluationContext: ctx)

setEvaluationContext() 是一个与 setProvider() 类似的同步函数,并将基于这个新的 EvaluationContext 获取新版本的功能标志。

评估功能标志

客户端用于检索当前 EvaluationContext 的值。 例如,检索标志 "my-flag" 的布尔值

let client = OpenFeatureAPI.shared.getClient()
let result = client.getBooleanValue(key: "my-flag", defaultValue: false)

GO Feature Flag 支持所有 OpenFeature 支持的不同类型的功能标志,这意味着您可以直接使用所有访问器

// Bool
client.getBooleanValue(key: "my-flag", defaultValue: false)

// String
client.getStringValue(key: "my-flag", defaultValue: "default")

// Integer
client.getIntegerValue(key: "my-flag", defaultValue: 1)

// Double
client.getDoubleValue(key: "my-flag", defaultValue: 1.1)

// Object
client.getObjectValue(key: "my-flag", defaultValue: Value.structure(["key":Value.integer("1234")])

注意

如果您在 GO Feature Flag 中添加了一个新标志,预计在提供程序可以使用之前会有一些延迟。 从远程刷新缓存发生在全局 OpenFeatureAPI 中设置新的提供程序和/或评估上下文时,以及在轮询期间检测到配置更改时。

处理提供程序事件

设置提供程序或上下文时(通过 setEvaluationContext()setProvider(),可以触发一些事件以了解提供程序的状态。

要监听它们,您可以通过 OpenFeatureAPI 共享实例添加事件处理程序

OpenFeatureAPI.shared.observe().sink { event in
    if event == .error {
        // An error has been emitted
    }
}

现有的事件类型是