What's new in watchOS 8

Description: watchOS 8 brings all-new opportunities to keep people up to date on their watch face. With new APIs for the Always-On Retina display and updating complications from Bluetooth devices and background delivery of HealthKit data, it's never been easier to keep your app up to date. Learn about region-based user notifications to leverage location in your app. Explore all the new enhancements to SwiftUI and watchOS that will get you excited to build your next Watch app.

Always-on display dimmed state

  • Supported on series 5 and 6
  • in watchOS 7, the always-on state showed your app’s UI blurred with the system time overlaid
  • when you rebuild your app with the watchOS 8 SDK, your app’s UI will now be shown in a dimmed state instead, and is immediately interactive if someone taps the UI
  • You can get notified of of this dimmed state via a new SwiftUI environment property isLuminanceReduced.
  • You can respond to this state by highlighting information that’s especially important, and hiding information that should stay private
  • In the watch simulator, you click the lock button in the simulator window to simulate a wrist-down event (triggering the dimmed state)

Guidance:

  • the transition from active state to the always-on state should feel seamless
  • don’t drastically alter the UI or reorganize information
  • dim non-essential information and elements, to give more prominence to the piece of information you want to stay highlighted and visible
  • if your UI has large elements that are filled with color or imagery, you may want to reduce those elements to be represented with a stroke or dimmed color
  • redact or remove sensitive information
  • reset animations
  • use SwiftUI's TimelineView to tell watchOS 8 that your inactive app needs to update its UI

UI Updates: - Apps with an ongoing, active session (e.g. workout or audio session) can update your UI up to once per second - other apps up to once per minute - assume your app is visible longer than two minutes

HealthKit data

  • background delivery of HealthKit data to Watch apps
  • new results come up to once per hours
  • if you have an active complication, up to four times per hour
  • all received results count against background app refresh budget

Update frequency:

  • immediate for critical data types (fall events, low blood oxygen saturation, heart rate events)
  • hourly or longer for other events

Bluetooth

  • from watchOS 4, Bluetooth devices can connect directly to Apple Watch and make use of Core Bluetooth.
  • from watchOS 8, Bluetooth devices can connect during background app refresh opportunities that your app’s complications get when they’re on the active watch face
    • this means that your app’s complications can stay up to date with your Bluetooth device and display updated information throughout the day.
    • Background app refresh gives your app’s complications that are on the active watch face up to four opportunities per hour to connect and update.
    • these opportunities will count against your app’s overall background app refresh budget

Guidance: - connect and process your data within a very short period of time - new expiration handler on WKRefreshBackgroundTask, letting you know when you're about to run out of time

Location

  • new in watchOS 8, region-based user notifications
    • works similarly to iOS:
      • deliver pre-created local notifications
      • "when in use" location permission required
      • limit the number of regions to only include important POIs near someone or locations they’ve shown explicit intent for
  • new Location button, for one-time location authorization without going through authorization prompts each time it’s tapped
  • always-on altimeter API, no need location access

More enhancements

  • respiratory rate API
  • assistive touch
  • large accessibility text size
  • (Xcode 12.5+) Unit testing and UI testing
  • Large titles
  • text input improvements:
    • Scribble or Dictation preference is preserved per app
    • quick access to changing between input types while entering text
    • SwiftUI's .searchable API
    • Swipe actions on List
    • Buttons improvements:
    • new roles parameter to let the system know how to present and handle specific button types (e.g. destructive buttons)
    • new controlProminence view modifier, which will give those buttons an additional haptic when tapped.
    • SwiftUI Canvas for rich programmatic drawing

Missing anything? Corrections? Contributions are welcome 😃

Related

Written by

Federico Zanetello

Federico Zanetello

iOS Engineer with strong passion for Swift, minimalism, and design. When he’s not busy automating things, he can be found writing at FIVE STARS and/or playing with the latest shiny toys.