iCalvin.org

Drink Keeper For watchOS

TLDR: The next version of Drink Keeper released for iOS 11 will not come with a watchOS app, due to technical difficulties and time constraints, but I do intend to replace it in the very next point release.

I didn’t really put much work into Drink Keeper for a few years, which never sat right with me. It’s an app which I really liked and there were some interesting challenges left to be solved that I was looking forward to tackling, not to mention some cool new features that I really wanted to take advantage of, like 3D Touch and Complications. Plus it was by far my most popular app, so I figured it would be a good place to spend my time to try to get my sales up.

I built Drink Keeper for iOS 8 and the last update I put out was within that year, not long before WWDC ‘15 and the iOS 9 & watchOS 2 previews. I actually made pretty good progress on an updated version of Drink Keeper for those two platforms, but the big snag I ended up hitting was around the WatchConnectivity framework.

Like many developers I originally was able to use the limitations of watchOS 1 to my advantage. Since the code was executed on the device my watchOS Extension target was able to share the same App Container and Keychain as my main Application target and Today Widget, making it very simple to keep data in sync because there was only a single source of truth.

watchOS 2, for all of the benefits it added for developers and users by allowing the code to execute on the watch itself, removed my ability to manage my data in this way. Now I had two sources of truth, either one could be more recent, which might have conflicting data, and which would need to be kept in sync. Not that this problem was unsolvable, but at the time my primary personal machine was a 2015 MacBook which struggled with Xcode Debugging sessions, and watchOS debugging in particular. The MacBook would often fail to launch the watchOS simulator or ever attach to my Apple Watch, making the debugging cycle often take 10-15 minutes per build. So as far as I got with the project, once I got closer to the end of the coding period I had a lot of small issues where I needed to build the watchOS app many times and get it into some particular states to test, which was very frustrating. After a few weeks of work I ended up putting the project aside, ultimately for about a year.

Once watchOS 3 launched last year I picked the project back up, but even with all of the performance improvements for code running on the device the state of debugging watchOS apps hadn’t gotten much better since Xcode 8, and ultimately the project went back into stasis.

I finally committed to a new 3.0 release of Drink Keeper in the Spring of ‘17 after coming back inspired from CocoaConf Yosemite. I was going to start from a fresh project, rather than refactoring the existing data sync manager, which would make it much easier for me to incorporate the WatchConnectivity framework than it had been in my previous attempts.

Eventually WWDC ‘17 rolled around and I was still working on the new build of the main Drink Keeper app. I didn’t have too many new features to take advantage of, but it was quickly apparent that with my summer schedule, plus finding a new job, plus getting ready for my wedding in the Fall, I wouldn’t be able to complete the watchOS app I had planned. Rather than delaying the 3.0 launch yet again I decided that the best thing to do would be to just release the app, as much of it as I could get wrapped up, and save the watchOS target for a later release.

This was hard for me, because around the same time I came to this decision I started reading about other apps that quietly removed their watchOS counterparts which started a lot of discussion in the Apple Developer community about the state and future of watchOS apps, which wasn’t something I really wanted to contribute to, at least not on the side of “Yet another developer removes their watchOS app.” Not to mention the watchOS app is mentioned in pretty much every positive review I have on the App Store. Still I couldn’t get the watchOS app ready for release by iOS 11 launch time, so I’ll be releasing version 3.0 of Drink Keeper for iOS only and will plan to have the watchOS app back in the 3.1 release, maybe with some other cool plans I have for the future of the app.

So I hope to make clear here, or at least say publicly so I can hold myself to it, that this is a temporary removal, and Drink Keeper will be back on Apple Watch as soon as I can get it ready. The