FeatureToggles(特性开关)

一种适用于 Swift 程序员的全新特性开关方法。

概述

特性开关,也称为“特性标志”,是一种工具,可以使开发团队在主线上进行协作,而无需在发布版本中公开半成品特性。

FeatureToggles 包提供了一种以去中心化方式声明开关的机制。 这些开关可以在 RELEASE 构建中保持关闭状态,从而保持主分支的可部署性。 但是,您可以在其他环境中启用它们,以便开发人员和测试人员可以访问它们。

优势

与其他管理开关的解决方案相比,FeatureToggles 具有以下几个优势。

用法

首先,声明一个 FeatureToggleKey。您可以扩展现有的数据结构

extension TeleportView: FeatureToggleKey, ReleaseDisabled, DebugEnabled {}

或者创建一个全新的实体

enum TeleportFeatureToggle: FeatureToggleKey, ReleaseDisabled, DebugEnabled {}

注意

ReleaseEnabledReleaseDisabledDebugEnabledDebugDisabled 指示默认的开关行为。 有四种可能的组合

  1. ReleaseDisabledDebugDisabled
  2. ReleaseDisabledDebugEnabled
  3. ReleaseEnabledDebugDisabled
  4. ReleaseEnabledDebugEnabled

然后,为您的新键添加一个 getter。

extension FeatureToggleValues {
  var teleport: Bool { self[TeleportView.self] }
}

最后,每当您希望访问开关的当前状态时,都使用 @FeatureToggle 属性包装器。

struct ContentView: View {
  @FeatureToggle(\.teleport) var isTeleportButtonEnabled

  var body: some View {
    VStack {
      Text("Welcome to our app")
        .font(.title)

      if isTeleportButtonEnabled {
        TeleportView()
      }
    }
  }
}

通过 URL 覆盖编译时默认值

您的应用程序可以使用特殊格式的 URL 覆盖编译时默认值。

首先,将 featureToggleIdentifier 添加到您的键

extension TeleportView: FeatureToggleKey, ReleaseDisabled, DebugEnabled {
  static let featureToggleIdentifier = "teleport"
}

然后,当应用程序委托打开 URL 时,调用 FeatureToggleValues.override(withValuesFrom:)。 在 iOS 应用程序中,它看起来像这样

public func application(
  _: UIApplication,
  open url: URL,
  options _: [UIApplication.OpenURLOptionsKey: Any] = [:]
) -> Bool {
  FeatureToggleValues.override(withValuesFrom: url)
}

如果您的应用程序的自定义 URL 是 myapp,则即使在具有禁用编译时开关的 RELEASE 版本中,此链接也会启用该功能

myapp://toggle?id=teleport&value=true

许可证

该库根据 MIT 许可证发布。 有关详细信息,请参见 LICENSE