测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Dallas Johnson 维护。
此库为 Swift 和 Objective C 项目的功能配置/开关提供类型安全且可配置的解决方案,适用于生产和开发环境。
这一解决方案源于处理大型史诗分支的痛苦,这些分支不仅与 Master 分支越来越远,而且还运行在其他即将合并或发布的并行史诗分支中。如果能有一个稳健且可靠的隐藏功能的方法,该方法可以通过服务器在生产环境中或通过开发者和 QA 工程师在发布之前进行本地切换,那就很好了。
我所看到的其他解决方案需要“字符串类型的”开关和服务器协调,然后将它们转换为目标类型以填充功能。典型情况下,会有人说“在 UAT 服务器上登录为用户 X,并启用功能 Y。”这种切换会比想要隐藏的代码更脆弱。这里的目的是减少自定义环境依赖,并使开发人员或测试人员能够在对他们来说更控制的环境中工作。
特征配置是通过以下 4 个控制级别进行控制的,按优先级顺序列出。
通过存储在应用 Bundle 中的本地 plist 文件来**重写特征配置**。这最适合在个人应用沙盒中工作以开发单个功能的开发人员,或 QA 工程师在发布之前测试静默部署的功能以查找可能的副作用回归错误。Plist 文件**仅应包含在开发构建中,或由测试人员使用。
**内存中的功能配置**这些可以在应用启动时或用户登录时配置,以提供运行时特定的功能或 A/B 测试。内存设置将被填充为一个字典,其中包含有关特征配置的详细信息,应与特征Config名称匹配的键(例如,`callToActionPurchaseText`)。然后,可以使用 `persistInMemorySettings()` 将这些持久化到UserDefaults中,以便在未来离线使用。
使用UserDefaults进行设备上的持久化存储**持久化特征配置**。网络可能无法永久可用,但您的应用可能具有离线功能,应该在用户上次运行的相同方式下工作。
默认设置 每个功能配置在声明时都应该有一个默认值。这应该有一个初始值,以确保如果没有设置上面的任何一项,仍然有一个合理的默认值,从而使应用仍然可以安全地运行。
SwiftFeatureConfigs
创建一个子类。这是一个 NSObject
,以便在使用 Objective-C 代码库的同时也能使用 Swift。import SwiftFeatureConfigs
class MyFeatureConfigs: SwiftFeatureConfigs {
// Using as a singleton may simplify use thoughout the app...
// if you don't mind using singletons
static var sharedInstance: MyFeatureConfigs = MyFeatureConfigs()
var someFeatureEnabled: Bool {
return config(defaultValue: true, persistableOnDevice: true)
}
var numberOfItemsToDisplay: Int {
return config(defaultValue: 12)
}
var mainViewTitle: String {
return config(defaultValue: "SampleTitle", persistableOnDevice: false)
}
}
关键函数是每个计算属性中的 config
函数。
open func config<T>(_ key: String = #function, defaultValue: T, persistableOnDevice: Bool = true) -> T {
从这个函数中,将检索一个类型安全值,如上所述。键是从包含的变量/函数中派生的,并用作在 覆盖功能配置 plist、内存中的配置 或 用户默认设置 中搜索的键。
默认情况下,SwiftFeatureConfigs
将寻找一个以当前子类命名的、扩展名为 “.plist” 的 plist 文件。例如,在主 bundle 中的 MyFeatureConfigs.plist
。这可以通过为子类实例的初始化器提供另一个 URL 来替代。
static var sharedInstance: MyFeatureConfigs = MyFeatureConfigs(customOverrideoURL)
内存中的配置 可以从您选择的数据源(可能作为用户登录响应的一部分的您的服务器)加载数据,并且应该使用变量名称简单地键入。
let setting = [ "someFeatureEnabled" : true,
"numberOfItemsToDisplay" : 15,
"mainViewTitle": "SomeTitleToDisplay"
]
MyFeatureConfigs.sharedInstance.loadInMemoryFeatures(settings)
如果应使配置可供将来离线使用,请确保使用以下方法进行持久化。
MyFeatureConfigs.sharedInstance.persist()
(标记为 persistableOnDevice
的配置将在 false
的情况下被排除出持久化。
可以使用以下方法清除内存中的配置。
MyFeatureConfigs.sharedInstance.clearInMemoryConfigs()
可以使用以下方法清除已持久化的配置。
MyFeatureConfigs.sharedInstance.clearPersistedConfigs()
要运行示例项目,请首先克隆存储库,并从 Example 目录运行 pod install
。
Swift 3+ 以及 Objective-C 在 iOS 上。
SwiftFeatureConfigs 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 文件中。
pod "SwiftFeatureConfigs"
Dallas Johnson,[email protected]
SwiftFeatureConfigs 在 MIT 许可协议下可用。有关更多信息,请参阅 LICENSE 文件。