Most non-trivial apps end up needing three different kinds of values: a default baked into the binary, a server-side override for things like feature flags and experiment parameters, and a local override that lives in a debug menu so you can flip things on a device without rebuilding. The usual approach is to wire those three sources together by hand for every single config value, and it gets out of hand fast.
SwiftTweaks centralizes that pattern. The basic idea is that every
configurable value in your app is a ConfigItem that resolves through three
layers in order:
Production code just reads one typed, observable value. It doesn’t care
where the answer came from. UI updates automatically when any layer
changes, since the underlying storage is @Observable.
Tweaks themselves are typed and addressable by a (table, section, row)
coordinate, and they persist across launches. The library supports the
obvious types: toggles, freeform text/numbers, selection menus, tristate
booleans. You drop a TweakViewController into your debug menu and get a
fully built-out tweak panel without writing any UI.
It’s built on SwiftAsyncEx and the new Observation
framework, so there’s no Combine in the way; just plain @Observable
boxes you can read directly.