Watch Faces and Complications
One of the first questions to ask when supporting ClockKit complications is simple: What data should I show? In the case of TapALap, you could show your most recent run, how fast you ran, and how far, but that’s only relevant for the time period during and immediately after the run itself. A great complication has relevant data to show the user at all times. Since any runner needs to stay hydrated and eat regular meals, you can offer a counterpart app focused on those aspects of training. In this chapter we’ll develop an app called NomNomNom that shows the user two points of data: how much water he’s consumed today and when his next meal is. You could build these features into TapALap itself, but you’d run the risk of cluttering it with too many features—better to keep TapALap focused on running.
The constant availability of complications comes with development challenges: your complication’s data needs to be up to date at all times, ready whenever the user needs it, but keeping your WatchKit extension active in the background to constantly update that data would drain the watch’s battery quicker than mining Dogecoin.
When it comes to creating these complications, there are five families of complication to choose from, depending on the user’s chosen watch face. For each of these families, your app selects a template and can provide images, text, or both to finish the complication UI. Instead of drawing directly to the screen, these templates take information you pass in, the size of the complication, and the color the user has selected for his watch face to draw itself. This allows the complication to look the part on the watch face without you having to write theme code yourself.
Modular Small complication family (Modular watch face) |
---|
Columns Text | Ring Image | Ring Text | Simple Image | Simple Text | Stack Image | Stack Text |
|
|
|
|
|
|
|
Modular Large complication family (Modular watch face) |
---|
Columns | Standard Body | Table | Tall Body |
|
|
|
|
Utilitarian Small complication family (Chronograph watch face) |
---|
Ring Image | Ring Text | Simple Image | Small Flat |
|
|
|
|
Utilitarian Small complication family (Utility watch face) |
---|
Ring Image | Ring Text | Simple Image | Small Flat |
|
|
|
|
Utilitarian Small complication family (Simple watch face) |
---|
Ring Image | Ring Text | Simple Image | Small Flat |
|
|
|
|
Utilitarian Large complication family (Utility watch face) |
---|
Large Flat |
|
Circular Small complication family (Color watch face) |
---|
Ring Image | Ring Text | Simple Image | Simple Text | Stack Image | Stack Text |
|
|
|
|
|
|
That’s a lot of options! Which should you support? In short: as many as you can. You don’t know which watch face your users will be using, and you certainly can’t ask them to switch just to support your app, so even though the Modular Large family is appealing—if for its sheer size than for no other reason—you’ll want to give the user as much choice as possible. It’ll be too hard for you to support the smaller complication families, but you can support both large families, which allows your app to run on multiple watch faces.