Skip to content

Onset Watch — Simulator vs device checklist

Use this when validating the Onset Watch target, Watch Connectivity, complications, and notification actions.

Apple Watch Simulator (with iOS Simulator)

  1. Scheme — Select the Onset iOS app scheme (watch app installs with the phone app).
  2. Run destination — Pick a paired simulator pair, e.g. iPhone 16 + Apple Watch Series 10 (Xcode adds the watch when you choose a watch-capable run destination).
  3. First launch — Launch the iPhone app once so SwiftData, notifications, and widget snapshot publishing run; the watch reads App Group UserDefaults and WCSession applicationContext.
  4. WCSession — Simulator support is limited: prefer the phone app as the source of truth for whether context synced; if the watch UI looks stale, background the phone app and reopen, or toggle a completion on the phone to force a new snapshot/context.
  5. Complications — Add the Onset complication on a watch face in the simulator; if data is empty, confirm the iOS app has written to the App Group key (onset.widget.protocolPayload in suite group.com.last1enterprises.onset).

Physical iPhone + Apple Watch

  1. Signing — Enable App Groups for:
  2. Main app (com.last1enterprises.Onset or your bundle ID)
  3. Watch app (…watchkitapp)
  4. Complications extension (…watchkitapp.complications)
    Use the same group: group.com.last1enterprises.onset. Refresh development and distribution profiles after changing capabilities.
  5. Install order — Install/run the iPhone app from Xcode (or TestFlight); the watch app should appear on the Watch; if not, install from the Watch app on iPhone under the Onset app section.
  6. Pairing — Watch and phone must show connected (Bluetooth/Wi‑Fi). WCSession needs both apps installed and session activated.
  7. Sync test — On the watch, complete an item (checkmark). Expect:
  8. transferUserInfo to the phone
  9. Phone applies completion, updates SwiftData, republishes snapshot + updateApplicationContext
  10. Watch UI and complications update after the next context/App Group write
  11. Notification “Mark complete” — Trigger a protocol reminder; on the watch, use the Mark complete action and confirm the same path as (4) on the phone.
  12. Haptics — Haptics only behave realistically on real hardware; the simulator is a weak substitute.

Quick failure triage

Symptom Things to verify
Watch shows no protocol App Group entitlements on all three targets; phone has run once; WidgetSnapshotStore / publish path executed
Complete on watch, phone unchanged WCSession activated on both; phone implements didReceiveUserInfo; not hitting simulator limits
Complication stuck WidgetCenter.reloadAllTimelines() after publish on phone; shared App Group data present
Code signing / “requires provisioning profile” New bundle IDs need App Groups + regenerated profiles