@kylemacomberi
iAccount based inUnited States
About this account
- Account based in
- United States
- Connected via
- United States App Store
Account-level information from X, not a live location or the device used for a specific post.
Co-founder & CEO @BitrigApp · Co-creator #SwiftUI at Apple
Los Altos, CA
Joined July 2009
- Tweets668
- Following134
- Followers5.6K
- Likes222
This will be our 25th major release of @BitrigApp in 25 weeks 🚀
Fede is a magician
nitter.cf/fedesanchez0/status/21…
Kyle Macomber retweeted
8 hours ago I got my hands on the iPhone Duo SDK. Learnt a lot! Made a few apps and now its out in Bitrig.
Go make something cool!!!
Kyle Macomber retweeted
ok my fingers are tired from DMs. go wild!!
downloads.bitrig.com/bitrig-…
When you have a team of iOS developers impatient for Xcode 27.1 beta to drop and armed with Astra and Fable, this is what happens...
Kyle Macomber retweeted
I found and enabled a half-finished iPhone Duo simulator in Xcode 27.2 🤯 it doesn't have Duo software yet, but we made a pre-release version of Bitrig (with the 3D model!) if you want to try it out
The gold standard fluid interactions on iOS are built using in-process client animations (like SwiftUI does it) and not render-server animations (like CoreAnimation does it). This is common knowledge inside of Apple’s UI framework and system experience teams.
A close inspection of iOS’s evolution reveals the gradual upgrading of system experiences written using render-server animations (that often disable user interaction) with ones using client animations (that are interruptible and interactive). The app switcher for iPhone X, the Dynamic Island, and Liquid Glass bars are prime examples of this trend.
The other thing that makes these experiences feel so fluid is their use of spring animations that preserve velocity, rather than Bézier curve easing functions. To get velocity preservation, you need to be able to interrupt a spring animation and retarget it or drive it with a gesture. That’s a lot easier to do when the animation is running in the same process as the event handling.
When we were first pitching SwiftUI, two of our go-to demos were a recreation of the iOS 9 navigation and Home Screen interactions which were fully interactive and interruptible, at a time when the actual implementations of those experiences in the OS disabled user interaction and ran server-side animations.
CoreAnimation is great and the framework does much more than animation. You can build a fine app using its server-side animations. But if your UI framework can’t do efficient main thread client animations, there’s a ceiling to the quality of the experience your app can provide.
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.
If you want to learn more about why you should be using spring animations, check out: developer.apple.com/videos/p…
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.
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.
The gold standard fluid interactions on iOS are built using in-process client animations (like SwiftUI does it) and not render-server animations (like CoreAnimation does it). This is common knowledge inside of Apple’s UI framework and system experience teams.
A close inspection of iOS’s evolution reveals the gradual upgrading of system experiences written using render-server animations (that often disable user interaction) with ones using client animations (that are interruptible and interactive). The app switcher for iPhone X, the Dynamic Island, and Liquid Glass bars are prime examples of this trend.
The other thing that makes these experiences feel so fluid is their use of spring animations that preserve velocity, rather than Bézier curve easing functions. To get velocity preservation, you need to be able to interrupt a spring animation and retarget it or drive it with a gesture. That’s a lot easier to do when the animation is running in the same process as the event handling.
When we were first pitching SwiftUI, two of our go-to demos were a recreation of the iOS 9 navigation and Home Screen interactions which were fully interactive and interruptible, at a time when the actual implementations of those experiences in the OS disabled user interaction and ran server-side animations.
CoreAnimation is great and the framework does much more than animation. You can build a fine app using its server-side animations. But if your UI framework can’t do efficient main thread client animations, there’s a ceiling to the quality of the experience your app can provide.
Kyle Macomber retweeted
By this logic, the fluid interactions on the iOS Home Screen aren’t native either (they run on a display link).
Core Animation is great at what it does. But there’s a reason many of the best interactions in the OS tick their animations in-process rather than handing them off to Core Animation, even when built with UIKit. How do you think UINavigationController drives its interruptible transitions? Or the morphing glass controls in the navigation bar?
These are advanced techniques, sure. But oversimplifying this stuff does a disservice to people trying to build great apps. “Technically dropped zero frames” and “feels fluid and alive” are not the same.
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.
On re-read last sentence is stronger than I intended. Client vs server animation is a perfectly valid design debate. It’s the claim that SwiftUI is not native BECAUSE it does client-side animations that I was trying to refute.
If you want to learn more about how SwiftUI animation works, and that in fact most of the time its animations run off the main thread, check out: developer.apple.com/videos/p…
Kyle Macomber retweeted
And I’d like to personally invite you to come walk that mile with us, since the UI frameworks team is hiring! You can even bring your own shoes! 👟 jobs.apple.com/en-us/details…
Until you've walked a mile in their shoes, it can be hard to appreciate why the teams at Apple are so conservative with the API surface they expose.
But look at the navigation bar in iOS 17. Now look at it on iPhone Duo on iOS 27. It was a massive multi-year effort that required rewriting nearly all of UINavigationBar and UINavigationController.
Do I wish SwiftUI was open source? Yes. But the folks on the UI framework team have good reason for operating the way they do.
Justin was my first manager at Apple. I joined for my internship the summer they shipped FaceTime and full-time the summer they shipped iMessage. What a time!
When I was thinking about leaving Apple to start @BitrigApp, he was one of my first calls.
We're so excited to announce our next judge for Bitrig Hacks... @jsmaria! Justin was co-founder and CTO of Future and was an early member of the iPhone team at Apple.
Register for a chance to join Bitrig Hacks: iPhone Duo Edition.
events.ycombinator.com/bitri…