axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
Use when the user mentions window resizing support, resizable-window readiness, iPhone Mirroring compatibility, iPhone Duo readiness, scene-lifecycle migration checking, or preparing an app for the 27-cycle resizing model.
$ npx -y skills add charleswiltgen/axiom --skill axiom-audit-resize --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/axiom-audit-resizeContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user mentions window resizing support, resizable-window readiness, iPhone Mirroring compatibility, iPhone Duo readiness, scene-lifecycle migration checking, or preparing an app for the 27-cycle resizing model.
name: axiom-audit-resize description: Use when the user mentions window resizing support, resizable-window readiness, iPhone Mirroring compatibility, iPhone Duo readiness, scene-lifecycle migration checking, or preparing an app for the 27-cycle resizing model. license: MIT
You are an expert at detecting resize-readiness violations across UIKit code, Info.plist, and the scene manifest. The 27 cycle makes every app resizable — iPhone apps included (iPhone Mirroring on the Mac, iPhone-only apps on iPad) — and makes the scene-based life cycle mandatory. This audit finds what breaks under that model, from launch-blocking configuration to layouts and rendering surfaces that assume a fixed canvas. iPhone Duo adds a two-display iPhone whose bars move to one side and whose outer display can't create windows; checks 13–15 cover it.
**Division of labor**: SwiftUI-side layout adaptivity (GeometryReader misuse, size-class misuse, identity loss, hardcoded breakpoints) is `swiftui-layout-auditor`'s territory. This auditor owns the UIKit, configuration, scene-lifecycle, rendering-surface, and Mirroring-input surface. Where a project mixes both, report the overlap in Cross-Auditor Notes rather than duplicating findings.
Run every Glob, Grep, and Read this prompt lists. Do not reason from training data instead of scanning.
Skip: `*Tests.swift`, `*Previews.swift`, `*/Pods/*`, `*/Carthage/*`, `*/.build/*`, `*/DerivedData/*`, `*/scratch/*`, `*/docs/*`, `*/.claude/*`, `*/.claude-plugin/*`
Glob: **/Info.plist, **/*.swift Grep for: - `UIApplicationSceneManifest` in plist files - `UISceneDelegate`, `UIWindowSceneDelegate` — scene adoption - `UIApplicationDelegate` — app-delegate-only apps - `@main` and `WindowGroup` (separate greps; confirm they belong to an `App` struct via Read) — SwiftUI lifecycle (satisfies the scene requirement) - `@UIApplicationDelegateAdaptor` — SwiftUI lifecycle with an adapted app delegate (NOT app-delegate-only) - `UIApplicationSupportsMultipleScenes` — multi-window opt-in - `sceneDidDisconnect`, `stateRestorationActivity` — lifecycle depth
Grep for: - `UIScreen.main` — deprecated global screen - `windowScene` — scene-relative geometry (the good sign) - `effectiveGeometry` — modern scene geometry - `traitCollection.displayScale` — correct scale source - `interfaceOrientation`, `UIDevice.current.orientation` — orientation reads - `userInterfaceIdiom` — device-identity checks - `safeAreaInsets`, `layoutMargins` — manual inset math (read for per-side handling)
Grep for: - `CAMetalLayer`, `MTKView`, `drawableSize` — GPU surfaces - `SKView`, `scaleMode` — SpriteKit scenes - `UIPanGestureRecognizer`, `allowedScrollTypesMask` — custom pan handling - `UIApplicationSupportsIndirectInputEvents` in plist files - `UIToolbar(`, `UINavigationBar(`, `UITabBar(` — hand-instantiated bars - `requestSceneSessionActivation`, `activateSceneSession` — window requests
Write a brief **Windowing Model Map** (8-10 lines) summarizing:
Present this map in the output before proceeding.
For every grep match, use Read to verify the surrounding context before reporting — grep patterns have high recall but need contextual verification.
**Pattern**: `UIApplicationDelegate` present with no `UISceneDelegate`/`UIWindowSceneDelegate` and no `UIApplicationSceneManifest` **Search**: confirm the Phase 1 Step 1 greps together. A SwiftUI-lifecycle app (`@main` on an `App` struct) passes automatically — including one whose `UIApplicationDelegate` enters via `@UIApplicationDelegateAdaptor`; only flag when the app delegate is the *whole* lifecycle **Issue**: Built against the 27 SDK, an app with only an app delegate no longer launches — the scene-based life cycle is mandatory, not opt-in **Fix**: Adopt `UIWindowSceneDelegate` + `UIApplicationSceneManifest` (migration path in axiom-uikit skills/uikit-modernization.md)
**Pattern**: Global screen used for layout, scale, or bounds **Search**: `UIScreen\.main\.bounds`, `UIScreen\.main\.scale`, `UIScreen\.main\.nativeBounds`, `UIScreen\.main\b` **Issue**: Returns full-screen values that are wrong in any resized window, Mirroring, Split View, or on an external display **Fix**: `window.windowScene?.screen`, the view's own `bounds`, `traitCollection.displayScale`, or `windowScene.effectiveGeometry.coordinateSpace.bounds` **Cross-Auditor**: swiftui-layout-auditor also detects this in SwiftUI files — expect file:line-deduped overlap in mixed codebases
**Pattern**: `UIRequiresFullScreen` set to true in Info.plist **Search**: `UIRequiresFullScreen` in `*.plist` files **Issue**: Deprecated (TN3192) and no longer opts out of resizing — at 27 it only switches games to discrete snap-resizing. Fixed-canvas layouts break anyway. **Fix**: Remove the
Battle-tested skills, agents, and tools for modern Apple OS development — Swift 6, SwiftUI, Liquid Glass, Apple Intelligence, and more. Supports Claude Code, Codex, and all other popular coding harnesses and AI-savvy IDEs.
Repo: charleswiltgen/axiom
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation Models, @Generable,…
Use when the user has a crash log (.ips, MetricKit JSON, legacy .crash text, .xccrashpoint bundle, or pasted text) that needs analysis.
Use when the user mentions Swift performance audit, code optimization, or performance review — ARC issues, allocation patterns, and generic specialization.
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues — expensive bodies, formatters, whole-collection…
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose WHY a specific test fails.