开关 (Toggles)

开关 (Toggles) 是一个优雅且强大的解决方案,用于 Apple 平台上的特性标志 (feature flagging)。

Toggles CI status TogglesDemo CI status ToggleGen CI status ToggleCipher CI status JustTweakMigrator CI status

概述

特性标志(或特性开关)是现代应用程序中的一项重要功能。它们允许应用程序支持不同的代码路径和多个特性。特性标志的远程配置使得无需昂贵的发布即可更改应用程序的行为以及启用/禁用特性。特性标志是 A/B 测试和实验的核心。

使用方法

这是一个快速且基本的使用示例。

DefaultDatasource.json 中定义一个带有基础配置的本地数据源。

{
  "toggles": [
    {
      "variable": "enable_feature_x",
      "bool": true
    },
    {
      "variable": "retry_count",
      "int": 3
    },
    {
      "variable": "welcome_text",
      "string": "Greetings!"
    }
    ...
}

分配一个管理器来与配置进行交互。

let datasourceUrl = Bundle.main.url(forResource: "DefaultDatasource", withExtension: "json")!
try ToggleManager(valueProviders: [], datasourceUrl: datasourceUrl)

可选地,设置一个可变值提供者和多个满足您用例所需的值提供者。

let mutableValueProvider = PersistentValueProvider(userDefaults: .standard)
let remoteValueProvider = SomeRemoteValueProvider(...)
let localValueProvider = try LocalValueProvider(jsonUrl: secondaryDatasourceUrl)
let valueProviders = [remoteValueProvider, localValueProvider]
try ToggleManager(mutableValueProvider: mutableValueProvider,
                  valueProviders: valueProviders,
                  datasourceUrl: datasourceUrl)

像这样检索值

let shouldEnableFeatureX = manager.value(for: "enable_feature_x").boolValue
let welcomeText = manager.value(for: "welcome_text").stringValue

还有很多其他功能:从代码生成到观察开关值的变化。

请参阅 DocC 文档和提供的文章以获取更多信息。

演示应用

提供了一个演示应用程序来展示所有特性,我们鼓励读者使用它。

Toggles view in Demo app

许可协议

Toggles 在 Apache 2 许可下发布。有关详细信息,请参阅 LICENSE