watchOS Development
You MUST use this skill for ANY watchOS-specific development including app structure, independent apps, Watch Connectivity, complications and Smart Stack widgets, controls, Live Activities on watch, background tasks, and ClockKit migration.
Auditors are skills here. Where this router says "Launch some-auditor agent", invoke the
matching Codex skill instead — same procedure, no Claude Code agent required.
Available: axiom-modernize.
The ones that shell out — builds, tests, simulators, crash symbolication — need shell access to run.
Quick Reference
| Symptom / Task |
Reference |
| App structure, independent apps, watchOS 26 submission requirements |
See skills/platform-basics.md |
| watchOS HIG, glanceable UX, navigation model |
See skills/design-for-watchos.md |
| Smart Stack widgets, complications, ClockKit→WidgetKit, RelevanceKit |
See skills/smart-stack-and-complications.md |
| Controls on watch surfaces, Live Activities on watch |
See skills/controls-and-live-activities.md |
| Watch Connectivity (WCSession), paired-device data transfer, Family Setup |
See skills/watch-connectivity.md |
Xcode won't install/launch/attach to a Watch; Watch missing or unavailable in Device Hub / devicectl |
See skills/watch-device-diag.md |
| Background tasks, freshness scheduling, TN3135 networking limits |
See skills/background-and-networking.md |
BGTaskScheduler migration, deprecated WK background scheduling OS27 |
See skills/background-and-networking.md |
Foundation Models / Private Cloud Compute on the watch OS27 |
See skills/platform-basics.md |
| WatchKit→SwiftUI migration, ClockKit→WidgetKit migration |
See skills/modernization.md |
Cross-Suite Routes
These topics overlap with watchOS development but live in separate suites:
SwiftUI (shared iOS/watchOS/macOS)
- View state, data flow, @Observable → See axiom-swiftui
- Navigation basics (NavigationStack) → See axiom-swiftui
- Layout, animations → See axiom-swiftui
Design
- General HIG, Liquid Glass, SF Symbols, typography → See axiom-design
Accessibility
- General VoiceOver, Dynamic Type, WCAG → See axiom-accessibility
- watchOS-specific (VoiceOver rotor on Digital Crown, AssistiveTouch, Double Tap) → See axiom-accessibility (
skills/watchos-a11y.md)
Health and workouts
- HealthKit,
HKWorkoutSession, HKLiveWorkoutBuilder, WorkoutKit → See axiom-health
- Workout recovery, multi-device coordination → See axiom-health (
skills/workouts.md)
iOS-side widgets and App Intents
- iOS/iPadOS widgets, configuration intents, App Intents → See axiom-integration
- Live Activities on iPhone (initiation + ActivityKit) → See axiom-integration
Concurrency
- Swift 6 concurrency, actors, Sendable → See axiom-concurrency
New-on-watch frameworks (27 releases)
- Foundation Models depth (sessions, @Generable, tools, PCC) → See axiom-ai; watch scoping is in
skills/platform-basics.md
- Vision framework (new on watchOS 27) → See axiom-vision
- NowPlaying / MusicUnderstanding (new on watchOS 27) → See axiom-media
Conflict Resolution
axiom-watchos vs axiom-swiftui: When building a watchOS SwiftUI app:
- Use axiom-watchos for watch-specific patterns: glanceable UI, constrained navigation, Digital Crown focus, Smart Stack placement
- Use axiom-swiftui for cross-platform SwiftUI: state management, layout primitives, animations
- Both may apply: A watchOS NavigationStack with complications needs axiom-watchos for complication surfaces and axiom-swiftui for NavigationStack basics
axiom-watchos vs axiom-integration: For widgets and Live Activities:
- Use axiom-watchos for watch complications, Smart Stack placement, watch-side Live Activity presentation, RelevanceKit
- Use axiom-integration for iOS/iPadOS widgets, core ActivityKit API, App Intents
watch-device-diag vs watch-connectivity: Two independent connections fail in ways that look identical. Decide which before writing any code:
- Use watch-device-diag for the Mac/Xcode → Watch link (CoreDevice): install, launch, LLDB attach, a Watch that is missing or
unavailable
- Use watch-connectivity for the iPhone app ↔ watchOS app link (
WCSession): transfer-API choice, delivery semantics, background-task completion
- When unsure, start with watch-device-diag. Run the app without the debugger attached — if it behaves correctly, the fault is the tunnel and no
WCSession change will help. Redesigning WCSession to compensate for a broken debugger tunnel is the most expensive mistake in watchOS work
isReachable == false is not a transport failure — it is the expected value across ordinary lifecycle transitions and routes to watch-connectivity, not here
axiom-watchos vs axiom-health: For workouts on Apple Watch:
- Use axiom-watchos for watch-specific presentation: Always On display, Smart Stack placement, background mode coordination
- Use axiom-health for
HKWorkoutSession lifecycle, HKLiveWorkoutBuilder, recovery, multi-device mirroring
Decision Tree
digraph watchos {
start [label="watchOS development task" shape=ellipse];
what [label="What area?" shape=diamond];
start -> what;
what -> "skills/platform-basics.md" [label="app structure, independent apps, submission"];
what -> "skills/design-for-watchos.md" [label="watch HIG, glanceable UX"];
what -> "skills/smart-stack-and-complications.md" [label="complications, Smart Stack, RelevanceKit"];
what -> "skills/controls-and-live-activities.md" [label="controls, watch Live Activities"];
what -> "skills/watch-connectivity.md" [label="WCSession, paired-device transfer"];
what -> "skills/watch-device-diag.md" [label="Xcode can't reach the Watch"];
what -> "skills/background-and-networking.md" [label="background tasks, BGTaskScheduler, networking limits"];
what -> "skills/platform-basics.md" [label="Foundation Models / PCC on watch"];
what -> "skills/modernization.md" [label="WatchKit/ClockKit migration"];
what -> "axiom-health" [label="workouts, HealthKit, WorkoutKit"];
what -> "axiom-swiftui" [label="general SwiftUI patterns"];
what -> "axiom-accessibility" [label="VoiceOver rotor, AssistiveTouch"];
what -> "axiom-integration" [label="iOS-side widgets, App Intents"];
}
Resources
WWDC: 2021-10003, 2022-10133, 2023-10138, 2023-10029, 2023-10309, 2024-10098, 2024-10157, 2024-10205, 2025-334
Docs: /watchos-apps/building_a_watchos_app, /watchos-apps/creating-independent-watchos-apps, /watchconnectivity, /widgetkit/creating-accessory-widgets-and-watch-complications, /widgetkit/converting-a-clockkit-app, /relevancekit, /technotes/tn3135-low-level-networking-on-watchos, /technotes/tn3157-updating-your-watchos-project-for-swiftui-and-widgetkit
Skills: axiom-swiftui, axiom-design, axiom-accessibility, axiom-health, axiom-integration, axiom-concurrency, axiom-ai, axiom-vision, axiom-media
1---2name: axiom-watchos3description: Use when building ANY watchOS app — app structure, independent apps, Watch Connectivity, Smart Stack widgets, complications, controls, RelevanceKit, background tasks, ClockKit migration.4license: MIT5---6
7# watchOS Development
8
9**You MUST use this skill for ANY watchOS-specific development including app structure, independent apps, Watch Connectivity, complications and Smart Stack widgets, controls, Live Activities on watch, background tasks, and ClockKit migration.**
10
11<!-- AXIOM_AUDITOR_INLINE_BEGIN — rewritten for Codex by scripts/build-codex.ts; do not hand-edit -->
12> **Auditors are skills here.** Where this router says "Launch `some-auditor` agent", invoke the
13> matching Codex skill instead — same procedure, no Claude Code agent required.
14>
15> Available: `axiom-modernize`.
16>
17> The ones that shell out — builds, tests, simulators, crash symbolication — need shell access to run.
18<!-- AXIOM_AUDITOR_INLINE_END -->
19
20## Quick Reference
21
22| Symptom / Task | Reference |
23|----------------|-----------|
24| App structure, independent apps, watchOS 26 submission requirements | See `skills/platform-basics.md` |
25| watchOS HIG, glanceable UX, navigation model | See `skills/design-for-watchos.md` |
26| Smart Stack widgets, complications, ClockKit→WidgetKit, RelevanceKit | See `skills/smart-stack-and-complications.md` |
27| Controls on watch surfaces, Live Activities on watch | See `skills/controls-and-live-activities.md` |
28| Watch Connectivity (WCSession), paired-device data transfer, Family Setup | See `skills/watch-connectivity.md` |
29| Xcode won't install/launch/attach to a Watch; Watch missing or `unavailable` in Device Hub / devicectl | See `skills/watch-device-diag.md` |
30| Background tasks, freshness scheduling, TN3135 networking limits | See `skills/background-and-networking.md` |
31| BGTaskScheduler migration, deprecated WK background scheduling `OS27` | See `skills/background-and-networking.md` |
32| Foundation Models / Private Cloud Compute on the watch `OS27` | See `skills/platform-basics.md` |
33| WatchKit→SwiftUI migration, ClockKit→WidgetKit migration | See `skills/modernization.md` |
34
35## Cross-Suite Routes
36
37These topics overlap with watchOS development but live in separate suites:
38
39#### SwiftUI (shared iOS/watchOS/macOS)
40- View state, data flow, @Observable → See axiom-swiftui
41- Navigation basics (NavigationStack) → See axiom-swiftui
42- Layout, animations → See axiom-swiftui
43
44#### Design
45- General HIG, Liquid Glass, SF Symbols, typography → See axiom-design
46
47#### Accessibility
48- General VoiceOver, Dynamic Type, WCAG → See axiom-accessibility
49- watchOS-specific (VoiceOver rotor on Digital Crown, AssistiveTouch, Double Tap) → See axiom-accessibility (`skills/watchos-a11y.md`)
50
51#### Health and workouts
52- HealthKit, `HKWorkoutSession`, `HKLiveWorkoutBuilder`, WorkoutKit → See axiom-health
53- Workout recovery, multi-device coordination → See axiom-health (`skills/workouts.md`)
54
55#### iOS-side widgets and App Intents
56- iOS/iPadOS widgets, configuration intents, App Intents → See axiom-integration
57- Live Activities on iPhone (initiation + ActivityKit) → See axiom-integration
58
59#### Concurrency
60- Swift 6 concurrency, actors, Sendable → See axiom-concurrency
61
62#### New-on-watch frameworks (27 releases)
63- Foundation Models depth (sessions, @Generable, tools, PCC) → See axiom-ai; watch scoping is in `skills/platform-basics.md`
64- Vision framework (new on watchOS 27) → See axiom-vision
65- NowPlaying / MusicUnderstanding (new on watchOS 27) → See axiom-media
66
67## Conflict Resolution
68
69**axiom-watchos vs axiom-swiftui**: When building a watchOS SwiftUI app:
701. **Use axiom-watchos** for watch-specific patterns: glanceable UI, constrained navigation, Digital Crown focus, Smart Stack placement
712. **Use axiom-swiftui** for cross-platform SwiftUI: state management, layout primitives, animations
723. **Both may apply**: A watchOS NavigationStack with complications needs axiom-watchos for complication surfaces and axiom-swiftui for NavigationStack basics
73
74**axiom-watchos vs axiom-integration**: For widgets and Live Activities:
751. **Use axiom-watchos** for watch complications, Smart Stack placement, watch-side Live Activity presentation, RelevanceKit
762. **Use axiom-integration** for iOS/iPadOS widgets, core ActivityKit API, App Intents
77
78**watch-device-diag vs watch-connectivity**: Two independent connections fail in ways that look identical. Decide which before writing any code:
791. **Use watch-device-diag** for the Mac/Xcode → Watch link (CoreDevice): install, launch, LLDB attach, a Watch that is missing or `unavailable`
802. **Use watch-connectivity** for the iPhone app ↔ watchOS app link (`WCSession`): transfer-API choice, delivery semantics, background-task completion
813. **When unsure, start with watch-device-diag.** Run the app without the debugger attached — if it behaves correctly, the fault is the tunnel and no `WCSession` change will help. Redesigning `WCSession` to compensate for a broken debugger tunnel is the most expensive mistake in watchOS work
824. **`isReachable == false` is not a transport failure** — it is the expected value across ordinary lifecycle transitions and routes to watch-connectivity, not here
83
84**axiom-watchos vs axiom-health**: For workouts on Apple Watch:
851. **Use axiom-watchos** for watch-specific presentation: Always On display, Smart Stack placement, background mode coordination
862. **Use axiom-health** for `HKWorkoutSession` lifecycle, `HKLiveWorkoutBuilder`, recovery, multi-device mirroring
87
88## Decision Tree
89
90```dot
91digraph watchos {
92 start [label="watchOS development task" shape=ellipse];
93 what [label="What area?" shape=diamond];
94
95 start -> what;
96 what -> "skills/platform-basics.md" [label="app structure, independent apps, submission"];
97 what -> "skills/design-for-watchos.md" [label="watch HIG, glanceable UX"];
98 what -> "skills/smart-stack-and-complications.md" [label="complications, Smart Stack, RelevanceKit"];
99 what -> "skills/controls-and-live-activities.md" [label="controls, watch Live Activities"];
100 what -> "skills/watch-connectivity.md" [label="WCSession, paired-device transfer"];
101 what -> "skills/watch-device-diag.md" [label="Xcode can't reach the Watch"];
102 what -> "skills/background-and-networking.md" [label="background tasks, BGTaskScheduler, networking limits"];
103 what -> "skills/platform-basics.md" [label="Foundation Models / PCC on watch"];
104 what -> "skills/modernization.md" [label="WatchKit/ClockKit migration"];
105 what -> "axiom-health" [label="workouts, HealthKit, WorkoutKit"];
106 what -> "axiom-swiftui" [label="general SwiftUI patterns"];
107 what -> "axiom-accessibility" [label="VoiceOver rotor, AssistiveTouch"];
108 what -> "axiom-integration" [label="iOS-side widgets, App Intents"];
109}
110```
111
112## Resources
113
114**WWDC**: 2021-10003, 2022-10133, 2023-10138, 2023-10029, 2023-10309, 2024-10098, 2024-10157, 2024-10205, 2025-334
115
116**Docs**: /watchos-apps/building_a_watchos_app, /watchos-apps/creating-independent-watchos-apps, /watchconnectivity, /widgetkit/creating-accessory-widgets-and-watch-complications, /widgetkit/converting-a-clockkit-app, /relevancekit, /technotes/tn3135-low-level-networking-on-watchos, /technotes/tn3157-updating-your-watchos-project-for-swiftui-and-widgetkit
117
118**Skills**: axiom-swiftui, axiom-design, axiom-accessibility, axiom-health, axiom-integration, axiom-concurrency, axiom-ai, axiom-vision, axiom-media