@kylemacomber

Co-founder & CEO @BitrigApp · Co-creator #SwiftUI at Apple

Los Altos, CA
Joined July 2009
This will be our 25th major release of @BitrigApp in 25 weeks 🚀
Folding in 2D is cool, but have you tried folding in 3D?
6
3
1
27
4,004
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!!!
1
2
10
912
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!!!
6
5
2
92
10,907
Kyle Macomber retweeted
Enjoy a weekend of exploring Xcode 27.1 beta and iPhone Duo in Bitrig 🦋
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!!!
2
3
18
2,584
Kyle Macomber retweeted
It's gonna be a fun weekend 🦋
1
2
29
3,304
Kyle Macomber retweeted
ok my fingers are tired from DMs. go wild!! downloads.bitrig.com/bitrig-…
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
8
8
3
42
7,848
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...
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
9
8
119
17,392
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
28
22
15
313
88,195
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.
25
55
7
884
190,412
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.
51
119
26
1,577
340,270
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.
5
2,462
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.
9
10
1
350
48,124
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.
86
6,482
Been saving up our Fable usage all weekend for the 27.1 beta. Hope it drops this morning 👀
3
45
8,449
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.
6
7
100
9,460
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…
1
1
23
6,745