iOS System Integration
You MUST use this skill for ANY iOS system integration including Siri, Shortcuts, widgets, in-app purchases, background tasks, push notifications, and more.
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-audit-iap.
The ones that shell out — builds, tests, simulators, crash symbolication — need shell access to run.
Quick Reference
| Symptom / Task |
Reference |
| Siri, App Intents, entity queries |
See skills/app-intents-ref.md |
| App Shortcuts, phrases, Spotlight |
See skills/app-shortcuts-ref.md |
| App discoverability strategy |
See skills/app-discoverability.md |
| Core Spotlight indexing |
See skills/core-spotlight-ref.md |
| LLM search over app content, SpotlightSearchTool |
See skills/core-spotlight-ref.md |
| Widgets, Control Center controls |
See skills/extensions-widgets.md |
| Widget API reference |
See skills/extensions-widgets-ref.md |
| Live Activities, Dynamic Island, push-to-start, broadcast |
See skills/live-activities.md |
| Live Activities / ActivityKit API reference |
See skills/live-activities-ref.md |
| Apple Pay (physical goods, services, donations) |
Use axiom-payments instead |
| In-app purchases, subscriptions |
See skills/in-app-purchases.md |
| StoreKit 2 API reference |
See skills/storekit-ref.md |
| Commitment billing plans, subscription bundles/suites, group/volume subscriptions, retention offers, offer codes |
See skills/storekit-ref.md |
| In-game content (Unity plug-ins, asset packs + IAP) |
See skills/in-app-purchases.md, skills/background-assets.md |
| Calendar events, reminders (EventKit) |
See skills/eventkit.md |
| EventKit API reference |
See skills/eventkit-ref.md |
| Contacts, contact picker |
See skills/contacts.md |
| Contacts API reference |
See skills/contacts-ref.md |
| Localization, String Catalogs |
See skills/localization.md |
| Apple terminology matching, glossary, pseudolocalization, TMS |
See skills/localization-research-ref.md |
| Privacy manifests, permissions UX |
See skills/privacy-ux.md |
| Bluetooth/Wi-Fi accessory pairing (AccessorySetupKit, iOS 18+) |
See skills/accessorysetupkit.md |
| AccessorySetupKit API (descriptor fields, events, auth-settings flow) |
See skills/accessorysetupkit-ref.md |
| Measure distance/direction to a paired accessory (Bluetooth Channel Sounding, iOS 27) |
See skills/accessorysetupkit-ref.md (Part 7) |
| Weather data, forecasts, attribution (WeatherKit) |
See skills/weatherkit.md |
| VoIP calls, CallKit, VoIP push, caller ID/blocking |
See skills/callkit-livecommunicationkit.md |
| CallKit / LiveCommunicationKit / IdentityLookup API reference |
See skills/callkit-livecommunicationkit-ref.md |
| SharePlay, GroupActivities, shared sessions, spatial Personas |
See skills/shareplay.md |
| GroupActivities API reference (GroupSession, messenger, journal) |
See skills/shareplay-ref.md |
| SharePlay coordinated audio/video playback |
Use axiom-media (skills/shareplay-playback.md) instead |
Suggested actions for a messaging conversation (SuggestedActionsView, com.apple.developer.suggested-actions entitlement, OS27) |
Use axiom-ai (skills/suggested-actions.md) instead — Apple-Intelligence-backed; the entitlement/capability is the integration half |
| AlarmKit (iOS 26+) |
See skills/alarmkit-ref.md |
| Timer patterns, scheduling |
See skills/timer-patterns.md |
| Timer API reference |
See skills/timer-patterns-ref.md |
| Background tasks, BGTaskScheduler |
See skills/background-processing.md |
| Background task debugging |
See skills/background-processing-diag.md |
| Background task API reference |
See skills/background-processing-ref.md |
| Background Assets (large content delivery, FM adapter shipping, Apple-hosted vs server-hosted) |
See skills/background-assets.md |
| Background Assets API reference (incl. localized asset packs, Steam conversion) |
See skills/background-assets-ref.md |
| On-Demand Resources migration (deprecated in 27) |
See skills/background-assets.md |
| Push notifications, APNs |
See skills/push-notifications.md |
| Push notification debugging |
See skills/push-notifications-diag.md |
| Push notification API reference |
See skills/push-notifications-ref.md |
Push without APNs on restricted/local networks (Local Push Connectivity, NEAppPushProvider, MCX iOS27) |
See skills/local-push-connectivity.md |
Decision Tree
digraph integration {
start [label="Integration task" shape=ellipse];
what [label="Which system feature?" shape=diamond];
start -> what;
what -> "skills/app-intents-ref.md" [label="Siri / App Intents"];
what -> "skills/app-shortcuts-ref.md" [label="Shortcuts / phrases"];
what -> "skills/app-discoverability.md" [label="discoverability\nstrategy"];
what -> "skills/extensions-widgets.md" [label="widgets /\nControl Center"];
what -> "skills/live-activities.md" [label="Live Activities /\nDynamic Island"];
what -> "skills/in-app-purchases.md" [label="IAP / subscriptions"];
what -> "skills/eventkit.md" [label="calendar / reminders"];
what -> "skills/contacts.md" [label="contacts"];
what -> "skills/localization.md" [label="localization"];
what -> "skills/privacy-ux.md" [label="privacy / permissions"];
what -> "skills/accessorysetupkit.md" [label="accessory pairing\n(Bluetooth/Wi-Fi)"];
what -> "skills/weatherkit.md" [label="weather / forecasts"];
what -> "skills/callkit-livecommunicationkit.md" [label="VoIP calls /\ncaller ID"];
what -> "skills/alarmkit-ref.md" [label="alarms (iOS 26+)"];
what -> "skills/timer-patterns.md" [label="timers"];
what -> "skills/background-processing.md" [label="background tasks"];
what -> "skills/background-assets.md" [label="large asset delivery /\nFM adapter shipping"];
what -> "skills/push-notifications.md" [label="push notifications"];
what -> "skills/local-push-connectivity.md" [label="push without APNs\n(local network / MCX)"];
}
- Siri / App Intents / entity queries? →
skills/app-intents-ref.md
- App Shortcuts / phrases? →
skills/app-shortcuts-ref.md
- App discoverability / Spotlight strategy? →
skills/app-discoverability.md, skills/core-spotlight-ref.md
3a. LLM search over your app's index (SpotlightSearchTool, LanguageModelSession tool-calling)? → skills/core-spotlight-ref.md
- Widgets / Control Center controls? →
skills/extensions-widgets.md, skills/extensions-widgets-ref.md
4a. Live Activities / Dynamic Island / push-to-start / broadcast? → skills/live-activities.md, skills/live-activities-ref.md
- In-app purchases / StoreKit? →
skills/in-app-purchases.md, skills/storekit-ref.md
5a. Subscription billing plans (12-month commitment), bundles/suites, group/volume purchasing, retention offers, offer-code redemption? → skills/storekit-ref.md
- Calendar / reminders / EventKit? →
skills/eventkit.md, skills/eventkit-ref.md
- Contacts / contact picker? →
skills/contacts.md, skills/contacts-ref.md
- Localization mechanics (String Catalogs, plurals, RTL)? →
skills/localization.md
8a. Localization research (Apple terminology, glossary, pseudolocalization, TMS)? → skills/localization-research-ref.md
- Privacy / permissions? →
skills/privacy-ux.md
- Alarms (iOS 26+)? →
skills/alarmkit-ref.md
10a. Bluetooth/Wi-Fi accessory pairing (iOS 18+)? → skills/accessorysetupkit.md
10b. Weather data / forecasts / attribution (WeatherKit)? → skills/weatherkit.md
10c. VoIP calls / CallKit / VoIP push / caller ID / blocking? → skills/callkit-livecommunicationkit.md
- Timers? →
skills/timer-patterns.md, skills/timer-patterns-ref.md
- Background tasks / BGTaskScheduler? →
skills/background-processing.md, skills/background-processing-diag.md, skills/background-processing-ref.md
12a. Large asset delivery (game packs, localized asset packs, ML models, Foundation Models adapters, ODR migration)? → skills/background-assets.md, skills/background-assets-ref.md
- Push notifications? →
skills/push-notifications.md, skills/push-notifications-diag.md, skills/push-notifications-ref.md
13a. Push/calls on networks without internet, or PTT over an MCX cellular slice? → skills/local-push-connectivity.md
- Want IAP audit? →
axiom-audit-iap
- Want full IAP implementation? →
axiom-implement-iap
- Camera / photos / audio / haptics / ShazamKit? → Use
axiom-media instead
Cross-Domain Routing
Widget + data sync (widget not showing updated data):
- Widget timeline not refreshing → stay here (extensions-widgets)
- SwiftData/Core Data not shared with extension → also invoke axiom-data (App Groups)
App Intents + security (lock-screen intent risk, prompt injection via Siri):
- Intent/schema API surface → stay here (app-intents-ref)
- Threat modeling, authenticationPolicy gating, schema risk metadata → also invoke axiom-security (skills/agentic-security.md)
Live Activity + push notification:
- ActivityKit push token / broadcast setup → stay here (live-activities)
- Push delivery failures → also invoke axiom-networking (networking-diag)
- Entitlements/certificates → also invoke axiom-build
VoIP push + CallKit (VoIP app killed / pushes stopped arriving):
- VoIP push must report a call to CallKit → stay here (callkit-livecommunicationkit, Part 1)
- PushKit token vs APNs delivery → stay here (push-notifications for the APNs contrast)
- Call audio silent/misrouted → also invoke axiom-media (AVAudioSession category)
Push + background processing (silent push not triggering background work):
- Push payload and delivery → stay here (push-notifications-diag)
- BGTaskScheduler execution → stay here (background-processing)
In-game content (StoreKit + Background Assets, Unity plug-ins):
- Asset packs, IAP mechanics, payment sheet, mock server → stay here (background-assets, in-app-purchases)
- Game input, rendering, game-side performance → also invoke axiom-games / axiom-graphics
Calendar/Contacts + data sync:
- EventKit/Contacts data issues → stay here
- Shared data with widget via App Groups → also invoke axiom-data
watchOS surfaces
- Complications + Smart Stack widgets → See axiom-watchos (skills/smart-stack-and-complications.md)
- Live Activities on Apple Watch → See axiom-watchos (skills/controls-and-live-activities.md)
Conflict Resolution
integration vs axiom-build: When system features fail with entitlement/certificate errors:
- Use axiom-build for signing and provisioning issues
- Use integration for API usage and permission patterns
integration vs axiom-data: When widgets or extensions can't access shared data:
- App Groups and shared containers → axiom-data
- Specifically: GRDB/SQLite database shared with widget/extension/Live Activity → See axiom-data (skills/grdb-app-groups.md)
- Widget timeline, Live Activity updates → integration
integration vs axiom-media: When media features overlap with system features:
- Camera/photo/audio/haptics code → axiom-media
- Privacy manifests for camera/microphone → stay here (privacy-ux)
- Background audio mode → stay here (background-processing)
Anti-Rationalization
| Thought |
Reality |
| "App Intents are just a protocol conformance" |
App Intents have parameter validation, entity queries, and background execution. |
| "Widgets are simple, I've done them before" |
Widgets have timeline, interactivity, and Live Activity patterns that evolve yearly. |
| "Localization is just String Catalogs" |
Xcode 26 has type-safe localization, generated symbols, and #bundle macro. |
| "Push notifications are just a payload and a token" |
Token lifecycle, Focus levels, service extension gotchas cause 80% of push bugs. |
| "I'll just bundle the assets, it's simpler" |
Bundling ≥10 MB inflates first-install size and pays the cost every update. Background Assets ships with App Store install-progress integration; FM adapters can't be bundled at all. See skills/background-assets.md. |
| "I'll use URLSession for the asset download" |
URLSession doesn't integrate with App Store install progress, charging-aware scheduling, or per-app quota — and can't reach Apple-hosted asset packs at all. Background Assets is the supported channel. |
| "On-Demand Resources still works fine" |
The entire NSBundleResourceRequest family is deprecated in the 27 SDKs ("Use Background Assets instead"). Migrate ODR tags to asset packs. See skills/background-assets.md. |
| "Just request full Calendar access" |
Most apps only need to add events — EventKitUI does that with zero permissions. |
| "SharePlay is just a message channel between participants" |
GroupSession is not Sendable, observation is Combine-only, and the late-joiner delta depends on @Published willSet timing. Migrating it to @Observable silently breaks catch-up. |
| "The person who started the SharePlay session is the host" |
There is no host. Every participant is equal — the framework has no owner or turn-taking concept. lifetimePolicy is the only related control, and it lives on the activity. |
| "One messenger, I'll pick reliable or unreliable per message" |
deliveryMode is a let fixed at init and no send overload takes a mode. Mixed protocols need two GroupSessionMessenger instances. |
| "I'll request Bluetooth permission and scan for the accessory" |
AccessorySetupKit (iOS 18+) pairs in one tap with no broad Bluetooth prompt and grants scoped BT+Wi-Fi access. See skills/accessorysetupkit.md. |
| "I'll process the VoIP push, then report the call when ready" |
iOS terminates your app and stops delivering VoIP pushes if a push doesn't report a call before completion. Report first, fetch after. See skills/callkit-livecommunicationkit.md. |
| "No internet on this network, so I'll keep my own socket open in the background" |
iOS suspends the app and the socket dies. Local Push Connectivity runs a system-managed provider extension for exactly this. See skills/local-push-connectivity.md. |
| "I'll activate the audio session when the call connects" |
CallKit owns the audio session — activate only in provider(_:didActivate:) or audio is silent/misrouted. See skills/callkit-livecommunicationkit.md. |
| "I'll use CNContactStore directly for picking" |
CNContactPickerViewController needs no authorization and shows all contacts. |
Example Invocations
User: "How do I add Siri support?"
→ Read: skills/app-intents-ref.md
User: "My widget isn't updating"
→ Read: skills/extensions-widgets.md
User: "My Live Activity won't update" / "How do I add a Dynamic Island?" / "Broadcast scores to thousands of Live Activities"
→ Read: skills/live-activities.md
User: "Implement in-app purchases with StoreKit 2"
→ Read: skills/in-app-purchases.md
User: "Offer a monthly plan with a 12-month commitment" / "Sell subscription seats to teams"
→ Read: skills/storekit-ref.md
User: "Deliver level packs only in the player's language" / "Convert my Steam depots to asset packs"
→ Read: skills/background-assets-ref.md
User: "Let the on-device model answer questions about my app's content"
→ Read: skills/core-spotlight-ref.md
User: "How do I implement push notifications?"
→ Read: skills/push-notifications.md
User: "Push notifications work in dev but not production"
→ Read: skills/push-notifications-diag.md
User: "Our app must receive calls on a ship / hospital network with no internet" / "Push to Talk over a Mission Critical 5G slice"
→ Read: skills/local-push-connectivity.md
User: "My background task never runs"
→ Read: skills/background-processing-diag.md
User: "How do I add an event to the user's calendar?"
→ Read: skills/eventkit.md
User: "How do I let users pick a contact?"
→ Read: skills/contacts.md
User: "How do I pair a Bluetooth accessory without the permission prompt?"
→ Read: skills/accessorysetupkit.md
User: "How do I show the weather forecast with WeatherKit?" / "Why was my weather app rejected?"
→ Read: skills/weatherkit.md
User: "My VoIP app gets killed" / "How do I handle CallKit incoming calls?" / "How do I block spam callers?"
→ Read: skills/callkit-livecommunicationkit.md
User: "Review my in-app purchase implementation"
→ Launch: iap-auditor agent
1---2name: axiom-integration3description: Use when integrating ANY iOS system feature - Siri, Shortcuts, widgets, IAP, localization, privacy, alarms, calendar, reminders, contacts, background tasks, push notifications, timers. Covers App Intents, WidgetKit, StoreKit, EventKit, Contacts.4license: MIT5---6
7# iOS System Integration
8
9**You MUST use this skill for ANY iOS system integration including Siri, Shortcuts, widgets, in-app purchases, background tasks, push notifications, and more.**
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-audit-iap`.
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| Siri, App Intents, entity queries | See `skills/app-intents-ref.md` |
25| App Shortcuts, phrases, Spotlight | See `skills/app-shortcuts-ref.md` |
26| App discoverability strategy | See `skills/app-discoverability.md` |
27| Core Spotlight indexing | See `skills/core-spotlight-ref.md` |
28| LLM search over app content, SpotlightSearchTool | See `skills/core-spotlight-ref.md` |
29| Widgets, Control Center controls | See `skills/extensions-widgets.md` |
30| Widget API reference | See `skills/extensions-widgets-ref.md` |
31| Live Activities, Dynamic Island, push-to-start, broadcast | See `skills/live-activities.md` |
32| Live Activities / ActivityKit API reference | See `skills/live-activities-ref.md` |
33| Apple Pay (physical goods, services, donations) | **Use `axiom-payments` instead** |
34| In-app purchases, subscriptions | See `skills/in-app-purchases.md` |
35| StoreKit 2 API reference | See `skills/storekit-ref.md` |
36| Commitment billing plans, subscription bundles/suites, group/volume subscriptions, retention offers, offer codes | See `skills/storekit-ref.md` |
37| In-game content (Unity plug-ins, asset packs + IAP) | See `skills/in-app-purchases.md`, `skills/background-assets.md` |
38| Calendar events, reminders (EventKit) | See `skills/eventkit.md` |
39| EventKit API reference | See `skills/eventkit-ref.md` |
40| Contacts, contact picker | See `skills/contacts.md` |
41| Contacts API reference | See `skills/contacts-ref.md` |
42| Localization, String Catalogs | See `skills/localization.md` |
43| Apple terminology matching, glossary, pseudolocalization, TMS | See `skills/localization-research-ref.md` |
44| Privacy manifests, permissions UX | See `skills/privacy-ux.md` |
45| Bluetooth/Wi-Fi accessory pairing (AccessorySetupKit, iOS 18+) | See `skills/accessorysetupkit.md` |
46| AccessorySetupKit API (descriptor fields, events, auth-settings flow) | See `skills/accessorysetupkit-ref.md` |
47| Measure distance/direction to a paired accessory (Bluetooth Channel Sounding, iOS 27) | See `skills/accessorysetupkit-ref.md` (Part 7) |
48| Weather data, forecasts, attribution (WeatherKit) | See `skills/weatherkit.md` |
49| VoIP calls, CallKit, VoIP push, caller ID/blocking | See `skills/callkit-livecommunicationkit.md` |
50| CallKit / LiveCommunicationKit / IdentityLookup API reference | See `skills/callkit-livecommunicationkit-ref.md` |
51| SharePlay, GroupActivities, shared sessions, spatial Personas | See `skills/shareplay.md` |
52| GroupActivities API reference (GroupSession, messenger, journal) | See `skills/shareplay-ref.md` |
53| SharePlay coordinated audio/video playback | Use axiom-media (`skills/shareplay-playback.md`) instead |
54| Suggested actions for a messaging conversation (`SuggestedActionsView`, `com.apple.developer.suggested-actions` entitlement, `OS27`) | Use axiom-ai (skills/suggested-actions.md) instead — Apple-Intelligence-backed; the entitlement/capability is the integration half |
55| AlarmKit (iOS 26+) | See `skills/alarmkit-ref.md` |
56| Timer patterns, scheduling | See `skills/timer-patterns.md` |
57| Timer API reference | See `skills/timer-patterns-ref.md` |
58| Background tasks, BGTaskScheduler | See `skills/background-processing.md` |
59| Background task debugging | See `skills/background-processing-diag.md` |
60| Background task API reference | See `skills/background-processing-ref.md` |
61| Background Assets (large content delivery, FM adapter shipping, Apple-hosted vs server-hosted) | See `skills/background-assets.md` |
62| Background Assets API reference (incl. localized asset packs, Steam conversion) | See `skills/background-assets-ref.md` |
63| On-Demand Resources migration (deprecated in 27) | See `skills/background-assets.md` |
64| Push notifications, APNs | See `skills/push-notifications.md` |
65| Push notification debugging | See `skills/push-notifications-diag.md` |
66| Push notification API reference | See `skills/push-notifications-ref.md` |
67| Push without APNs on restricted/local networks (Local Push Connectivity, NEAppPushProvider, MCX `iOS27`) | See `skills/local-push-connectivity.md` |
68
69## Decision Tree
70
71```dot
72digraph integration {
73 start [label="Integration task" shape=ellipse];
74 what [label="Which system feature?" shape=diamond];
75
76 start -> what;
77 what -> "skills/app-intents-ref.md" [label="Siri / App Intents"];
78 what -> "skills/app-shortcuts-ref.md" [label="Shortcuts / phrases"];
79 what -> "skills/app-discoverability.md" [label="discoverability\nstrategy"];
80 what -> "skills/extensions-widgets.md" [label="widgets /\nControl Center"];
81 what -> "skills/live-activities.md" [label="Live Activities /\nDynamic Island"];
82 what -> "skills/in-app-purchases.md" [label="IAP / subscriptions"];
83 what -> "skills/eventkit.md" [label="calendar / reminders"];
84 what -> "skills/contacts.md" [label="contacts"];
85 what -> "skills/localization.md" [label="localization"];
86 what -> "skills/privacy-ux.md" [label="privacy / permissions"];
87 what -> "skills/accessorysetupkit.md" [label="accessory pairing\n(Bluetooth/Wi-Fi)"];
88 what -> "skills/weatherkit.md" [label="weather / forecasts"];
89 what -> "skills/callkit-livecommunicationkit.md" [label="VoIP calls /\ncaller ID"];
90 what -> "skills/alarmkit-ref.md" [label="alarms (iOS 26+)"];
91 what -> "skills/timer-patterns.md" [label="timers"];
92 what -> "skills/background-processing.md" [label="background tasks"];
93 what -> "skills/background-assets.md" [label="large asset delivery /\nFM adapter shipping"];
94 what -> "skills/push-notifications.md" [label="push notifications"];
95 what -> "skills/local-push-connectivity.md" [label="push without APNs\n(local network / MCX)"];
96}
97```
98
991. Siri / App Intents / entity queries? → `skills/app-intents-ref.md`
1002. App Shortcuts / phrases? → `skills/app-shortcuts-ref.md`
1013. App discoverability / Spotlight strategy? → `skills/app-discoverability.md`, `skills/core-spotlight-ref.md`
1023a. LLM search over your app's index (SpotlightSearchTool, LanguageModelSession tool-calling)? → `skills/core-spotlight-ref.md`
1034. Widgets / Control Center controls? → `skills/extensions-widgets.md`, `skills/extensions-widgets-ref.md`
1044a. Live Activities / Dynamic Island / push-to-start / broadcast? → `skills/live-activities.md`, `skills/live-activities-ref.md`
1055. In-app purchases / StoreKit? → `skills/in-app-purchases.md`, `skills/storekit-ref.md`
1065a. Subscription billing plans (12-month commitment), bundles/suites, group/volume purchasing, retention offers, offer-code redemption? → `skills/storekit-ref.md`
1076. Calendar / reminders / EventKit? → `skills/eventkit.md`, `skills/eventkit-ref.md`
1087. Contacts / contact picker? → `skills/contacts.md`, `skills/contacts-ref.md`
1098. Localization mechanics (String Catalogs, plurals, RTL)? → `skills/localization.md`
1108a. Localization research (Apple terminology, glossary, pseudolocalization, TMS)? → `skills/localization-research-ref.md`
1119. Privacy / permissions? → `skills/privacy-ux.md`
11210. Alarms (iOS 26+)? → `skills/alarmkit-ref.md`
11310a. Bluetooth/Wi-Fi accessory pairing (iOS 18+)? → `skills/accessorysetupkit.md`
11410b. Weather data / forecasts / attribution (WeatherKit)? → `skills/weatherkit.md`
11510c. VoIP calls / CallKit / VoIP push / caller ID / blocking? → `skills/callkit-livecommunicationkit.md`
11611. Timers? → `skills/timer-patterns.md`, `skills/timer-patterns-ref.md`
11712. Background tasks / BGTaskScheduler? → `skills/background-processing.md`, `skills/background-processing-diag.md`, `skills/background-processing-ref.md`
11812a. Large asset delivery (game packs, localized asset packs, ML models, Foundation Models adapters, ODR migration)? → `skills/background-assets.md`, `skills/background-assets-ref.md`
11913. Push notifications? → `skills/push-notifications.md`, `skills/push-notifications-diag.md`, `skills/push-notifications-ref.md`
12013a. Push/calls on networks without internet, or PTT over an MCX cellular slice? → `skills/local-push-connectivity.md`
12114. Want IAP audit? → `axiom-audit-iap`
12215. Want full IAP implementation? → `axiom-implement-iap`
12316. Camera / photos / audio / haptics / ShazamKit? → **Use `axiom-media` instead**
124
125## Cross-Domain Routing
126
127**Widget + data sync** (widget not showing updated data):
128- Widget timeline not refreshing → **stay here** (extensions-widgets)
129- SwiftData/Core Data not shared with extension → **also invoke axiom-data** (App Groups)
130
131**App Intents + security** (lock-screen intent risk, prompt injection via Siri):
132- Intent/schema API surface → **stay here** (app-intents-ref)
133- Threat modeling, authenticationPolicy gating, schema risk metadata → **also invoke axiom-security** (skills/agentic-security.md)
134
135**Live Activity + push notification**:
136- ActivityKit push token / broadcast setup → **stay here** (live-activities)
137- Push delivery failures → **also invoke axiom-networking** (networking-diag)
138- Entitlements/certificates → **also invoke axiom-build**
139
140**VoIP push + CallKit** (VoIP app killed / pushes stopped arriving):
141- VoIP push must report a call to CallKit → **stay here** (callkit-livecommunicationkit, Part 1)
142- PushKit token vs APNs delivery → **stay here** (push-notifications for the APNs contrast)
143- Call audio silent/misrouted → **also invoke axiom-media** (AVAudioSession category)
144
145**Push + background processing** (silent push not triggering background work):
146- Push payload and delivery → **stay here** (push-notifications-diag)
147- BGTaskScheduler execution → **stay here** (background-processing)
148
149**In-game content** (StoreKit + Background Assets, Unity plug-ins):
150- Asset packs, IAP mechanics, payment sheet, mock server → **stay here** (background-assets, in-app-purchases)
151- Game input, rendering, game-side performance → **also invoke axiom-games / axiom-graphics**
152
153**Calendar/Contacts + data sync**:
154- EventKit/Contacts data issues → **stay here**
155- Shared data with widget via App Groups → **also invoke axiom-data**
156
157#### watchOS surfaces
158- Complications + Smart Stack widgets → See axiom-watchos (skills/smart-stack-and-complications.md)
159- Live Activities on Apple Watch → See axiom-watchos (skills/controls-and-live-activities.md)
160
161## Conflict Resolution
162
163**integration vs axiom-build**: When system features fail with entitlement/certificate errors:
164- Use **axiom-build** for signing and provisioning issues
165- Use **integration** for API usage and permission patterns
166
167**integration vs axiom-data**: When widgets or extensions can't access shared data:
168- App Groups and shared containers → **axiom-data**
169- Specifically: GRDB/SQLite database shared with widget/extension/Live Activity → See axiom-data (skills/grdb-app-groups.md)
170- Widget timeline, Live Activity updates → **integration**
171
172**integration vs axiom-media**: When media features overlap with system features:
173- Camera/photo/audio/haptics code → **axiom-media**
174- Privacy manifests for camera/microphone → **stay here** (privacy-ux)
175- Background audio mode → **stay here** (background-processing)
176
177## Anti-Rationalization
178
179| Thought | Reality |
180|---------|---------|
181| "App Intents are just a protocol conformance" | App Intents have parameter validation, entity queries, and background execution. |
182| "Widgets are simple, I've done them before" | Widgets have timeline, interactivity, and Live Activity patterns that evolve yearly. |
183| "Localization is just String Catalogs" | Xcode 26 has type-safe localization, generated symbols, and #bundle macro. |
184| "Push notifications are just a payload and a token" | Token lifecycle, Focus levels, service extension gotchas cause 80% of push bugs. |
185| "I'll just bundle the assets, it's simpler" | Bundling ≥10 MB inflates first-install size and pays the cost every update. Background Assets ships with App Store install-progress integration; FM adapters can't be bundled at all. See `skills/background-assets.md`. |
186| "I'll use URLSession for the asset download" | URLSession doesn't integrate with App Store install progress, charging-aware scheduling, or per-app quota — and can't reach Apple-hosted asset packs at all. Background Assets is the supported channel. |
187| "On-Demand Resources still works fine" | The entire `NSBundleResourceRequest` family is deprecated in the 27 SDKs ("Use Background Assets instead"). Migrate ODR tags to asset packs. See `skills/background-assets.md`. |
188| "Just request full Calendar access" | Most apps only need to add events — EventKitUI does that with zero permissions. |
189| "SharePlay is just a message channel between participants" | `GroupSession` is not `Sendable`, observation is Combine-only, and the late-joiner delta depends on `@Published` willSet timing. Migrating it to `@Observable` silently breaks catch-up. |
190| "The person who started the SharePlay session is the host" | There is no host. Every participant is equal — the framework has no owner or turn-taking concept. `lifetimePolicy` is the only related control, and it lives on the activity. |
191| "One messenger, I'll pick reliable or unreliable per message" | `deliveryMode` is a `let` fixed at init and no `send` overload takes a mode. Mixed protocols need two `GroupSessionMessenger` instances. |
192| "I'll request Bluetooth permission and scan for the accessory" | AccessorySetupKit (iOS 18+) pairs in one tap with no broad Bluetooth prompt and grants scoped BT+Wi-Fi access. See `skills/accessorysetupkit.md`. |
193| "I'll process the VoIP push, then report the call when ready" | iOS terminates your app and stops delivering VoIP pushes if a push doesn't report a call *before* completion. Report first, fetch after. See `skills/callkit-livecommunicationkit.md`. |
194| "No internet on this network, so I'll keep my own socket open in the background" | iOS suspends the app and the socket dies. Local Push Connectivity runs a system-managed provider extension for exactly this. See `skills/local-push-connectivity.md`. |
195| "I'll activate the audio session when the call connects" | CallKit owns the audio session — activate only in `provider(_:didActivate:)` or audio is silent/misrouted. See `skills/callkit-livecommunicationkit.md`. |
196| "I'll use CNContactStore directly for picking" | CNContactPickerViewController needs no authorization and shows all contacts. |
197
198## Example Invocations
199
200User: "How do I add Siri support?"
201→ Read: `skills/app-intents-ref.md`
202
203User: "My widget isn't updating"
204→ Read: `skills/extensions-widgets.md`
205
206User: "My Live Activity won't update" / "How do I add a Dynamic Island?" / "Broadcast scores to thousands of Live Activities"
207→ Read: `skills/live-activities.md`
208
209User: "Implement in-app purchases with StoreKit 2"
210→ Read: `skills/in-app-purchases.md`
211
212User: "Offer a monthly plan with a 12-month commitment" / "Sell subscription seats to teams"
213→ Read: `skills/storekit-ref.md`
214
215User: "Deliver level packs only in the player's language" / "Convert my Steam depots to asset packs"
216→ Read: `skills/background-assets-ref.md`
217
218User: "Let the on-device model answer questions about my app's content"
219→ Read: `skills/core-spotlight-ref.md`
220
221User: "How do I implement push notifications?"
222→ Read: `skills/push-notifications.md`
223
224User: "Push notifications work in dev but not production"
225→ Read: `skills/push-notifications-diag.md`
226
227User: "Our app must receive calls on a ship / hospital network with no internet" / "Push to Talk over a Mission Critical 5G slice"
228→ Read: `skills/local-push-connectivity.md`
229
230User: "My background task never runs"
231→ Read: `skills/background-processing-diag.md`
232
233User: "How do I add an event to the user's calendar?"
234→ Read: `skills/eventkit.md`
235
236User: "How do I let users pick a contact?"
237→ Read: `skills/contacts.md`
238
239User: "How do I pair a Bluetooth accessory without the permission prompt?"
240→ Read: `skills/accessorysetupkit.md`
241
242User: "How do I show the weather forecast with WeatherKit?" / "Why was my weather app rejected?"
243→ Read: `skills/weatherkit.md`
244
245User: "My VoIP app gets killed" / "How do I handle CallKit incoming calls?" / "How do I block spam callers?"
246→ Read: `skills/callkit-livecommunicationkit.md`
247
248User: "Review my in-app purchase implementation"
249→ Launch: `iap-auditor` agent