适用于iOS & macOS的Switchboard
在Switchboard基础上为iOS和macOS构建的简单A/B测试和功能标志。
它做什么
Switchboard是一种简单的方法,即使在将 Mobile 应用发布给用户之后,也能远程控制您的应用,因此您可以使用 Switchboard 来
- 向用户发布新功能
- A/B 测试用户流程、消息、颜色和功能等
- 您想通过远程控制的其他任何内容
Switchboard让您以快速、简单且实用的方式控制您的应用程序中的内容。
此外,Switchboard会始终如一地细分您的用户;由于用户分割基于计算一次的UUID,因此您使用Switchboard切换开/关的经验始终一致。
它不做什么
Switchboard不会提供分析,也不会自动管理和优化您的 A/B 测试。它也不会提供美丽的图形等。您可以通过在每个应用中添加分析包来获得所有这些,您可能已经在这样做。
通过遵守SwitchboardAnalyticsProvider
协议,这提供了方便的钩子,而SwitchboardExperiment
和SwitchboardFeature
子类还有一个方便的track(event...)
方法,您可以调用它。有关更多详细信息,请参见示例应用程序。
安装
使用 CocoaPods 快速安装
pod 'Switchboard'
或者 Carthage
github "KeepSafe/Switchboard-iOS"
或 手动安装
使用示例
在项目文件中的 SwitchboardExample
目标中有一个示例应用,您可以运行并查看调试用户界面。这个调试界面在您想测试应用内的各种流程时很有用(例如,启用 featureA
并验证代码是否执行X,然后禁用 featureA
并验证代码是否执行Y),或者您想将自己放入一个特定的实验组中,看看其他用户会有什么样的体验。
示例还可能有助于向您展示我们的 Switchboard 设置建议,从而使您更容易将调试界面集成到自己的应用中。
一般信息及使用
注意:在这里我们将使用 示例应用 中的代码进行场景介绍。
实验与功能对比
一个 实验 至少包含一项 cohort
人群,因此将其视为我们暂时运行的 A/B 测试,以确定我们为实现收入目标等所需的最佳行为。如果其中某个实验成功,我们将删除该实验本身,并很可能将其代码添加到功能标志或更永久地添加到代码库中。
功能 正如其名:一个可以是启用或禁用的人的功能。我们可以创建功能标志来禁用某些功能(例如,如果我们给定功能中出现了很多崩溃),或者在不部署的情况下展示新的功能。
创建一个实验
在ExampleSwitchboard+Example
中向ExampleSwitchboardExperiment
添加一个新枚举情况,并包含实验的名字。
现在您可以进行如下操作
if ExampleSwitchboard.isIn(experiment: .myExperiment) { }
// Or
if ExampleSwitchboard.isNotIn(experiment: .myExperiment) {}
如果您要在values
字典内访问键或拥有其他需要用新实验妥善封装的复杂逻辑,可以创建一个SwitchboardExperiment
的子类。
现在您可以进行如下操作
// Note: you must cast to `MyExperiment` like shown below so it'll return the concrete type
let myExperiment: MyExperiment = ExampleSwitchboard.experiment(named: .myExperiment)
print(myExperiment.cohort)
print(myExperiment.values)
myExperiment.start()
myExperiment.complete()
// and there are lots of other helper properties and
// functions viewable in SwitchboardExperiment
// Or do custom things
myExperiment.doSomeCustomLogicThing()
myExperiment.track(event: "somethingGreat", properties: ["wow": "magic"])
// Or you can even add experiment dependencies which prevent your experiment
// from starting until the other experiments have been completed
myExperiment.add(dependency: someOtherExperiment)
如果您希望您的队列值在Switchboard调试视图中显示,您可以在您的SwitchboardExperiment
子类中重写availableCohorts
数组并提供队列字符串。这将允许您在调试模式中轻松地在队列之间切换并测试各种用户体验流程。
所有使用对SwitchboardExperiment
的namesMappedToCohorts
覆盖进行填充的实验都将会自动填充到预填充控制器中,以便可以在每次使用时明确添加,而不必每次都输入它们。只需在每个SwitchboardExperiment
子类中正常调用populateAvailableCohorts()
函数即可。
创建一个功能
在ExampleSwitchboard+Example
中的ExampleSwitchboardFeature
添加一个新枚举情况,并包含功能的名字。
现在您可以进行如下操作
if ExampleSwitchboard.isEnabled(feature: .myFeature) { }
// Or
if ExampleSwitchboard.isNotEnabled(feature: .myFeature) {}
如果您要在values
字典内访问键或拥有其他需要用新功能妥善封装的复杂逻辑,可以创建一个SwitchboardFeature
的子类。
现在您可以进行如下操作
let myFeature: MyFeature = ExampleSwitchboard.feature(named: .myFeature)
print(String(describing: myFeature.values))
// Or do custom things
myFeature.doSomeCustomLogicThing()
myFeature.track(event: "somethingGreat", properties: ["wow": "magic"])
缓存
Switchboard会将所有功能和实验及其最后的状态缓存到磁盘上,以便在会话之间使用。因此,当再次启动应用程序时,我们可以立即访问它们。
如果网络连接断开,我们将暂时使用缓存值,但其他情况下,我们将从服务器的最新配置中刷新它们。
如果您通过Switchboard调试视图(以下将描述)进行了更改,它将使用调试缓存。
调试
现在有一个开关板调试功能,您可以用来开启/关闭特性,以测试不同的用户体验流程(例如,如果在应用商店审核中,我会作为一个新的定价/广告实验的一部分会出现什么,等等)。
您还可以通过在给定实验的调试视图中开始/完成/重置实验来测试分析。
请注意,实验通常是互斥的,所以同时运行类型相同(例如,3个不同的定价实验)的多个实验可能是一个糟糕的想法,并可能导致您的代码中存在错误行为。在测试新的实验时,最好禁用其他实验。
调试菜单中的功能和实验的编辑是事务性的,因此只有在点击《保存》按钮后才会保存(例如,如果您按下开始实验,它不会开始直到保存)。
重要提示:通过开关板调试视图更改某些内容后,开关板将从该点开始仅使用调试缓存,并将跨启动持续保留更改。如果您想重置到服务器,按如下方式在主调试视图中拉动刷新
分析
群体:特性没有群体,但实验有。当有人特别跟踪实验上的事件时,群体会作为实验的一部分记录。
示例:假设我们在“testing123”实验中,然后有人调用“testing123.track(event: somethingAwesome)”,然后它会记录一个名为EXP_testing123_somethingAwesome
的事件,并且在该事件中会有一个您可以分段使用的《群体》属性。
授权:《sb::experiments_entitled》和《sb::features_entitled》用户属性数组合并在应用程序加载时下载开关板配置,并列出哪些实验和特性可以启动(例如,有人在一个实验中但还未开始,或者有人被启用一个特性)。
然后对于实验,当它们开始时会有一个名为EXP_someExperimentNameHere_ACTIVATE
的新事件,当它们完成实验时会有一个名为EXP_someExperimentNameHere_COMPLETED
的事件。请注意,实验只有在用户触发了开始它的用户体验流程中的点/配置时才会“开始”。
特性不会开始/完成。它们要么启用要么禁用,就是这样(例如,应用商店审核是启用或未启用)。
开始/完成:当发送实验的激活/完成事件时,每个都会附加一个《群体》属性,并且还会记录额外的用户属性。对于《激活》(开始)场景,它会记录一个包含所有已启动实验的sb::experiments_active
数组。对于《完成》场景,它会记录一个包含所有已完成实验的sb::experiments_completed
数组。
手动安装
- 克隆此仓库并将《Switchboard.xcodeproj》拖放到您应用程序的 Xcode 项目导航器中。
- 它应该嵌套在您应用程序蓝色项目图标下。它是否位于所有其他 Xcode 组上方或下方无关紧要。
- 在项目导航器中选择
Switchboard.xcodeproj
,并验证部署目标是否与应用程序目标一致。 - 在项目导航器中选择您的应用程序项目(蓝色项目图标),导航到目标配置窗口,然后在侧边栏的
Targets
标题下选择应用程序目标。 - 在该窗口的顶部标签栏中,打开
General
选项卡。 - 在
Embedded Binaries
部分的下方点击+
按钮添加。 - 搜索并选择 iOS 或 macOS 的最上层的
Switchboard.framework
。
就这样了!
系统会自动将 Switchboard.framework
添加为要依赖的目标,并作为链接框架和嵌入框架在复制文件构建阶段。这就是在模拟器和设备上构建所需的全部内容。
问题 & 错误
请使用 Github 问题追踪器告诉我们您可能遇到的问题。
许可证
Switchboard for iOS / macOS 遵循 Apache 软件许可证 2.0 ("Apache 2.0")
作者
Switchboard for iOS / macOS 由 Rob Phillips 和 Keepsafe 团队带来。我们很希望您能贡献或 加入我们。
在生产中使用
- Keepsafe (www.getkeepsafe.com)