watchOS

watchOS 3 Key Takeaways from WWDC16 (Part 1)

Wow! What a week. I’m really excited about all the new developments in watchOS this year. It’s now becoming the platform we all wished we had in the beginning – apps that actually launch, complications as shortcuts, an awesome new dock, etc. 🎉 👏 ⌚️ ❤️

This week definitely passed by in a blur, but somehow I managed to find the time to share some of my excitement with Realm and also to attend some sessions. Here’re some of the key takeaways:

Platforms State of the Union

SceneKit & SpriteKit are available in watchOS 3! Great demo by Eliza Block showing how you can use these frameworks in watch notifications. It will be very interesting seeing how else apps will use these two frameworks on the watch. I imagine one of the main reasons for bringing both of these to the watch platform is because of the limited screen real estate on the watch. Reading a bunch of text is tedious and difficult on a tiny screen, but if a picture is worth a thousand words, then showing an animated scene will have endless possibilities.

What’s New in watchOS 3

My notes from the session:


Great overall look at what’s up and coming in watchOS 3. If you’re interested in what the watch can do, as opposed to how to do it, this is the best session to get caught up on all the latest developments. Josh Shaffer walks us through 3 main things to keep in mind while building watch apps:

Glanceable

Apple seems to be really pushing a concept of 2-second glanceable interactions. It’s just enough time for a user to get the information they need, without having to tap on too many buttons or mess around with a watch interface. The main driver for these interactions will be notifications & the new glanceable dock.

Actionable

The most obvious thing to take away from this is that your watch app should have something actionable for users, whether it be in the app itself, or perhaps adding a custom trigger for a notification. However, one subtle thing to keep in mind is that this also counts for informational apps. While a user won’t necessarily click a button or trigger an action from the app itself in these circumstances, it is important to present content that a user can act on (e.g. if it’s raining today, let the user know they should bring an umbrella).

There’s also a new local notification framework that you can use to send notifications to users. The best part about this is that you can choose to message users either only on the watch itself, or both the watch and the phone depending on your use case.

Responsive

Apple has essentially replaced Glances with the new dock. Since apps are kept in memory in this dock, it makes it much faster to launch apps from it. The interesting thing is that your apps can be updated while in this docked state. A user doesn’t even have to open your app to get its data. As users scroll through their apps, you can (and should) trigger background updates in order to pull the latest data and display it to users. Very useful for informative apps like weather for example.

Also important: we now have access to gyroscope & digital crown events! According to someone I talked to, watchOS 3 beta 1 seems to only have the gyroscope events at the moment. I assume digital crown events will be coming in a later beta.

Keeping Your Watch App Up to Date

My notes from the session:

img_0014img_0015img_0016IMG_0017img_0018img_0019

Background App Refresh

Another noteworthy new feature in watchOS 3 is the ability to trigger background app updates. Previously you could work around this by doing some magic with background fetch on your iPhone & transferring the data via Watch Connectivity, but those days are gone. The way this works is that you’ll get a limited number of task objects that will allow you to wake your watch app up in the background and do any necessary update work. These can also be scheduled if you have an app that needs to be updated at a set time periodically.

Unfortunately, it looks like there’s a time/CPU limit for these updates (similar to the update time limit in Watch Connectivity). Fortunately, this time limit is longer than the one in Watch Connectivity and we will also get crash reports if we exceed the CPU/time limit.

Note that these time/CPU limits will NOT be enforced on the simulator so you definitely want to make sure that your background updates are going through on device.

Snapshots

With glanceable apps, snapshots will be a big part of watchOS 3. You can have both a live snapshot (displays live up-to-date information) and a default state for when your live snapshots become stale, or if you don’t support live snapshots. There are multiple ways snapshots are triggered on your app including:

  1. Boot
  2. App goes from foreground to background
  3. 1 hour after a user stops using the app
  4. When the model is updated (both in the foreground and in the background)

Watch Connectivity

Minor note about a new property in Watch Connectivity. You can use hasContentPending to check whether there’s any data that has been pulled in the background, but hasn’t been delivered to the session’s delegate – very useful to figure out if you need to reload your UI with the newly transferred data.

Hopefully, that’s not the only improvement to Watch Connectivity…I know from comments on my blog that many of you were frustrated with debugging the data transfers and especially with getting sendMessage to work since isReachable seems to fail a lot. There wasn’t much said about Watch Connectivity in any of the sessions though so we’ll have to experiment with the betas and see if anything has improved.


Read part 2 here!

Would love to hear your thoughts! What are you most looking forward to in watchOS 3?

Leave a Reply