Pedometer += 5,000,000

One my apps just hit a significant milestone. Pedometer++ had its 5,000,000th download. I find it mind bending to even imagine a number like that. It works out to be roughly the population of Ireland.

It is remarkable to me how something so simple can have had such a far reaching appeal. While the number is very fun and something I’m quite proud of, by far the coolest part of making this app has been the countless stories from users who have used it as part of a broader life change. It is truly staggering that something that started it’s life as a few UILabels and a switch could have gone on to be a part in genuinely improving the quality and health of people’s lives.

I am very grateful for all of the customers of the app, and while there are rather too many of you to thank individually, please consider this my thank-you note to all of you.


David Smith

Generating Testing Device Wallpapers

A while back I mentioned that I had started creating wallpapers for my testing Apple Watches to show their type, configuration and which iPhone they were paired with. I typically have at least five Apple Watches on my desk at once so it is very easy to get confused about which one is which.

These initial wallpapers were manually created in and then screenshotted. That worked fine but it meant they had a white background and quickly fell out of date which wasn’t ideal. They were also kinda ugly which bothered me.

So I have made a little utility to automate the creation of these and streamline the whole process. They now look like this:

I’ve published the code for this utility here. This isn’t a project I expect to maintain or manage or support but if it is useful to you, then that’s awesome.

The resulting raw files look like this:

Once you have generated the file you then open up the Photos app and hit ‘Share’. Then tap on ‘Create Watch Face’ and you are all set. Simply repeat this process anytime you need to update the configuration for a device. It also generates corresponding iOS device wallpapers for the paired iPhone.

To collect the Apple Watch details I use the Health framework to pull the most recent pulse sample and then analyze it’s HKDevice source. This is a weird use of the Health framework but for use in a development-only app like this it seems fine to me.

David Smith

Automatic Sleep Tracking with Sleep++ 3.0

I’m delighted to release Sleep++ 3.0 today.

This is the most significant update to Sleep++ since I introduced it back in 2015. It brings about a fundamental change in how it tracks your sleep and gives you more tools for understanding and then using that data to improve your sleep habits. This update includes:

  • Automatic Sleep Tracking!
  • A morning sleep summary notification
  • Nightly sleep goal
  • A bedtime reminder notification
  • A visual overhaul and a lot of little tweaks and improvements.

Automatic Sleep Tracking

The headline feature of this update is the introduction of automatic sleep tracking into Sleep++. When I first wrote Sleep++ it was all based around the idea of directly measuring your movement throughout the night and using this as an indication of the quality of your sleep. This works really well but because of technical limitations on the Apple Watch it required that you manually launch the Apple Watch app at the start and end of your night to tell Sleep++ when you were asleep. This is awkward and really not ideal.

As things progressed with watchOS and more background capabilities were added I started to investigate doing this direct motion analysis automatically. Unfortunately it never worked reliably enough to ship. So instead I started looking for alternatives where I could get just as good data but without needing you to manually interact with the app.

If you wear an Apple Watch overnight it is always silently collecting a variety of health metrics. These include things like heart rate, active calories, and steps taken. My hope was that I could find away to combine these metrics into an analysis that produced comparable results to direct measurement. As they are all related to the movement measurements I was taking before I was hopeful.

After a few weeks of investigation I was delighted to find that I could! So now all you need to do to have Sleep++ track your sleep is wear it overnight. Then each morning it will look at your health data and be able to determine the length and general quality of your night. You don’t even have to install the Apple Watch app anymore for this to work (indeed it is only useful if you want to use the older manual tracking approach).

Morning Sleep Summary Notification

One upside of the old, manual tracking approach was that each morning you would have to open the Sleep++ app to end your sleeping session and then be shown an analysis of your night.

Now with automatic tracking you don’t have a need to open the app any more, so instead I have added the ability to optionally get a summary of each night’s sleep as a notification every morning. These include both the duration and timeline of your night as well as a breakdown of the restlessness of your sleep. This notification should appear on your iPhone within a few minutes of first unlocking your iPhone each morning.

One little note that I ran into a few times during testing. If you have Do Not Disturb enabled you will not see the alert pop-up or alert you. It will still be available to view in Notification Center, but since Do Not Disturb is often enabled while you sleep this has caused a bit of confusion

Sleep Goal

I’ve always struggled a bit with how to give Sleep++ a sense of celebration. In Pedometer++ when you hit your daily step goal the screen explodes in confetti, celebrating your activity. With sleep tracking that type of thing is a bit trickier. Often the reasons that we have difficult or short nights fall outside of our control, so I don’t want to be quite to dramatic with how I illustrate your goal. Also, once you go to sleep you cannot really control the soundness of your night so basing any sort of goal on restlessness seemed counterproductive.

To that end I’ve gone with a more subtle method for indicating your progress towards your sleep goals. You can now specify a nightly sleep duration goal. This defaults to seven hours. Whenever you sleep (or are trying to sleep) for that amount of time the sleep entry for that night will get a subtle green tint. If you don’t quite get there then it gets a subtle red tint.

Your sleep goal is marked just below each night’s graph to give you an indication of how close you came.

I’ve found this to be useful for myself to get a quick sense of how I’m doing and if I need to make adjustments to my sleeping routine, without feeling bad about the nights when things don’t quite work out.

Bedtime Reminder

To try and help build a more consistent sleep schedule I have also added an optional bedtime reminder notification to the app. This is intended to give you a gentle poke each night to head to bed.

In my own personal use I’ve found this really helpful for avoiding those nights where I really don’t intend to stay up late but get engrossed in reading a book or watching a show…and then realize hours later that I’m in for a short night. This little prompt lets me instead make a conscious choice in those situations, which is much nicer.

I really hope you like these updates. The app remains free in the App Store. When you first install Sleep++ it will analyze the last 30 days of data for you, so provided you have been wearing your Apple Watch overnight you’ll be given a great starting point for understanding your sleep right from the start.

David Smith

Apple Watch Adoption

I’ve been keeping an eye on the adoption of the Apple Watch Series 3 since its introduction last fall. From a development perspective the Series 3 is a delight to work with. It is fast, capable and LTE allows a wide variety of new applications (for example, the podcast support I added to Workouts++).

This stands in contrast to the challenges of working with the Series 0 (or Apple Watch (1st generation) as Apple would call it). It is just slow and honestly a bit painful to develop for. Even basic things like deploying your application to the watch can take uncomfortably long amounts of time. In daily use the Series 0 is probably “good enough” for many customers, especially with the speed/stability improvements added in watchOS 4, but as a developer I can’t wait until I no longer have to support it.

Which is why I’ve been watching the Apple Watch adoption curve within my apps (specifically Pedometer++ for this analysis) quite carefully. My personal hope is that this summer when we get watchOS 5 it will drop support for the Series 0 and free Apple to really push forward on what is possible for developers. But in order for that wish to be realistic I imagine Apple will need the daily use of those first watches to have died down significantly.

It seems like recently Apple has been more reticent to drop support for old hardware, but I hope that the pattern that we saw with the iPad might be repeated here. Where the first generation of the product was more quickly deprecated (2.5 years later in the case of the 1st Gen iPad). After that short lifespan for the first version, they then kept the second generation, iPad 2, supported for 5 years. The Series 1 & Series 2 watches would be a great baseline going forward. While not quite so fast as the Series 3, they are a mile ahead of the Series 0.

So far the data is looking promising that this dream of mine might actually be possible. The Series 3 is being adopted incredibly quickly and just last week became the most popular Apple Watch overall amongst my users with 33% of the overall user-base. The Series 0 is steadily falling, currently at around 24%.

I don’t know how low Apple would feel comfortable cutting off support for the Series 0, but it certainly seems like it is a possibility.

If I do some completely unscientific, wild, and almost certainly unreliable extrapolations of the current adoption trends (straight linear projection based on the trends since Christmas). It looks like by this fall, when presumably the next Apple Watch would be released and watchOS 5 will be generally available, the Series 0 may be as low as 15-20%.

I really do hope that they pursue this path. While as a consumer I know how bad it feels when something I use gets deprecated, as a developer I would love to see this platform be aggressively pushed forward.

A few random other notes that I’ve seen in my statistics with the Apple Watch:

  • The 42mm : 38m split I’ve seen is around 60/40.
  • The LTE : Non-LTE split for Series 3 has been around 50/50 (slightly higher when first released but 50/50 since Christmas)
  • Overall Apple Watch adoption amongst the admittedly fitness oriented audience of Pedometer++ is around 12% overall.
David Smith

Introducing Workouts++ 2.0

I’m delighted to announce version 2.0 of Workouts++. This update is in many ways the full realization of the initial idea I first had for the app back when it began. Unfortunately, back then the capabilities of watchOS and the Apple Watch didn’t quite allow for it to do everything I wanted it to do. But with the advent of watchOS 4, now I finally can.

Along with the feature updates another significant change with 2.0 is that the app is now totally free. My goal is to allow as many people as possible to use Workouts++ to get them fitter.

The major features in included in this update are:

  • Support for Apple Watch based podcast playback
  • Support for Workout Location tracking and mapping of saved workout routes
  • Support for Swimming workouts

Podcasts on your wrist

As soon as I saw the LTE enabled Apple Watch Series 3, I knew I had to find a way to get standalone podcast playback to work on it. Going out on a run or walk with only my watch is a absolutely delightful experience. Unfortunately, the road to get this working nicely on the Apple Watch was a bit bumpy.

As Marco nicely outlined, there are a number of limitations that watchOS apps currently have that make it awkward to get podcasts working well. However, I’ve been able to get it working well enough. It certainly helped that I also run an RSS Sync Platform, so at least a lot of the usual struggles with podcast backends were already in place for me. There are certainly a few rough edges and things that don’t perform exactly how I’d ideally like them to but the overall experience is there and once you get used to the few necessary quirks it is really great.

You can download episodes either directly on your Apple Watch or transfer them ahead of time using the iPhone app. Direct streaming over LTE is an especially smooth way to get started. Because transfers done between the iPhone and Apple Watch (or Apple Watch downloads done while connected to the iPhone) are done over Bluetooth they are significantly slower than those done over LTE1.

Direct streaming downloads started on your Apple Watch will begin to play as soon as it has buffered enough of the file. Seek controls aren’t enabled until the whole file is downloaded, but playback should typically begin within a few seconds. So you should be able to get started right away.

Once you have a file playing you can control the playback speed using the on-screen control, or just let it use TimeSaver silence removal to speed it up. TimeSaver dynamically shortens the length of silences in the podcast audio, so that you can speed up the podcast without distorting the audio. This typically results in a savings of roughly 5-10%. You can disable this in Settings on your the iPhone if desired.

You can play back the podcast to either a connected bluetooth headset or directly from the Apple Watch speaker. Surprisingly I’ve found that in certain situations the Apple Watch speaker is actually a really nice way to listen. You don’t need to have anything in or covering your ear and the speaker will follow you around wherever you go.

Location Tracking

Since watchOS 3 the built-in workout app on the Apple Watch has recorded the route taken during your outside workouts. These provide a lovely way to go back and examine your workouts. Starting in watchOS 4 it is now possible for 3rd party apps to do the same (and also display any previously recorded routes).

Along with the route taken, the app is also able to collect your elevation. This is graphed above your workout plot to give you a sense of the terrain your navigated. When location tracking is enabled you can also now add Current Elevation as a workout metric displayed during your workout. This is potentially useful as a navigation aid or just for general motivation.

This works anytime your iPhone is with you during your workout, or if you have a Series 2 Apple Watch or better with built-in GPS. Location tracking is optional and can be disabled in the configuration screen of any workout.

Swim Tracking

By far the most requested feature with version 1.0 of Workouts++ was swim workout support. This is now possible in watchOS 4. I’m not a big swimmer myself (just one step up from lightly drowning), but I have been able to work with a few fine beta testers who are, and I think the result is really nice. During your workout you can display things like your length/lap count2, as well as use the High/Low Heart Rate graph to display your stroke history right on your wrist.

Additionally for the app can now display the stroke history of your workout and detailed stats for each stroke when viewed on your iPhone later.

Workouts++ will automatically put your Apple Watch in Water Lock mode at the start of the workout. You can also manually enable Water Lock from the controls screen in the app.

I’ve made automatic Water Lock a feature available (but turned off by default) in all other workout modes too. I’ve found that in certain situations (like outdoor runs in wet weather) it is nice to have the ability to setup a ‘wet workout’ configuration that I can use in challenging environments.

Other Features

There are also a whole host of other features I have added to the app including:

  • Display of V02 Max values
  • Siri integration (e.g. “Start Outdoor Walking workout in Workouts”)
  • Redesigned custom workout configuration system
  • Redesigned workout detail display
  • Dark mode
  • Added Stopwatch, Round counter, Average pace/speed and Activity ring metrics for display during workout
  • Added Distance and Duration Alerts

I hope you enjoy the app. If you have any feedback please let me know, I’ve learned a lot from my users of this app. Everyone seems to have a slightly different approach to how they workout and I try to make Workouts++ flexible enough to accommodate most of them.

  1. Somewhat amusingly a little trick you can use to speed up transfers between the iPhone and Apple Watch is to start a transfer going and then turn off Bluetooth temporarily on your iPhone. Assuming you are somewhere with a good WiFi network the transfer will switch over to WiFi and go much quicker. Then you can turn back on Bluetooth once it completes.

  2. There seems to be no consensus around the meaning of the terms laps and lengths. For the purposes of Workouts++ a length is the swimming taken to move from one wall on of the pool to the other. A lap is two lengths.

David Smith