SF Symbols offer a variety of pre-defined animations, with various parameters you can set. For the most part, the parameters for an animation are set in code by the app using them. But there are a few options you can set within the symbol itself which change how it animates. Additionally, McKinley lets you preview your symbol’s animation using any combination of the properties you’d normally set in code, and you can copy the code for that combination of properties and paste it straight into your app.
Show the Animation Preview palette via Window -> Show Animation Preview, or via the toolbar button.

Choose which of SF Symbols’ animations you want to preview with the “Animation” popup. The options below vary depending on the animation you have selected.
To preview an animation, once you have set up the options you want, hit Play. This will work in one of three ways:
The animation played back in this palette uses Apple’s real SF Symbols renderer (via SwiftUI). You can be sure that the animation will look the same way it looks in your app.
To help you write the code to make use of your symbol’s animation, you can use the {} button in the bottom right of the Animation Preview palette.

You can then copy some example code in your preferred UI framework. This code will load your symbol and set up the animation with the correct properties.
Replace is an animation by which one symbol may be swapped with another. In particular, this is useful for replacing a symbol with one of its own variants, such as a symbol with a slash or a badge adornment over it.

Pressing Play will run the replacement, toggling between the two symbols (your current variant and the one you specified in the menu).
The Style menu lets you choose one of multiple replace styles: Down-Up, Up-Up, Off-Up, or Magic Replace. The latter is special:
Apple defines Magic Replace as a smart transition between two symbols with related shapes. Slashes can draw on and off, and badges can appear, disappear, or be replaced independently of the base symbol. In addition, Magic Replace can transition a symbol’s enclosure, and it automatically performs Draw animations if the data exists.
Note that McKinley does not currently support custom Draw animations. McKinley provides Draw data for slashes, but nothing else. This will be improved in a future version.
If SF Symbols cannot perform a Magic Replace, it will fall back to a regular replace animation.
Many animations have a “Layers” setting. This lets you pick between “Whole Symbol” and “By Layer”. It is for setting whether you want the motion of the animation to affect the whole symbol at once, or if you want individual parts of it to be animated with a slight offset, producing a pleasing effect.
Note that the word Layer here is referring to SF Symbols’ concept of a layer, not to McKinley layers. For the most part, McKinley exports every shape onto its own SF Symbols layer. So with a “By Layer” animation, every shape would animate separately.
What if you want certain objects to be exported on the same SF Symbol layer, so they’ll animate together?


Any of these options lets you make multiple objects animate together when using “By Layer” animation. If you only want to affect animation, the best way is to use Animate children together on the McKinley layer. However it’s useful to know all the techniques available to you.

For Pulse and Rotate animations, you can choose which objects ‘opt in’ to the effect, in the Animation inspector. Only the objects with the relevant checkbox ticked will opt in. This is useful if, for example, you are making the symbol of a blowing fan, where you want the fan blades to rotate and the fan housing to stay static.
If you have a group with Override children’s colour mode turned on, then the setting is available on the group, and not on individual objects within the group.
For the “Variable Rendering step” option, see the section on Variable Rendering below.

For the “Variable Rendering” options, see the “Variable Rendering” section below.
For a Draw (on or off) animation, the Order setting controls whether the front item is drawn first or the back item is drawn first.
Note that McKinley does not fully support configuring Draw animations yet. This is coming in a future version. (See Limitations.)
For a Wiggle animation, this setting controls the default direction in which your symbol wiggles.
The direction can be overridden in code when using your symbol (for example by specifying .wiggle.up or .wiggle.custom(angle:)); this setting is what is used if the code does not specify a wiggle direction.
For a Rotate animation, this setting controls the default direction in which your symbol rotates.
The direction can be overridden in code when using your symbol (for example by specifying .rotate.counterClockwise); this setting is what is used if the code does not specify a rotation direction.
Pressing “Set Rotation Anchor” will display a rotation anchor point on your canvas:

This Rotation Anchor can be dragged to where you want the centre of rotation to be. When a Rotate animation plays, all rotatable layers will rotate around this point.
You can adjust the Rotation Anchor separately per symbol weight. Open the Weights popover (with the button to the right of the Set Rotation Anchor in the inspector), and choose Linked/Independent to choose whether you are editing the position for just the current weight or for all weights.
Variable Rendering is where an SF Symbol takes a numeric percentage value, and adjusts the symbol based on that value. For example, a wifi symbol might display a different number of bars of signal strength, or a thermometer symbol might let you adjust the displayed temperature.
Variable rendering can be used within an animation (such as an indeterminate wifi status shown by animating the wifi bars), or as a fixed value.
McKinley does not support Variable Draw yet. It is coming in a future update. (See Limitations.)
Variable Draw, introduced in SF Symbols 7 and Xcode 26 (in 2025), is part of the “Draw” animation system. Draw animations only work in apps built for and running on iOS 26 or macOS 26 and above.
For Draw animations, the animation looks like your symbol (or part of it) is being ‘drawn’ with a pen when it appears or disappears. Variable Draw uses the same drawing infrastructure, but statically, to display a value. The variable rendering value is the percentage of the drawing that should be shown.
Variable Colour rendering takes a number of objects within your symbol, and colours them differently depending on the variable value. When used in an animation, items can either be dimmed (lower opacity) or hidden when the variable value is less than 100%. If you’re using a static Variable Value, then you can only dim the non-active items, you can’t hide them.

To set how your steps are arranged, use Inspector -> Animation -> Document -> Layout. Choose “Closed loop” if the steps form a complete shape whose start and end meet, such as a circular progress indicator: a repeating Variable Colour animation will then cycle round seamlessly. Choose “Open loop” if the steps run in a line, such as wifi bars.
To preview your variable rendering on the canvas, use the Inspector -> Document -> Appearance -> Variable Rendering preview settings. You can set the current variable value using the slider, and you can choose whether inactive layers should dim or hide. (Note that only “dimmed” is available when you’re statically rendering a Variable Value in your app; the “hide” option is only available in animations.)

