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

The Tesla Flat Tire Process

One of the more peculiar things I discovered during the sales process for my tesla was that it doesn’t have a spare tire. This seems like a general trend across car manufactures, either shrinking their spares to sometimes comical sizes or eliminating them altogether. The weight and space savings are obvious but it did make me wonder what happens when you get a flat.

When I was investigating this before I got my car I couldn’t find a straightforward description of the process from an owners perspective, and instead pieced it together from forum posts and the like. I recently experienced my first flat and so can now speak from my own experience. This post is my attempt to help anyone else who is curious about how the process goes and what to expect.

1. The Flat

While driving along we started to receive low tire pressure warnings on the main dashboard. Initially these were just the regular “Low Pressure” warning that I’ve gotten a few times when I just need to top up a tire. So we added a bit of air to the tire in question and kept driving.

A few miles later the warning returned and now quickly escalated from ‘hey, one of your tires might need some air’ to ‘woah there, you need to pull over right now.

As soon as we safely could, we pulled the car over (in our case in a residential neighborhood). After a quick visual inspection the tire was definitely a full on flat now.

2. Roadside Service

As the car has no spare the next thing to do was to call Roadside Service. They answered right away and were able to lookup my account profile information from Caller ID, so we very quickly moved right to sending over help. The representative had a good balance of friendliness and directness.

He said the nearest tow service with a tire for me was about 30-60 minutes away and would be able to provide me with a loaner spare to get me moving again and the tow truck driver would then take my flat tire to my nearest Tesla service center for evaluation. He also then quite helpfully said that I should expect a call from him in around an hour to check that things were moving along.

The tow truck driver called and asked to confirm the tire size and specs for my vehicle. He also let me know that he couldn’t guarantee that the rim for the loaner spare would exactly match my other wheels (in my case it did but I appreciated the warning).

He arrived around 40 minutes later and proceeded to remove my flat tire and put on the loaner spare. He then took the broken tire with him and said he would drop it off with Tesla later that day, and then I should expect a call from Tesla with next steps for getting it fixed or replaced. From talking to him it sounded like Tesla had provided his tow truck company with a few spare tires that they cycle through as needed. He was efficient and helpful. The whole process took around 10 minutes.

Before he took away the old tire I was able to locate the source of my trouble…I’m no mechanic but I’m pretty sure this isn’t good:

3. The Loaner Spare

The same customer service representative from Roadside Service called me back to make sure everything had worked out correctly. He also sent over a simple document for me to e-sign regarding the loaner spare. Basically a general waiver of liability and an agreement that I’d bring back the tire to Tesla within 3 business days (or later if mutually agreed to).

So basically rather than carrying a spare in my truck, when I needed one it was delivered to me on the side of the road and I could then use it until a proper replacement could be arranged. The tire I got was a full size regular tire, and didn’t have any use restrictions. There was no cost for either the roadside service or loaner spare (though I think that after my car is beyond a certain age their might be).

The only downside of the loaner spare was that the tire pressure system wasn’t connected to it so I had this warning every time I drove until it was replaced.

4. The Replacement

I got a text message from Tesla service later that day after the tow truck driver delivered the tire to them.

First, let me say how much I loved that this was a text and not a phone call. While a bit silly I really loved that I could handle the entire process of scheduling the replacement over text message. That way I could just pick up the conversation as I was free and didn’t feel like it intruded into my day very much.

As I’d guessed when I saw that big chunk of metal sticking out of my tire I was told that I needed a new tire and that the cost for the replacement would be $350. Which is a bit higher than I may have hoped for, but certainly not unreasonable. I was able to authorize the work to begin changing the tire on my rim and schedule a time for me to drop in to have it put on. This ended up being 5 days after I got the flat because that worked best for me.

I brought my car in and they replaced the tire, reset the tire pressure monitoring system and gave it a good wash. The appointment was quoted at around an hour, but ended up more like 2 hours.

General observations

This happened to me in probably one of the more ideal circumstances. We were driving on quiet roads and were able to pull over into a neighborhood. The nearest Telsa Service center is only 10 miles away and the tow truck was within an hour. I’d expect that if this had happened to me out on the highway, in the middle of nowhere things would have been a bit more tricky or at least taken much longer. But hopefully the general process would follow the same smooth progression.

Overall, I was very pleased with the process. The lack of spare had given me a bit of pause when we were first considering the car but this process went off without a hitch and was about as painless as I could hope for given the circumstances. In a funny way it is slightly liberating to not have a spare in the trunk, so no matter what happens I have to call for professional help. This mean I’m never having to put myself in a potentially awkward or dangerous situation roadside.

David Smith

Apple Watch Apps Head to College

The thing I was most excited about during yesterday’s Apple Event was the addition of LTE to the Apple Watch. While the new iPhones are great, and a 4K Apple TV is useful, I see this new capability on the Apple Watch as being potentially transformative to how I use technology on a daily basis.

While I’ll have to live with it for a few weeks to see if it really pans out, imagining a future where my iPhone is no longer a ‘must carry’ device is remarkable.

The more, however, I think about this prospective future the more I think I’ll have to fundamentally change the way I consider and approach the development of my own Apple Watch apps.

Even though watchOS is only three years old we’ve already seen it grow from a hyper dependent toddler (WatchKit 1), to a slightly more independent adolescent (watchOS 2/3/4), to now suddenly a college student heading out of the home for the first time on its own. Asserting its independence while still holding on to a bit of a parental safety net.

Each evolution of the Apple Watch platform has made it less and less dependent on its parent iPhone. The addition of LTE takes all of this quite abruptly to another level.

I am now thinking about my watchOS apps as though they must be able to fully function out on their own with only minimal help and supervision from their iPhone. If they don’t, I suspect I’ll find them to be quite frustrating.

While previously there have been technical capabilities where watchOS apps could connect to external services without their iPhone present, the expectation I think has always been that this would be rare and unusual. Now it may very well be common and expected.

Practically I see this impacting my own apps in a few ways. These are mostly speculative at this point, so after living with an LTE watch for a few weeks they may change but I think these are going to be important considerations for watchOS developers moving forward.


Firstly, I’m going to need to do some management of application state and data via a web service rather than relying solely on the direct connection between the Apple Watch and iPhone.

I can imagine a situation where I configure a workout in Workouts++ and then immediately head out for a run. In this case if for some reason the new workout configuration hadn’t yet synced to the Apple Watch (via WatchConnectivity), right now the user would just be stuck. However, with LTE they would have a reasonable expectation that this new data would just be loaded over their cellular connection.

So I’m going to have to work through how to create a seamless experience for syncing application state between the Apple Watch and iPhone, where they are treated more like peers.

Application Dead-ends

Secondarily, while Apple Watch apps will still need to be simple and concise, I think I will need to make sure that there are very few ‘dead-ends’ where I’d currently punt the user to their iPhone to complete an action or do some setup.

These escape hatches were a great way to keep watchOS apps dead simple, but never really were particularly elegant. But in a world where the Apple Watch may be used for extended periods without being next to its iPhone they could become infuriating.

As an example, I’m thinking that for Workouts++ I may want to add the ability to do some very basic workout configuration on the Apple Watch, so that you aren’t stuck if you decide to do an activity you haven’t previously setup on your iPhone while you are out.

I’ll have to be extremely careful to not make the app overly complex as a result, but I’ll be on the lookout for these ‘dead-end’ spots.

New Opportunities

Lastly, I’m going to look for opportunities for what type of watchOS apps might now be possible with a persistent connection. In much the way that having an always internet connected iPhone opened a wide range of completely new use cases, I suspect a similar thing will be made possible on the Apple Watch. Some uses may be limited by the form factor of the Apple Watch but I suspect that a bit of creativity should allow many to become possible.

As someone who has been making apps for the Apple Watch from the beginning this new hardware addition has be more excited than ever for the platform.

David Smith