skills/ios/ipad-patterns/SKILL.md
iPadOS-specific patterns including Stage Manager, multi-window, drag and drop, keyboard shortcuts, pointer interactions, and Apple Pencil support. Use when building iPad-optimized features.
npx skillsauth add rshankras/claude-code-apple-skills ipad-patternsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive guide for iPadOS-specific development patterns. Covers multitasking (Stage Manager, Split View, Slide Over), multi-window support, drag and drop, keyboard shortcuts, pointer interactions, Apple Pencil, and external display support. These patterns differentiate an iPad-optimized app from a scaled-up iPhone app.
What iPad feature are you building?
|
+-- Multi-window / Stage Manager / UIScene lifecycle
| +-- multitasking.md
| +-- Scene configuration, requestSceneSessionActivation
| +-- Window management, scene delegates
|
+-- Split View / Slide Over / Adaptive Layout
| +-- multitasking.md
| +-- Size classes, compact/regular transitions
| +-- NavigationSplitView column widths
|
+-- Drag and Drop
| +-- drag-drop.md
| +-- SwiftUI: .draggable() / .dropDestination()
| +-- UIKit: UIDragInteraction / UIDropInteraction
| +-- Transferable protocol, NSItemProvider
|
+-- Keyboard Shortcuts
| +-- input-methods.md
| +-- SwiftUI: .keyboardShortcut()
| +-- UIKit: UIKeyCommand
| +-- Discoverability overlay (Cmd hold)
|
+-- Pointer / Trackpad Interactions
| +-- input-methods.md
| +-- .hoverEffect(), UIPointerInteraction
| +-- Custom pointer shapes, lift/highlight effects
|
+-- Apple Pencil / PencilKit
| +-- input-methods.md
| +-- PKCanvasView, PKDrawing
| +-- Touch type filtering, Scribble
|
+-- External Display
+-- multitasking.md
+-- WindowGroup for external scenes
+-- UIScreen notifications (legacy)
| API | Minimum Version | Reference |
|-----|----------------|-----------|
| UIScene / UISceneDelegate | iPadOS 13 | multitasking.md |
| UISceneConfiguration | iPadOS 13 | multitasking.md |
| UIUserInterfaceSizeClass | iPadOS 8 | multitasking.md |
| NavigationSplitView | iPadOS 16 | multitasking.md |
| .horizontalSizeClass / .verticalSizeClass | iPadOS 14 (SwiftUI) | multitasking.md |
| .hoverEffect() | iPadOS 13 | input-methods.md |
| .keyboardShortcut() | iPadOS 14 | input-methods.md |
| PencilKit (PKCanvasView) | iPadOS 13 | input-methods.md |
| .draggable() / .dropDestination() | iPadOS 16 | drag-drop.md |
| Transferable protocol | iPadOS 16 | drag-drop.md |
| UIDragInteraction / UIDropInteraction | iPadOS 11 | drag-drop.md |
| NSItemProvider | iPadOS 11 | drag-drop.md |
| WindowGroup (multi-window) | iPadOS 16 (SwiftUI lifecycle) | multitasking.md |
| .handlesExternalEvents | iPadOS 14 | multitasking.md |
| UISceneSession.requestSceneSessionActivation | iPadOS 13 | multitasking.md |
| .focusable() / @FocusState | iPadOS 15 | input-methods.md |
| FocusedValue / FocusedObject | iPadOS 16 | input-methods.md |
| # | Mistake | Fix | Details |
|---|---------|-----|---------|
| 1 | Ignoring size classes, building fixed layouts | Use @Environment(\.horizontalSizeClass) to adapt between compact and regular | multitasking.md |
| 2 | No keyboard shortcuts for common actions | Add .keyboardShortcut() to primary actions (Cmd+N, Cmd+S, Delete) | input-methods.md |
| 3 | Missing drag and drop on list/grid items | Add .draggable() and .dropDestination() for content types users expect to move | drag-drop.md |
| 4 | No hover effects on interactive elements | Add .hoverEffect() to buttons, list rows, and custom controls | input-methods.md |
| 5 | Not supporting multiple windows (single-scene only) | Add WindowGroup support and handle NSUserActivity for state restoration | multitasking.md |
| Area | Rule | |------|------| | Adaptive navigation | The tab bar can morph into a sidebar -- use a sidebar for deep or nested content hierarchies, a tab bar when the app is compact and content-forward | | Immersion | Run content under the toolbar/sidebar with a scroll edge effect so a floating window still feels edge-to-edge | | Window controls | Wrap the toolbar around the window controls on the leading edge instead of reserving a safe-area strip above the content | | Documents | Each document opens in ITS OWN window, never "in place" -- and every window gets a unique, descriptive name so the app menu's window list stays navigable | | Pointer | Test with the pointer -- it is 1:1 precise with no magnetizing or rubber-banding to targets, so dense hit areas that survive touch forgiveness can still fail | | Menu bar | Order menu items by frequency of use (not alphabetically); push secondary actions into submenus; populate the View menu with tabs, their keyboard shortcuts, and sidebar toggles |
Read the user's code or requirements to determine:
Based on the need, read from this directory:
multitasking.md -- Stage Manager, multi-window, Split View, Slide Over, size classes, external displayinput-methods.md -- Keyboard shortcuts, pointer interactions, Apple Pencil, focus systemdrag-drop.md -- Drag and drop, Transferable protocol, NSItemProviderApply patterns from the reference files. Check for common issues using the review checklist below.
ios/navigation-patterns/navigation-split-view.mdmacos/coding-best-practices/swiftui/toolbars/SKILL.mddesign/animation-patterns/When reviewing code for iPad optimization, verify:
.keyboardShortcut() modifiers.hoverEffect().draggable() and .dropDestination()NavigationSplitView column widths appropriate for iPad.frame(minWidth:idealWidth:maxWidth:) or geometry-based sizing.primaryAction, .secondaryAction, or .keyboard as appropriatedevelopment
US web checkout via the StoreKit External Purchase Link entitlement — currently 0% Apple commission (litigation ongoing), how to ship it safely, and how to architect for a commission flip so a future ruling is a config change, not a rewrite. Use when adding external purchase links, weighing web checkout vs IAP, or planning US-storefront pricing strategy.
tools
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School & Business Manager. Use when a developer has multiple apps, a subscription worth sharing, complementary indie partners, or school/clinic/business buyers.
testing
Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.
tools
Stage-by-stage audit of an app's App Store growth machinery against a 54-item P0–P9 playbook — every item scored from an App Store Connect MCP call, a codebase check, or an explicit question to the user, then routed to the skill or command that fixes it. Read-only on App Store Connect. Use for a growth audit or scorecard, a pre-launch growth plan, a quarterly re-audit, or "which growth levers am I missing."