SF Symbols Variable Color — "Draw" symbols show no effect in Default mode

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?

SF Symbols Variable Color — "Draw" symbols show no effect in Default mode
 
 
Q