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)¶
- Scheme — Select the Onset iOS app scheme (watch app installs with the phone app).
- 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).
- First launch — Launch the iPhone app once so SwiftData, notifications, and widget snapshot publishing run; the watch reads App Group
UserDefaultsandWCSessionapplicationContext. - 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.
- 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.protocolPayloadin suitegroup.com.last1enterprises.onset).
Physical iPhone + Apple Watch¶
- Signing — Enable App Groups for:
- Main app (
com.last1enterprises.Onsetor your bundle ID) - Watch app (
…watchkitapp) - Complications extension (
…watchkitapp.complications)
Use the same group:group.com.last1enterprises.onset. Refresh development and distribution profiles after changing capabilities. - 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.
- Pairing — Watch and phone must show connected (Bluetooth/Wi‑Fi). WCSession needs both apps installed and session activated.
- Sync test — On the watch, complete an item (checkmark). Expect:
transferUserInfoto the phone- Phone applies completion, updates SwiftData, republishes snapshot +
updateApplicationContext - Watch UI and complications update after the next context/App Group write
- 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.
- 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 |