Categories
Programming

#ghc15: Natasha Murashev – The Zen Guide to WatchOS

My friend @NatashaTheRobot gave an awesome talk at GHC about WatchOS. I find a lot of tech talks focus on the how, not the why, but she completely inverted it – tying the technical details to the kind of experience you want to create. I’ve been pretty meh on watches (and glasses) because I want fewer notifications in my life not more! But her talk and philosophy on this made me think that maybe – if every developer was so considerate and mindful of their user-experience – a watch might not be a bad thing, at all…

NatashaTheRobot and the Tiny Raccoon
NatashaTheRobot and the Tiny Raccoon

Tao Te Ching – Chinese philosophy book, way of life. Very zen and very nice, like to read it as part of meditation.

“We join spokes together in a wheel,
but it is the center hole
that makes the wagon move.

We shape clay into a pot,
but it is the emptiness inside
that holds whatever we want.

We hammer wood for a house,
but it is the inner space
that makes it livable.

We work with being
but non-being is what we use.”

~Tao Te Ching, Chapter 11

How does this relate to the watch? The watch is one of those devices, it’s a physical device, but it’s about not using it. Want people to use our apps, but think about what kind of world do you want to live in? Want to live in the moment. People miss out on things because they’re always on this phone.

Watch is about freeing you from that mentality. Does this through 3 things:

  1. Notifications – on your wrist, you can really feel it. Free you up to move around the world, have zen feeling – if something comes up, you will know about it.
  2. Glances / cards. Can go through multiple apps and get the most important pieces of data. 
  3. App. Only use it from glance or notification. Watch is very action oriented. Go to the app for more information, would never think “I’m gonna go read the NYT on my watch”.

New watch OS, new interactions – complications. Making glances even less important.

Creating the watch experience is about asking “what’s the one most important piece of information the user needs?” Give it to them, and then they can move on with their day.

“The personal nature of Apple Watch requires a different approach when it comes to designing Watch app, glance, and notification interfaces. Your interfaces need to display information quickly and facilitate fast navigation and interactions. Creating that kind of interface means you should not simply port your existing iOS app behavior over to Apple Watch. Instead, create a complementary experience to your iOS app.”

~Apple Watch Programming Guide

Don’t be the heart rate app – screen dies before shows heart rate. Should be instant. No endless spinners.

Biggest development, architectural thing, make sure the data is right there. Not going to be visible, pretty. People aren’t going to notice it because it’s just going to work.

Watch connectivity – framework for passing data between iOS app and watch app and vice versa. Watch isn’t really standalone. Can do API requests, but most work should be done on iOS device and then passed to the watch.

Watch connectivity has two big parts.

  • Background data. Want to transfer data in the background, by the time the user raises their hand it’s too late. Think about transferring data as the app runs in the background. Apple controls when info gets passed. You don’t have the control of when, but pretty much guaranteed when they raise their wrist it’ll be fast.
    • Application context: e.g. game score 5 minutes ago doesn’t matter, what matters is score now. Queue of one piece of data. New data replaces old data. At time of transfer, only the latest data is sent across.
    • User info transfer. Data over time. e.g. conversation app. Need to make sure every piece of data is moved over, use user info. WatchOS and iOS are different platforms, can’t pass objects. Like plist data types, dictionaries. Have to serialise and create an object on the other end.
    • File transfer: images. Can send over metadata, e.g. picture ordering, can organise by date.
  • Interactive messaging: you need to transfer data right away. E.g. flappy bird on the watch, hit the watch to make the bird flap on the iPhone.
    • Immediate information transfer.
    • Requires reachable state (have unlocked recently, there is a chance this could fail).

Coding

WCSession – singleton. WC – watch connectivity. That’s how you transfer data.

Not hard. But have to make sure it’s supported. Universal apps; iPad will not support the apple watch. 

Because WCsession is a singleton, wrap in another you have more control over. Might have to do some data processing, but you want to check because you don’t want to do data processing if you don’t need to. Have a “startSession” function, can call it in applicationDidFinishLaunchingWithOptions.

A valid session means the app is installed, and paired. Don’t want to be doing data processing for the user that doesn’t have a valid session.

Overall API is pretty simple. Sender, receiver. Use WC to send the data.

Resources

I’m at GHC this year because Capital One is hosting me as a blogger! Come by and find me at the booth to say hi if you’re here!