I've noticed an inconsistency between how the SF Symbols app and SwiftUI code handle variable color for symbols that use the "Draw" animation mode.
Background
SF Symbols that support variable color fall into two categories based on their animation preference:
- Symbols suited for
.symbolVariableValueMode(.color)— layers are highlighted/dimmed by color opacity - Symbols suited for
.symbolVariableValueMode(.draw)— layers are progressively drawn/erased
When .symbolVariableValueMode is not set (i.e., the default mode), I expected the system to automatically choose the appropriate mode for each symbol.
What SF Symbols app shows
In the SF Symbols app, selecting thermometer.high, enabling variable color, and setting the value to 0.5 with "Default" mode selected produces a correct and expected result — the symbol renders identically to the explicit "Draw" mode.
What SwiftUI code does
In code, when symbolVariableValueMode is not specified (default), symbols from the "Draw" category receive no visual effect — they appear static, as if variable value is ignored entirely.
// This works correctly
Image(systemName: "thermometer.high")
.symbolVariableValue(0.5)
.symbolVariableValueMode(.draw)
// This shows NO effect — expected to fall back to .draw, but doesn't
Image(systemName: "thermometer.high")
.symbolVariableValue(0.5)
// no .symbolVariableValueMode set
Symbols in the "Color" category appear unaffected — they render correctly with or without an explicit mode.
Question / Bug?
Is this a known limitation, or is the default mode in code intentionally different from what the SF Symbols app previews? If so, is there a programmatic way to query which symbolVariableValueMode a given symbol prefers at runtime, so I can set it explicitly without hardcoding per-symbol logic?