一种适用于 Swift 程序员的全新特性开关方法。
特性开关,也称为“特性标志”,是一种工具,可以使开发团队在主线上进行协作,而无需在发布版本中公开半成品特性。
FeatureToggles
包提供了一种以去中心化方式声明开关的机制。 这些开关可以在 RELEASE
构建中保持关闭状态,从而保持主分支的可部署性。 但是,您可以在其他环境中启用它们,以便开发人员和测试人员可以访问它们。
与其他管理开关的解决方案相比,FeatureToggles
具有以下几个优势。
environment
的启发,它允许您使用简单的 @FeatureToggle
注释的属性访问任何开关。DEBUG
还是 RELEASE
构建来启用或禁用特性,或者通过特殊格式的 URL 覆盖默认值。首先,声明一个 FeatureToggleKey
。您可以扩展现有的数据结构
extension TeleportView: FeatureToggleKey, ReleaseDisabled, DebugEnabled {}
或者创建一个全新的实体
enum TeleportFeatureToggle: FeatureToggleKey, ReleaseDisabled, DebugEnabled {}
注意
ReleaseEnabled
、ReleaseDisabled
、DebugEnabled
和 DebugDisabled
指示默认的开关行为。 有四种可能的组合
ReleaseDisabled
、DebugDisabled
ReleaseDisabled
、DebugEnabled
ReleaseEnabled
、DebugDisabled
ReleaseEnabled
、DebugEnabled
然后,为您的新键添加一个 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 覆盖编译时默认值。
首先,将 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。