diff --git a/docs/diagnostic/accessibility-diag.md b/docs/diagnostic/accessibility-diag.md index b564c8da..505aeecc 100644 --- a/docs/diagnostic/accessibility-diag.md +++ b/docs/diagnostic/accessibility-diag.md @@ -55,6 +55,14 @@ Diagnostic workflows for VoiceOver testing, Dynamic Type support, color contrast - Generated subtitles (iOS/macOS 27) — automatic on-device transcription/translation; your job is the subtitle-selection UI - Live subtitle style preview (iOS 26.4+) — `AVPlayerLayer`/`AVLegibleMediaOptionsMenuController`, `MACaptionAppearance` profiles +#### Resizable Windows & Desktop-Class +- VoiceOver reading order surviving layout changes (column collapse, resize) +- Table and grid navigation semantics (SwiftUI `Table`, `UIAccessibilityContainerDataTable`) +- Toolbar-overflow accessible names +- Button Shapes support in custom controls +- Large Content Viewer adoption for custom bars +- Full Keyboard Access and Switch Control depth testing + #### Assistive Access - Assistive Access support (iOS 17+, cognitive disabilities) diff --git a/docs/reference/swiftui-layout-ref.md b/docs/reference/swiftui-layout-ref.md index ecd2486d..d1efb996 100644 --- a/docs/reference/swiftui-layout-ref.md +++ b/docs/reference/swiftui-layout-ref.md @@ -27,6 +27,11 @@ Complete guide to all SwiftUI layout APIs for building adaptive interfaces, base - **Dynamic Type** – dynamicTypeSize.isAccessibilitySize - **ScaledMetric** – Scaled dimensions for accessibility +### Alignment & Text Under Width Pressure +- **alignmentGuide** – Per-view guide adjustment within a stack (iOS 13+) +- **Custom alignments** – `AlignmentID` semantic lines that align views across nested containers +- **layoutPriority / truncationMode / allowsTightening / minimumScaleFactor** – Controlling which text gives way, and how, when a window narrows + ### Window APIs - **Resizable windows everywhere** – iPhone apps resize too (Mac mirroring, iPhone-only on iPad) - **onInteractiveResizeChange** – Throttle work during a live resize drag (iOS 26+) diff --git a/docs/reference/transferable-ref.md b/docs/reference/transferable-ref.md index e670ec30..33cee37e 100644 --- a/docs/reference/transferable-ref.md +++ b/docs/reference/transferable-ref.md @@ -24,6 +24,8 @@ Questions you can ask Claude that will draw from this reference: - "How do I declare a custom UTType?" - "How do I accept dropped files in my view?" - "How do I add copy/paste support for my custom type?" +- "How do file promises work when dragging to Finder?" +- "My drop target stops working after the window resizes mid-drag" ## What's Covered @@ -37,6 +39,8 @@ Questions you can ask Claude that will draw from this reference: - **Clipboard** – `.copyable`, `.pasteDestination`, `.cuttable`, `PasteButton` - **UTType declarations** – System types, custom types, Info.plist entries - **UIKit bridging** – NSItemProvider.loadTransferable, UIActivityViewController +- **Promised files** – NSFilePromiseProvider / NSFilePromiseReceiver for drags to Finder (Mac) +- **Drop-target correctness under reflow** – keeping drop handling live through mid-drag window resizes ## Key Patterns diff --git a/docs/reference/typography-ref.md b/docs/reference/typography-ref.md index 45ad5c24..fe2b2fb1 100644 --- a/docs/reference/typography-ref.md +++ b/docs/reference/typography-ref.md @@ -29,6 +29,8 @@ Questions you can ask Claude that will draw from this reference: - "How do I use SF Mono for code?" - "What font widths are available in SF Pro?" - "How do I support Dynamic Type in my app?" +- "Why does the same text style render smaller on the Mac?" +- "Why does Chinese text clip in my fixed-height rows?" ## What's Covered @@ -60,6 +62,8 @@ Questions you can ask Claude that will draw from this reference: - Minimum sizes for legibility - Line height and tracking - Internationalization considerations +- Mac typographic density (measured text-style sizes vs iOS) +- CJK density in compact widths (line height, per-character wrapping, `typesettingLanguage`, Hangul word priority) ## Key Pattern diff --git a/docs/skills/games/spritekit.md b/docs/skills/games/spritekit.md index 856b3737..f1e965f5 100644 --- a/docs/skills/games/spritekit.md +++ b/docs/skills/games/spritekit.md @@ -28,6 +28,7 @@ Use this skill when: - "My frame rate is dropping, how do I optimize?" - "How do I integrate SpriteKit with SwiftUI?" - "Objects are passing through walls in my game" +- "My game distorts or letterboxes when the window is resized (iOS 27)" ## What This Skill Provides @@ -36,6 +37,7 @@ Use this skill when: - Anchor point mechanics for sprites and scenes - Node tree hierarchy with z-ordering layers - Camera node pattern for viewport control and HUD +- Scale-mode selection, and the resizable-window strategy (iOS 27): extend the world with `.resizeFill` + `didChangeSize`, or letterbox with `.aspectFit`, with resize-throttling guidance ### Physics Engine - Bitmask discipline (the #1 source of SpriteKit bugs) diff --git a/docs/skills/macos/ios-apps-on-mac.md b/docs/skills/macos/ios-apps-on-mac.md index a2cf165b..e166c6c7 100644 --- a/docs/skills/macos/ios-apps-on-mac.md +++ b/docs/skills/macos/ios-apps-on-mac.md @@ -21,12 +21,13 @@ Use this skill when: - "Why does my iOS app on Apple silicon report `isMacCatalystApp` as true?" - "What breaks when my iPhone app runs on a Mac?" - "Should I use Optimize Interface for Mac?" +- "How do I support ⌘P printing in my Catalyst app?" ## What This Skill Provides - A **decision tree** across the three paths: run unmodified, Catalyst, or a native SwiftUI/AppKit target - **Designed for iPad mechanics** – opt-out availability on the Mac App Store, single-touch synthesis, Touch Alternatives, hardware-gated frameworks that error at runtime, the idiom staying `.pad`/`.phone` -- **Catalyst adoption checklist** – interface-idiom choice (77% iPad scaling vs native Mac controls), `UIMenuBuilder` menu bar, `UITitlebar`/`NSToolbar` window chrome, Settings scene, hover and keyboard support +- **Catalyst adoption checklist** – interface-idiom choice (77% iPad scaling vs native Mac controls), `UIMenuBuilder` menu bar, `UITitlebar`/`NSToolbar` window chrome, Settings scene, hover and keyboard support, ⌘P printing (`UIPrintInteractionController`) - The **three runtime checks** disambiguated — `targetEnvironment(macCatalyst)` vs `isMacCatalystApp` vs `isiOSAppOnMac` ## Related diff --git a/docs/skills/macos/windows.md b/docs/skills/macos/windows.md index 1a82d698..1c339f9f 100644 --- a/docs/skills/macos/windows.md +++ b/docs/skills/macos/windows.md @@ -29,6 +29,9 @@ Questions you can ask Claude that will draw from this skill: - "Why does my app quit when I close the main window?" - "My `.defaultSize` is ignored on relaunch — is that a bug?" - "How do I make a floating Inspector window that stays above the main app?" +- "How do I show a subtitle under the window title?" +- "How do I get the draggable document proxy icon in my title bar?" +- "My window content is blurry after moving to another display" ## What This Skill Provides @@ -49,6 +52,11 @@ Questions you can ask Claude that will draw from this skill: - Why `defaultSize` is ignored once the user has resized — and why that's correct - `.windowResizability(.automatic / .contentSize / .contentMinSize)` +### Window Chrome and Displays +- `navigationTitle` / `navigationSubtitle` (macOS 11+; iOS 26+) and the `navigationDocument` proxy icon +- UIKit/AppKit peers: `UIDocumentProperties`, `NSWindow.title`/`.subtitle`/`.representedURL` +- Windows moving between displays with different scales — `\.displayScale`, `viewDidChangeBackingProperties`, scale-keyed cache invalidation + ### Toolbar and Window Styles - `.windowStyle(.automatic / .hiddenTitleBar / .titleBar)` - `.windowToolbarStyle(.unified / .unifiedCompact / .expanded)` and when each fits diff --git a/docs/skills/ui-design/swiftui-layout.md b/docs/skills/ui-design/swiftui-layout.md index 97087f85..a0c4ee49 100644 --- a/docs/skills/ui-design/swiftui-layout.md +++ b/docs/skills/ui-design/swiftui-layout.md @@ -21,6 +21,8 @@ Covers tool selection (ViewThatFits vs AnyLayout vs onGeometryChange), size clas - "Preparing app for iOS 26 window resizing" - "Should my iPhone app look like iPad in a wide window?" (iOS 27) - "My scroll position / selection / draft is lost when the window resizes" +- "My form's Confirm button is clipped off-screen when the window is short" +- "Text lines are unreadably wide in a large window" ## Key Patterns @@ -32,6 +34,8 @@ Covers tool selection (ViewThatFits vs AnyLayout vs onGeometryChange), size clas | Switch H↔V with animation | `AnyLayout` | | Read container size | `onGeometryChange` | | Custom layout algorithm | `Layout` protocol | +| Keep non-shrinkable content reachable in small windows | `ViewThatFits` + `ScrollView` fallback | +| Cap text line length in wide windows | Readable-width frame idiom | ### Anti-Patterns Prevented diff --git a/docs/skills/ui-design/toolbars.md b/docs/skills/ui-design/toolbars.md index 37858161..62f5b08a 100644 --- a/docs/skills/ui-design/toolbars.md +++ b/docs/skills/ui-design/toolbars.md @@ -32,6 +32,8 @@ Questions you can ask Claude that will draw from this skill: - "Why does the spacer between my toolbar items disappear when the bar overflows?" - "What does Apple's HIG say about Cancel and Done buttons in a sheet?" - "How do I control which toolbar items collapse into the overflow menu? (iOS 27)" +- "How do I make the navigation bar minimize as the user scrolls? (iOS 27)" +- "How do I wire up EditButton and editMode for my List?" ## What This Skill Provides @@ -52,6 +54,8 @@ Questions you can ask Claude that will draw from this skill: - Toolbar visibility, background material, and color scheme per bar - macOS `windowToolbarStyle` on the Scene (not the View) - Toolbar overflow & visibility priority — `ToolbarOverflowMenu`, `.visibilityPriority`, `.topBarPinnedTrailing` (iOS 27) +- Bar minimization on scroll — `toolbarMinimizationBehavior`, safe-area adjustment, and restoration, per `ToolbarPlacement` (iOS 27) +- `EditButton`/`editMode` wiring for List editing, and the direct-manipulation alternatives on the Mac ### HIG sheet button rules @@ -106,4 +110,4 @@ The `.primaryAction` placement adapts across platforms — top-trailing on iOS a **WWDC**: 2020-10146, 2021-10054, 2022-10054, 2024-10148, 2025-219, 2026-269 -**Docs**: /swiftui/toolbar, /swiftui/toolbaritem, /swiftui/toolbaritemgroup, /swiftui/toolbarspacer, /swiftui/toolbaritemplacement, /swiftui/toolbarrole, /swiftui/customizabletoolbarcontent, /swiftui/toolbaritemplacement/topbarpinnedtrailing, /swiftui/toolbaroverflowmenu, /swiftui/toolbaritemvisibilitypriority +**Docs**: /swiftui/toolbar, /swiftui/toolbaritem, /swiftui/toolbaritemgroup, /swiftui/toolbarspacer, /swiftui/toolbaritemplacement, /swiftui/toolbarrole, /swiftui/customizabletoolbarcontent, /swiftui/toolbaritemplacement/topbarpinnedtrailing, /swiftui/toolbaroverflowmenu, /swiftui/toolbaritemvisibilitypriority, /swiftui/view/toolbarminimizationbehavior(_:for:), /swiftui/editbutton diff --git a/docs/skills/ui-design/uikit-modernization.md b/docs/skills/ui-design/uikit-modernization.md index 798fb8e1..b9d4ddcf 100644 --- a/docs/skills/ui-design/uikit-modernization.md +++ b/docs/skills/ui-design/uikit-modernization.md @@ -30,6 +30,9 @@ Use this skill when: - "What goes in UIApplicationSceneManifest for a single-window app?" - "What should I clean up in sceneDidDisconnect?" - "How do I open a new window from UIKit code?" +- "How do I let users drag an item out to open it as a new window on iPad?" +- "Cmd-Z in one window undoes edits made in another window" +- "How do I disable Scribble on one text field?" - "Why was my upload rejected for a missing launch screen?" - "What's the View Annotations API for Siri?" @@ -37,11 +40,11 @@ Use this skill when: - The **scene-lifecycle requirement** at iOS 27 (apps without a `UISceneDelegate` no longer launch) and the migration path - **Info.plist configuration** – the `UIApplicationSceneManifest` structure, the launch-screen key validated at upload on the 27 SDK (TN3208), and destinations-vs-device-checks -- **Scene lifecycle edges** – `sceneDidDisconnect` teardown semantics, `UISceneSessionActivationRequest` window opening, per-scene `NSUserActivity` restoration, external-display scene roles, and the `displayGamut`/`legibilityWeight`/`activeAppearance` traits +- **Scene lifecycle edges** – `sceneDidDisconnect` teardown semantics, `UISceneSessionActivationRequest` window opening, drag-to-create-window (drag items carrying an `NSUserActivity`, gated on `NSUserActivityTypes`), per-window undo scoping, per-scene `NSUserActivity` restoration, external-display scene roles, and the `displayGamut`/`legibilityWeight`/`activeAppearance` traits - A **don't/do table** for replacing `UIScreen.main`, `screen.scale`, `screen.bounds`, idiom, and orientation with scene/trait/size-class equivalents -- The new iOS 27 additive APIs — `prominentTabIdentifier`, `UITabBarControllerSidebar.preferredPlacement`, `barMinimizationSafeAreaAdjustment`, `UIMenuElement.preferredImageVisibility`, `deviceMotionBody`/`headingBody` +- The new iOS 27 additive APIs — `prominentTabIdentifier`, `UITabBarControllerSidebar.preferredPlacement`, `navigationBarMinimization`, `UIMenuElement.preferredImageVisibility`, `deviceMotionBody`/`headingBody` - **iPhone Mirroring compatibility** – the always-portrait orientation trap, indirect trackpad/mouse input reaching custom gesture recognizers (`UIApplicationSupportsIndirectInputEvents`, scroll-type masks), companion Face ID approval on the Mac (iOS 18), and cross-device drag and drop -- **Desktop-class input** – `UIPointerInteraction` pointer effects, `UIHoverGestureRecognizer`, and `UIKeyCommand` with `discoverabilityTitle` for the hold-⌘ shortcut HUD +- **Desktop-class input** – `UIPointerInteraction` pointer effects, `UIHoverGestureRecognizer`, `UIKeyCommand` with `discoverabilityTitle` for the hold-⌘ shortcut HUD, and Scribble (`UIScribbleInteraction` / `UIIndirectScribbleInteraction`) for Pencil handwriting - Apple Intelligence touchpoints (menu "Ask Siri", View Annotations, drag-and-drop resource loading) - How to let Xcode 27's app-modernization agent do the mechanical rewrites