Making Games for Apple Watch
In August last year I joined a team at Wooga to build games running on Apple’s latest device: the watch. During that time we built one prototype and shipped two games to the AppStore. After one year, it is a good time to take a look back and reflect on the platform. (Disclaimer: below are my personal views and may not represent the views of my employer, Wooga.)
Who needs a watch?
Apple Watch is one the most controversial products Apple has ever released. It’s been mocked relentlessly on social media and the lack of official sales figures doesn’t make it any easier to tell how successful the product really is.
What is clear, however, is that Apple seems committed to this device. Sure, it’s unlikely to ever match iPhone sales (that bar is set pretty high at 1 billion units). But every watchOS update so far has been very substantial. Especially watchOS 3 demonstrates that even the first generation hardware is very capable and was underutilized when it launched in spring 2015. Apple found out that watch has enough memory to keep the most used apps running in the background, making switching between them almost instant. Developers can now also access powerful graphics capabilities and use SpriteKit (sprite engine) and SceneKit (3D animation engine) to build games and enrich other kinds of apps.
On September 7, 2016, Apple announced first hardware update. The new Series 2 tries to answer what’s perhaps the biggest question about the Watch: what is it useful for? With this update device has turned into a very compelling sports tracker, waterproof and equipped with GPS. And, unlike other devices from the same category, it’s also a software platform, capable of running an increasing number of apps.
Apple is still experimenting with the the product. After all, I can’t rationally explain their own Breathe app in any other way (It begs for a slogan: “Breathing, now there’s an app for that!”). But overall every update has brought significant improvements in performance and usability. As the company learns how people use the device, some features are removed and other get more focus. For example, glances have been eliminated and the side button now acts as a dock instead of showing mostly useless list of phone numbers. Making complications more prominent and easier to configure is another sign of that process.
Wooga recognized this new emerging platform very early. Toby, a virtual pet, was one of the watch’s launch titles. Few months later a small dedicated team was formed to explore potential for casual games on wearable devices, and I joined it as an engineer. In April this year we launched Farm Time, an incremental farming game, that received few major updates since then. Later at WWDC Apple previewed our next game – Fish Time, that uses new capabilities of watchOS 3, such as SpriteKit, to deliver more interactivity and better graphics.
Developer experience
How is it to program games for such a small device?
Somehow unexpectedly: pretty great. The watch might be small, but it’s much more powerful than my first Pentium 133 with a 3D graphic “accelerator” card, capable of smoothly running the most incredible Quake 2 back in 1998… Apple Watch easily outshines it with its high DPI touch screen, 512 MB RAM, 8 GB storage, WiFi, gyroscope, pedometer, heart ate monitor and, in Series 2, a GPS chip. Oh, and it fits comfortably on your wrist. The hardware is capable of offering great performance, especially with watchOS 3, as long as you keep in mind it’s not a supercomputer (such as iPhone 7 Plus).
Unfortunately, when we developed Farm Time in the dark era of watchOS 2, some of these capabilities were not yet exposed to developers, most notably – advanced animation APIs. Therefore all animations in the game are built using simple UI controls and PNG sequences. Fish Time didn’t have the same constraints and thus features more sophisticated graphics. (Farm Time has also been updated to watchOS 3, but its animation system doesn’t use SpriteKit.)
Watch apps are built with WatchKit, a framework similar to Cocoa Touch, but much more limited and optimized for a smartwatch. The upside is that it’s simpler and easier to master than Cocoa (after few years of using Cocoa I feel like I still know of only a small fraction of its capabilities). Because WatchKit is still relatively new and less popular, it is more likely to have bugs than solid and battle-tested Cocoa Touch. Because there are fewer developers with WatchKit experience, not all your potential problems will have an answer readily waiting for you on Stack Overflow. But such are the joys of exploring new grounds.
While working on watch games I also had my first chance to use Swift. There are good reasons why it’s recognized as one of the most beloved programming languages. The languages I’ve used long enough to have a meaningful opinion about are Perl, PHP, JavaScript, Ruby and Objective C. Swift doesn’t offer everything they do, but incorporates many ideas from the last few decades of language design. You can read about it in detail somewhere else; my personal highlights are conciseness and safety. Swift offers type inference, greatly reducing syntactic noise. It also uses optionals to make handling of null values explicit, and that eliminates a large category of errors. I found out in practice that satisfying the compiler gives me solid confidence that my code will run without runtime errors. That’s something dynamically typed languages such as JavaScript and Ruby simply can’t offer, and even Objective C has problems with, due to its lax handling of null pointers.
Add superb compatibility with Objective C libraries and open source development model, and you’ll get a very decent and modern language.
Its biggest limitation is a byproduct of its origin: Swift has an excellent support only on Apple platforms and virtually nowhere else, even though the open source community works on changing that. It also suffers from problems of the young age: tooling is very limited, most notably refactoring is not yet available in Xcode. AppCode tries to play catch-up, but it doesn’t support developing Watch apps (or app extensions), so it was not really an option for me.
Design constraints
Wearing a screen on a wrist makes it uncomfortable to use apps for longer periods of time. Ideal interaction should only last few seconds. In Farm Time the player needs very little time to collect profits and perform necessary upgrades to their farm. They can also use optional notifications to be informed about significant events in the game, or use complications to check farm status just by looking at the watch face, without even entering the game. But because the watch is only one hand move away, players tend to check the game more often than they would if it was running on their phone. That translates into shorter but more frequent sessions. If you’re interested in real-world data about user behavior in Farm Time, there’s a post on that topic on Wooga blog.
We found that about 40% of users enabled notifications for the game. Only few percent have used complications, but that can be explained by extremely cumbersome process of enabling them in watchOS 2. Apple improved it recently by allowing watch face customization in the iOS watch app, so this number should grow. Complications, if designed well, are the most efficient way of accessing information on the watch. I hope Apple will further streamline the process of configuring them, because they deserve to be more popular. If you’re considering building a watch app, take a look at how complications can make it more useful to your audience.
Apple Watch is one of the very few modern platforms that doesn’t have a web browser. It’s an entirely different discussion if browsing the web is even feasible on such a small screen equipped with two buttons, but as a consequence the plethora of existing web services is not available in watchOS. Developers can’t just wrap their responsive site and have it shown on the watch.
There’s something else that’s powered by web APIs today: ads. In one year of using Apple Watch I haven’t seen a single one. As a user I hardly miss them. If you’re a developer and want to monetize your watch app, your options are very limited: you can either make your app paid (and immediately reduce its chances of being downloaded) or use in-app-purchases (IAPs) on the phone. Presently Apple doesn’t allow IAPs on the watch, so payments are all but frictionless: users need to switch to their phone, open iOS version of your app, and make a purchase there. Finally, your phone app has to reliably sync the result of that purchase to the watch app – watchOS doesn’t do it automatically. In other words, at the moment payments in watch apps are difficult and complicated, both for app developers, and for the end users.
That explains why quality watch apps are so rare at the moment, despite unique properties of the device. The problem is deepened by issues with discovering new, quality apps. Watch AppStore has much less prominence than its iOS equivalent, and is not as well curated. For example, its front page doesn’t have a “What’s new” section, and some of the featured apps haven’t been updated for over a year. Apple certainly could do more to boost quality and discoverability of watch apps.
As a result many watch users don’t even try 3rd party apps for their watches. Farm Time had excellent retention (60% one-day) and was featured prominently by Apple, but the number of new installs was nowhere near iOS numbers, even when accounting for the much smaller potential user base.
Closing words
Working on watch games turned out to be one of the most exciting projects I’ve ever done. The platform brings new and unique design challenges, Swift is a wonderful language, and the hardware is quite amazing. The watch continuously gets better with every update. Series 2 is an excellent purchase for anyone interested in sports tracking.
It’s clear that the watch is in its early days. Apple seems to be still figuring out how to position the device, and what the optimal usage patterns are. The company turned the smartwatch into a software platform, but it’s not yet clear how big is the market for watch apps. Watch AppStore is nowhere near the size of its iOS counterpart, and it needs more attention from Apple.
One can’t forget that there’s now a whole generation of people perfectly happy without a device strapped to their wrists (since they replaced it with a much bigger one in their pocket). Because smartphone is not going anywhere, trying to sell a smartwatch is an uphill battle. However, it’s an interesting niche, currently still underserved and with untapped potential.
If you want to learn more about Farm Time design details, check out a talk given by my team mate Sarah. And if you own an Apple Watch, be sure to try out Farm Time!
Chuck Whelon
Great article, thanks. I am an illustrator with some coding experience and I was interested in exploring the potential of the Apple Watch. I love the art on Farm Time!
Szafranek
Thank you, Chuck!
Artwork for the game was done by Gerben Steenks. He now makes doodles for Google homepage :).