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 skills add https://github.com/rshankras/claude-code-apple-skills --skill ipad-patterns
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 appropriateIntegration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take rshankras/ipad-patterns from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.