Charcoal, 38 bytes
XF³²«F…·±ιιF…·±ιι«Jκλ›⁼№KMX¹⁼KKX»UMKAX
Try it online! Link is to verbose version of code. According to my comment on the Sandbox post I can do this in 37 bytes but unfortunately my computer rebooted to install updates and I didn't save my solution. Explanation:
X
Output the central X
.
F³²«
Grow the snowflake 31 times. (The first loop has no effect since it only checks one square.)
F…·±ιιF…·±ιι«
Check a larger square each time. (This is golfier than hardcoding the size.)
Jκλ
Jump to each position in the square.
›⁼№KMX¹⁼KKX
If the cell does not yet have an X
but it has one neighbouring X
then print a -
.
»UMKAX
After checking the square, change all the -
s to X
s.