Exploring SwiftUI Apple Watch Performance

I’m deep in the midst of a major new project for the Apple Watch. We got a whole host of new capabilities in watchOS 6 and I’ve been feverishly working on trying to take full advantage of them. By far the most significant thing added in watchOS 6 was the addition of SwiftUI, which allows for full, proper animations.

Previously WatchKit only allowed for crude animations that involved creating a series of pre-rendered animation frames and then displaying them in sequence to the user. Now with SwiftUI we can do actual animation that fluidly transitions from one state to another.

If you’ve used Geneva Moon you have seen this in action. Turn the digital crown and see how the moon can smoothly move through the night sky.

For my next project I’m hoping to do things that are a bit more ambitious than simply moving a single image across the screen. I want to be able to create interfaces that are lively and interactive. So I set out to explore the limits of SwiftUI, and especially its performance on the Series 2 Apple Watch (as it is the slowest supported device).

The idea I came up with was to create a little game of circular Pong, where you use the digital crown to rotate your paddle around the screen. This serves as a good test case as it requires the ball to move fluidly across the screen while concurrently, and interactively, shifting the paddle around to meet it. (It was also just a lot of fun to make)

I built this entirely using SwiftUI and the result was very promising. The interaction is fluid and the animations are smooth. This performance honestly feels like it exceeds using SpriteKit on watchOS, which previously was the only way to approximate this kind of visual experience. I’ve gone down this road before and the results were workable, but using SpriteKit comes with a whole host of problems that SwiftUI avoids.

Of course the next thing I had to do was to crank up the game to really see where the limits are reached. So I made an alternative version that kept adding new balls to the play area until things were visually slipping. Getting Instruments to reliably connect to an Apple Watch is a difficult thing, so instead I just eye-balled when it seemed the FPS started to fall. On a Series 5 Apple Watch this didn’t happen until around 400 balls. For a Series 2, this happened at 60 (which is significantly lower, but still workable for what I have in mind).

Overall I’m very encouraged by these results, as they open up a wide world of possibilities.

David Smith




Project Geneva: Watch Half-Full

I go back and forth a lot on whether we’ll ever get the ability to create 3rd party watch faces for the Apple Watch. While I’ve enjoyed the process of designing my own, it’s unclear if they’re something I’ll ever be able to publish. I’ve decided that I can look at this situation as either a frustration or an opportunity. Or, in the terms of the old idiom, half-full or half-empty.

Recently I realized that I’ve been too focused on my inability to develop for this part of the Apple Watch screen:

This is the half-empty view.

Instead what I should really be focused on is this part:

The half-full view.

I have extensive control over what is shown here and for many of the watch faces, this area makes up the vast majority of the screen. Other than the design of the watch hands or appearance of the digital time numerals, I can do a whole lot with the complication tools I already have.

To that end, I’m starting a journey I’m calling Project Geneva, in which I’m going to see just how far I can push customizability and design of complications for the Apple Watch.

The first instance of this is Geneva Moon (previously named Moon++), which was a great testing ground for seeing if there was user interest in excellent complications. It has been very warmly received and I found the process of making it a lot of fun.

I have many more ideas for where I can go with complications and their associated watch apps. Over the next few months I’m planning to release a series of super-customizable, thoughtfully designed complications. I hope you’ll follow along.

David Smith




Geneva Moon, a better lunar complication

Geneva Moon used to be named Moon++, but it turned out that was really tricky to type on an Apple Watch.

This app started life as so many of my apps do…from a frustration that just got under my skin.

I just received my new Series 5 Apple Watch. While reading reviews for it, many reviewers were using the moon complication in their product shots. I think this is because it is the default complication for the new California watch face. Anyway, I liked the overall aesthetic of it and so tried it out myself.

I went outside and looked up at the moon in the sky. This is what I saw:

Then I looked down at my wrist and saw this:

This bothered me more than it should. The two don’t really look the same at all. On my wrist is a powerful computer, capable of precisely locating itself on the surface of the earth (and indeed the solar system!)…but it isn’t showing me the correct moon.

So I had to fix it…

The result is Geneva Moon.

Geneva Moon seeks to provide a highly accurate, visually pleasing indication of what the moon looks like right now, right where you are. My goal was to make it so that if you look down at your wrist and then up into the sky the images you see should match.

Building it has been a fun little adventure into astronomy. The moon image I generate is adjusting itself for all manner of astronomical factors. I got to learn about such fun terms as: parallactic angle, libration, and lunar terminator.

It includes a robust set of complications for every watch face type. You can choose between either a visually rich ‘actual’ appearance or a more simplified version, to fit your own personal style.

Within the actual app itself it displays the current location of the moon in the sky (azimuth and elevation) along the horizon. If you rotate the Digital Crown you can shift forward and backwards through time.

Additionally, on the new Series 5 Apple Watch, which is equipped with a compass, you can have Geneva Moon orient itself towards the actual moon to make it easier to locate the moon in the sky.

I hope you enjoy this little utility, I really enjoyed making it.

It is $0.99 in the App Store.


A Press Kit for the app is here.


Technical Note:

This is my first app built using SwiftUI. It is really cool to see how interactive and lively you can now make an Apple Watch app. The compass mode feature especially wouldn’t really have been practical or performant to build using WatchKit.

Also, it is an Apple Watch only app, which means I didn’t have to build a hosting iPhone app.

David Smith




Moon++, a better lunar complication

This app started life as so many of my apps do…from a frustration that just got under my skin.

I just received my new Series 5 Apple Watch. While reading reviews for it, many reviewers were using the moon complication in their product shots. I think this is because it is the default complication for the new California watch face. Anyway, I liked the overall aesthetic of it and so tried it out myself.

I went outside and looked up at the moon in the sky. This is what I saw:

Then I looked down at my wrist and saw this:

This bothered me more than it should. The two don’t really look the same at all. On my wrist is a powerful computer, capable of precisely locating itself on the surface of the earth (and indeed the solar system!)…but it isn’t showing me the correct moon.

So I had to fix it…

The result is Moon++.

Moon++ seeks to provide a highly accurate, visually pleasing indication of what the moon looks like right now, right where you are. My goal was to make it so that if you look down at your wrist and then up into the sky the images you see should match.

Building it has been a fun little adventure into astronomy. The moon image I generate is adjusting itself for all manner of astronomical factors. I got to learn about such fun terms as: parallactic angle, libration, and lunar terminator.

It includes a robust set of complications for every watch face type. You can choose between either a visually rich ‘actual’ appearance or a more simplified version, to fit your own personal style.

Within the actual app itself it displays the current location of the moon in the sky (azimuth and elevation) along the horizon. If you rotate the Digital Crown you can shift forward and backwards through time.

Additionally, on the new Series 5 Apple Watch, which is equipped with a compass, you can have Moon++ orient itself towards the actual moon to make it easier to locate the moon in the sky.

I hope you enjoy this little utility, I really enjoyed making it.

It is $0.99 in the App Store.


A Press Kit for the app is here.


Technical Note:

This is my first app built using SwiftUI. It is really cool to see how interactive and lively you can now make an Apple Watch app. The compass mode feature especially wouldn’t really have been practical or performant to build using WatchKit.

Also, it is an Apple Watch only app, which means I didn’t have to build a hosting iPhone app.

David Smith




Seamless Light Complications

I really like the new Meridian face that arrived in the watchOS 6 GM. It is clean, simple but still provides ample opportunity for customization. Over the summer I’ve been rocking the California face (with Arabic numerals because its default mixed Roman numerals hurt both my head and heart). But the California face only has extensive complication options in the corners which isn’t my preferences. I like the face itself going to the edge of the display, it is one of the things I like most about the Series 4/5 display, that it really fills the face.

There is, however, one thing I’m now really wishing for with the Meridian face…the ability to make seamless complications for its light face options.

For the dark face variants, we already have this. You have white text on a black background that blends seamlessly into the background of the watch.

Increasingly Apple is providing options for us to have non-black watch faces, which I think creates a delightful bit of character and delight for the Apple Watch. These started with the Infograph faces and now continue with both California and Meridian. However, sadly we don’t yet have a way to make complications that can blend seamlessly into the these light colored backgrounds. The best I can currently do is something that looks kinda like this:

Which isn’t awful, but really interrupts the full effect that would be possible if the complication blended seamlessly into the background. Apple already allows this for the “Digital Time” complication so I know it isn’t completely out of the question. Here is an altered version of the above screenshot removing the ring around my complications.

Doesn’t that look great!

So this is my little feature request for apple (filed as FB7264371), I’d love to see a way to provide seamless complications for these colored backgrounds. Fingers crossed!

Note: The font used in my custom date and weather complications is Redbird, which is my current favorite for display on an Apple Watch face. It just looks at home on this device.

David Smith