SwiftUI isn’t native and here’s why SwiftUI apps may sometimes feel janky. It ditches the key element that made animations run so smoothly on iOS since the original iPhone: Core Animation.
In SwiftUI animations run in-app without CA backing. Block the main thread: SwiftUI ball stalls while UIKit’s keeps moving on the render server.
Sep 15, 2026 · 10:15 PM UTC
On the other hand, in React Native you absolutely can rely on the marvel of Core Animation-backed animations nitter.cf/O_Pawica/status/209949…
It’s easier to develop a high-performance native app in React Native.
SwiftUI has limited functionality, poor layout and animation performance, and DX is mid at best. It’s been discouraging to see it barely improve since released 7 years ago!
In the vast majority of SwiftUI that I’ve written, this has rarely ever been an issue. I would rather keep the ergonomics of SwiftUI and than decide I need yet another abstraction layer for the rare instances when a user may see an animation hitch. Or wrap it in a representable.
You might be animating incorrectly in SwiftUI... nitter.cf/cifilter/status/210024…
I’d love to see the source code for this, because I have a feeling you are using a SwiftUI anti-pattern for updating state rather than SwiftUI being bad.
Open to feedback nitter.cf/kzzzf/status/210025847…
Stripped down the code to minimum if you’d like to take a look (it uses scale here to save a few lines of code but the effect is the same) gist.github.com/kmagiera/349…
Fun fact: the creator of CoreAnimation is one of the creators of SwiftUI!
The decision to run animations in the app process rather than the render server (as CoreAnimation does) was one of the earliest and most fundamental decisions we made when designing SwiftUI.
Some of the most distinctive experiences of using an iPhone, like UIScrollView rubber banding and SpringBoard app switching are only possible as client-side animations.
But these experiences aren’t easy to build with UIKit!
This is because if you want a UI to be fully interactive and interruptible by the user while it’s animating, it has to be running in the same process as the event handling.
In fact, in iOS 18 we added new APIs to AppKit and UIKit to adopt the SwiftUI client-side animation model.
There are a lot of valid critiques of SwiftUI. The fact that SwiftUI doesn’t use CoreAnimation for its animations is not one of them.
Michael Waitze@MichaelWaitze
Sep 16Thailand
ThailandConnected via Japan App StoreAccount-level information, not a live location or per-post device.
The technical distinction between in-app animations and the render server is a huge part of this debate. We actually went deeper on this here: nitter.cf/AGTPinsights/status/21…
SwiftUI just got called out today for how it handles animations. Here's what you need to know.
Developer Krzysztof Magiera posted a demo showing that SwiftUI isn't fully native, because it ditches Core Animation, the system that's kept iOS animations smooth since the original iPhone.
In SwiftUI, animations run inside the app process itself, without Core Animation backing them. That means if you block the main thread, a SwiftUI animation stalls, while a UIKit animation, which runs on a separate render server, keeps moving.
Kyle Macomber, who helped design SwiftUI and also helped create Core Animation, confirmed it was a deliberate choice, made early on, to run animations in-app rather than on the render server. Jacob Xiao, another SwiftUI co-creator who spent 3 years on UIKit first, said solving this exact problem was his top goal.
The post sparked a big native vs cross-platform debate, with some devs noting React Native's Reanimated library already leans on Core Animation-backed animations, and that react-native-screens still relies on UIKit under the hood.
Key numbers:
- Original post by @kzzzf: 40.2K views, posted 5:15 AM Sep 16, 2026
- SwiftUI has been out for 7 years
- Macomber's reply thread: 3.9K views
Apple hasn't issued an official response as of this writing.
Matej Knopp@MatejKnopp
Sep 16Czech Republic
Czech RepublicConnected via Slovakia App StoreAccount-level information, not a live location or per-post device.
Yeah, no, this is kinda bullshit. Everything that needs event input or layout changes (including scrolling) has always run on main thread and is subject of main thread stalls. The example works for very simple canned animations that have been mostly irrelevant since iOS 7.