Symbol Effects Cause Crash When Switching Between Conditional `.fill` SF Symbols

I am reporting a consistent EXC_BAD_ACCESS (SIGSEGV) crash when using the .contentTransition(.symbolEffect(.replace.byLayer)) modifier on a conditional $SF$ Symbol, but only under very specific conditions:

  1. Both Symbols must be .fill variants (e.g., arrow.up.circle.fill $\leftrightarrow$ plus.circle.fill).
  2. The crash only occurs when the state changes and the view attempts to transition back to the original symbol (the one present when the view was first rendered).

For example, if the initial state displays arrow.up.circle.fill, the app successfully transitions to plus.circle.fill. However, the app crashes when the state changes again, attempting to transition from plus.circle.fill back to arrow.up.circle.fill.This crash is fully reproducible in the iOS Simulator and is not limited to Xcode Previews. Commenting out the .contentTransition modifier resolves the crash immediately.

The crash is a KERN_INVALID_ADDRESS at 0x0000000000000060, pointing to a null pointer dereference deep within the graphics rendering pipeline in the RenderBox framework. It appears to be a failure in handling the layer data during the reverse transition of two filled-variant symbols.

Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000060

Thread 0 Crashed:
0 RenderBox 0x1cc692a0c RB::Symbol::Glyph::Layer::resolve_draw_transforms(...) + 292
1 RenderBox 0x1cc692730 RB::Symbol::Glyph::Layer::append_path(...) + 392
...
7 SwiftUICore 0x1d9d5f824 specialized _ShapeStyle_RenderedShape.renderVectorGlyph(...) + 1444

The code below crashes on the second tap (transitioning back to arrow.up.circle.fill):

struct QuickAddButtonTest: View {
    @State private var isTextFieldFocused: Bool = false

    // Both symbols use the .fill variant
    var body: some View {
        Button(action: {
            isTextFieldFocused.toggle()
        }) {
            Image(systemName: isTextFieldFocused ? "arrow.up.circle.fill" : "plus.circle.fill")
                .foregroundColor(.primary)
                .font(.system(size: 30))
                .contentTransition(.symbolEffect(.replace.byLayer)) // <-- CRASH SOURCE
        }
    }
}

The crash can be avoided by:

  1. Removing the .contentTransition(.symbolEffect(.replace.byLayer)) modifier, or
  2. Switching one or both symbols to a non-filled variant (e.g., plus.circle instead of plus.circle.fill).
Symbol Effects Cause Crash When Switching Between Conditional &#96;.fill&#96; SF Symbols
 
 
Q