FlipTheSwitch 1.0.3

FlipTheSwitch 1.0.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2017年2月

Michael EnglandRob Siwek 维护。



  • Michael England 和 Rob Siwek

Objective C 的功能切换/切换/翻转库。

flip_the_switch Code Climate Code Climate Gem Version

一个用于生成 Features.plist & FTSFlipTheSwitch+Features.{h,m} 类别的 gem 命令行工具,以便于处理相应的 Pod。

问题

我们有一个正在开发的新功能 AmazingFeature,我们在分支内部构建了它。现在是我们最终合并的时间。然后我们花了整整一天的时间,因为 MyApp.xcodeproj/project.pbxproj 文件有很多冲突的改变,在我们错误地得到正确的结果之前,我们犯了许多错误。由于多个人在此分支上工作,所以我们无法经常 rebase,因此我们还需要定期合并来自团队其他部分的全部更改,不断失去我们的目标。我们终于全部合并了,然后……所有的东西都崩溃了

为了避免所有这些不断的合并/重新建立/上下文切换,我们始终把我们的代码放在 master 分支,但我们不想在下一发布周期中影响其他团队发布 QuickerFeature 时影响整个团队。

我们如何在构建 AmazingFeature 时不担心破坏其他功能的同时,还能获得在 master 分支工作的好处呢?

介绍 FlipTheSwitch

自动生成的文件

使用 'FTSFlipTheSwitch',我们可以在运行时选择不同的代码路径

self.newFeatureButton.hidden = [[FTSFlipTheSwitch sharedInstance] isFeatureEnabled:@"new_feature"];

功能可以在运行时启用/禁用

[[FTSFlipTheSwitch sharedInstance] enableFeature:@"new_feature"];
[[FTSFlipTheSwitch sharedInstance] disableFeature:@"new_feature"];
[[FTSFlipTheSwitch sharedInstance] setFeature:@"new_feature" enabled:YES];

所有启用的功能都通过 NSUserDefaults 在应用程序加载之间持续存在。

功能可以通过 plist 文件 Features.plist 默认启用/禁用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>disabled_feature</key>
    <dict>
        <key>description</key>
        <string>is disabled description</string>
        <key>enabled</key>
        <false/>
    </dict>
    <key>enabled_feature</key>
    <dict>
        <key>enabled</key>
        <true/>
    </dict>
</dict>
</plist>

子功能

可以将子功能递归地添加到功能中。结果可能是一个 plist 文件,例如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>description</key>
        <string>is disabled description</string>
        <key>enabled</key>
        <false/>
        <key>subfeature</key>
        <dict>
            <key>enabled</key>
            <true/>
        </dict>
    </dict>
</plist>

配置界面

Screenshot of configuration screen

  • 显示所有功能、它们的描述文本和启用状态
  • 轻松开启和关闭功能
  • 将所有功能重置到 plist 文件中的原始设置(基于 json)

通知

当功能状态改变时,您可以监听名为 FTSFeatureStatusChangedNotification 的通知,它包含

  • FTSFeatureStatusChangedNotificationFeatureKey - 正在被启用或禁用的功能的键
  • FTSFeatureStatusChangedNotificationEnabledKey - 功能启用或禁用的 NSNumber

平台支持

  • iOS
    • 示例项目
    • 完整的测试覆盖率
    • 配置界面
  • Mac OS X
    • 示例项目
    • 完整的测试覆盖率

命令行界面

如果您安装了 gem,您将能够使用命令行界面。

CLI 包含 3 个命令

  • plist - 创建一个 Features.plist 文件,其中包括启用/禁用功能和它们的描述(可选),如下所述。
  • settings - 创建一个由 OS 设置使用的 Settings.bundle。这些可以在运行时启用/禁用功能。
  • category - 创建为功能创建 FTSFlipTheSwitch+Features.{h,m} 文件,从而在添加/删除新功能时进行编译时检查。例如
/* AUTO-GENERATED. DO NOT ALTER */
#import <FlipTheSwitch/FTSFlipTheSwitch.h>

@interface FTSFlipTheSwitch (Features)

+ (BOOL)isAwesomeFeatureEnabled;
+ (void)enableAwesomeFeature;
+ (void)disableAwesomeFeature;
+ (void)setAwesomeFeatureEnabled:(BOOL)enabled;
+ (void)resetAwesomeFeatureController;
+ (NSString *)awesomeFeatureControllerKey;

@end

定义功能和子功能

功能和子功能及其默认启用/禁用状态从 features.json 文件中读取。例如:

{
    "default": {
        "awesome_feature": {
            "enabled": true,    
            "description": "Makes this project awesome",
            "sub_feature": {
                "enabled": true,
                "description": "Makes this project even more awesome"       
            }
        }
    },
    "beta": {
        "inherits_from": "default",
        "awesome_feature": {
            "enabled": false
        }
    }
}    

为了避免每次都输入相同的选择,您可以为默认选项创建一个 .flip.yml 文件,例如:

input: features
environment: development
category_output: Classes/Extensions

有关更多信息,请运行 flip-the-switch help

如何安装

pod 'FlipTheSwitch' 添加到您的 Podfile

gem 'flip_the_switch' 添加到您的 Gemfile

作者

许可

FlipTheSwitch 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。