此存储库包含官方的 Swift OpenFeature 提供程序,用于通过 GO Feature Flag 访问您的功能标志。
结合 OpenFeature SDK,您将能够在您的 iOS/tvOS/macOS 应用程序中评估您的功能标志。
有关 GO Feature Flag 中标志管理的文档,请参阅 GO Feature Flag 文档网站。
在 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"),
您有两种选择,都从代码菜单中的“文件”>“添加包...”开始。
首先,确保您已将您的 GitHub 帐户添加为一个选项(+ > 添加源代码控制帐户...)。 您将需要创建一个具有 Xcode 界面中定义的权限的个人访问令牌。
git@github.com:go-feature-flag/openfeature-swift-provider.git
并单击“添加包”注意: 仅当您要更改 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
}
}
.ready
:提供程序已准备就绪。.error
:提供程序出现错误。.configurationChanged
:GO Feature Flag 中的配置已更改。.PROVIDER_STALE
:提供程序没有最新版本的功能标志。.notReady
:提供程序尚未准备好评估功能标志。