Reversi 1.1.0

Reversi 1.1.0

Benoit Pasquier 维护。



Reversi 1.1.0

Reversi⚫️⚪️

Platform Language CI Status Version Platform Carthage compatible License

Reversi⚫️⚪️是使用 Swift 编写的 A/B 测试框架。

关于其动机在我博客上了解更多 阅读更多

内容

为什么选择 Reversi?

  • 功能标志和 A/B 测试工具是为产品营销人员和经理设计的,却忘记了它们应该是 开发者友好 的。添加 A/B 测试或功能标志应该像设置任何属性一样简单。
  • 选择你的服务,保留你的数据。Reversi 不处理数据,它应该被设计得既能与捆绑文件一起工作,也能与远程服务一起工作。您只需在启动时注入配置,Reversi 将在何时运行 UI 变体时进行处理。

Reversi for Apptimze 的更多介绍

Firebase

Reversi之前的Firebase

var welcomeMessage = remoteConfig[welcomeMessageConfigKey].stringValue

Reversi之后的Firebase

var welcomeMessage = "Welcome"
welcomeMessage.addVariation(welcomeMessageConfigKey, for: String.self) { welcomeMessage, newText in
    welcomeMessage = newText
}

了解如何在Firebase上实施Reversi的更多信息,请参阅Reversi for Firebase

Optimizely

Reversi之前的Optimizely

// Activate an A/B test
let variation = client?.activate("app_redesign", userId:"12122")
if (variation?.variationKey == "control") {
    // Execute code for "control" variation
    myObject.variantControl()
} else if (variation?.variationKey == "treatment") {
    // Execute code for "treatment" variation
    myObject.variantTreatment()
} else {
    // Execute code for users who don't qualify for the experiment
    myObject.defaultVariant()
}

Reversi之后的Optimizely

// Activate an A/B test
myObject.defaultVariant()
myObject
    .addVariation("app_redesign", for: Void.self, options: ["variable_key": "control"]) { myObject, _ in
        myObject.variantControl()
    }
    .addVariation("app_redesign", for: Void.self, options: ["variable_key": "treatment"]) { myObject, _ in
        myObject.variantControl()
    }

了解如何在Firebase上实施Reversi的更多信息,请参阅Reversi for Firebase

它是如何工作的?

Reversi包括多种变体,仅执行正在运行的实验中包含的变体。它设计了一个唯一的标识符来标识该实验。

// feed your configuration to the service from local json or remote service
ReversiService.shared.configure(with: configuration)

label.text = "Hello World"
label.font = UIFont.boldSystemFont(ofSize: 15)
label.textColor = .darkGray

// block will be executed only if "text_variation" experiment is up and running
label.addVariation("text_variation", for: String.self) { label, value in
    label.text = value // "Hello Variation World"
}

用途

变体的数量和访问没有限制

label
    label.addVariation("text_variation", for: String.self) { label, value in
        label.text = variationText
    }
    .addFeatureFlag("font_variation") { label in
        label.font = UIFont.boldSystemFont(ofSize: 14)
    }

// button color
button.addFeatureFlag("button_variation") { button in
    button.backgroundColor = .orange
}

// combined elements
self.addFeatureFlag("combined_variation") { viewController in
    viewController.label.textColor = .lightGray
    viewController.button.setTitleColor(.lightGray, for: .normal)
}

由于每个实验直接影响到UI元素,变体仅在主线程上执行。

安装

Cocoapods

Reversi可以通过CocoaPods获取。要安装它,请将以下行添加到您的Podfile中

pod 'Reversi'

Carthage

Reversi 也可以通过 Carthage 获得。

github 'popei69/Reversi' ~> 1.0

示例

要运行示例项目,请先克隆仓储,并从 Example 目录运行 pod install

项目状态

  • 为捆绑实验创建配置文件
  • 支持值的变异:空值、布尔值、整数值、字符串。
  • 支持远程配置:Apptimize、Firebase、Optimizely。
  • 稳定性单元测试。
  • 支持实验影响的用户数量。

作者

Benoit Pasquier,[email protected]

贡献

该项目仍在探索中。我很乐意接受任何建议和改进的工单。

许可

Reversi 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。