-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Nimbus Features
A feature, in Nimbus, is a configuration that outlines a set of properties that define the experimentable aspects of a feature. Each feature should be distinct, and standalone from other features.
Nimbus works by outlining available features in the nimbus.fml.yaml file. This file has three main sections:
-
about- identifying the client for Nimbus -
channels- outlining the available channels for building/setting defaults for -
include- outlining the various features to include in the file at build time
Feature files are found in the nimbus-features directory from the root of the repo. For ease of working & maintaining features, each feature should be placed in its own file. Each feature file is composed of several sections:
| Section | Optional | Description |
|---|---|---|
features |
No | Contains the feature in the file |
objects |
Yes | Outlines the custom objects for the specific feature |
enums |
Yes | Outlines the custom enums for the specific feature |
If objects or enums don't contain anything, they may be omitted from the file.
When creating a new feature, please use the fxios utility.
Some external documentation on Nimbus features can be found here. However, setting up a new feature in code is fairly simple, if these steps are followed.
- Use the iOSNimbusFeatureUtility to add a feature
- Add the feature to the feature spreadsheet (found in the Slack channel's documents tab)
- Implement a layer translating the feature from FxNimbus to what you need to use.
- Use the layer in the app appropriately.
The fxios CLI utility should be used for managing feature flags addition and removal, and is mostly self-documenting. To see your available options, try
$ fxios nimbus --help
For more info on the utility, check out the fxios repo
To edit a feature, open the respective feature's file in the nimbus-features directory, and proceed to edit the feature.
To edit a feature simply means to add or remove a variable, as well as adding or removing objects or enums as necessary.
One current drawback is that the build system knows if there's been a change to the nimbus.fml.yaml file, but doesn't know about changes in files found in the include block. If you make a change and update one of those file, to see these changes reflected in the generated FxNimbus.swift, you must clean and rebuild in Xcode.
Note: The top level feature name should not be changed unless working with a Nimbus engineer to make sure the old name is removed from the database, as this is currently a manual process. This only applies if editing a feature that is also present in the main branch. If you are working on a branch where you are adding a new feature and it has not yet been merged to main, feel free to change the feature name as much as you like.