Skip to content

Toggles is an elegant and powerful solution to feature flagging for Apple platforms.

License

Notifications You must be signed in to change notification settings

TogglesPlatform/Toggles

Repository files navigation

Toggles

Toggles is an elegant and powerful solution to feature flagging for Apple platforms.

Toggles CI status TogglesDemo CI status ToggleGen CI status ToggleCipher CI status JustTweakMigrator CI status

Overview

Feature flags (or feature toggles) are an important capability in modern applications. They allow apps to support different code paths and multiple features. Remote configuration of feature flags is what enables changing the behaviour of apps and the enabling/disabling of features without the need for expensive releases. Feature flags are at the core of A/B testing and experimentation.

Usage

Here is a quick and basic usage example.

Define a local datasource with your base configuration in DefaultDatasource.json.

{
  "toggles": [
    {
      "variable": "enable_feature_x",
      "bool": true
    },
    {
      "variable": "retry_count",
      "int": 3
    },
    {
      "variable": "welcome_text",
      "string": "Greetings!"
    }
    ...
}

Allocate a manager to interface with the configuration.

let datasourceUrl = Bundle.main.url(forResource: "DefaultDatasource", withExtension: "json")!
try ToggleManager(valueProviders: [], datasourceUrl: datasourceUrl)

Optionally set a mutable value provider and multiple value providers needed for you use case:

let mutableValueProvider = PersistentValueProvider(userDefaults: .standard)
let remoteValueProvider = SomeRemoteValueProvider(...)
let localValueProvider = try LocalValueProvider(jsonUrl: secondaryDatasourceUrl)
let valueProviders = [remoteValueProvider, localValueProvider]
try ToggleManager(mutableValueProvider: mutableValueProvider,
                  valueProviders: valueProviders,
                  datasourceUrl: datasourceUrl)

Retrieve values like so:

let shouldEnableFeatureX = manager.value(for: "enable_feature_x").boolValue
let welcomeText = manager.value(for: "welcome_text").stringValue

There's a lot more to it: from code generation to observing toggle value changes.

Please refer to the DocC documentation and articles provided for more information.

Demo app

A demo app showcasing all the features is available and we encourage the reader to play with it.

Toggles view in Demo app

License

Toggles is released under the Apache 2 license. See LICENSE for details.

About

Toggles is an elegant and powerful solution to feature flagging for Apple platforms.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages