From apple-dev-skills
Guide AppKit app-structure decisions for macOS apps across app delegates, status-item menu bar apps, responder-chain menus, windows, controllers, restoration, archiving, Observation, and mixed AppKit/SwiftUI composition. Use when the user wants help deciding where AppKit responsibilities belong or how to avoid steering a macOS app into SwiftUI-only structure when AppKit owns the behavior.
How this skill is triggered — by the user, by Claude, or both
Slash command
/apple-dev-skills:appkit-app-architecture-workflowThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Provide a docs-first workflow for AppKit app-structure decisions in macOS apps.
agents/openai.yamlreferences/anti-patterns-and-corrections.mdreferences/app-delegate-and-lifecycle.mdreferences/appkit-mvc-target-action-and-bindings.mdreferences/architecture-decision-rules.mdreferences/archiving-persistence-and-migration.mdreferences/customization-flow.mdreferences/customization.template.yamlreferences/menu-bar-status-item-and-activation.mdreferences/menus-responder-chain-and-validation.mdreferences/mixed-appkit-swiftui-composition.mdreferences/observation-and-appkit.mdreferences/restoration-documents-and-workspaces.mdreferences/snippets/apple-xcode-project-core.mdreferences/windows-controllers-panels-and-inspectors.mdscripts/customization_config.pyProvide a docs-first workflow for AppKit app-structure decisions in macOS apps. This skill owns ownership-boundary guidance for AppKit lifetimes, menu bar apps, menus, responder-chain action routing, windows, controllers, restoration, archiving, AppKit MVC, Observation interop, and mixed AppKit/SwiftUI composition.
It is not the Apple-docs router, not the SwiftUI architecture workflow, not the accessibility workflow, and not the Xcode execution workflow.
For Xcode app source layout, keep UIKit/AppKit controller support view-adjacent:
Sources/Views/Shared, Sources/Views/macOS, and Sources/Views/iOS own view
surfaces, and controller support files use concatenated prefixed names such as GEAWhateverViewController.swift
beside their matching view. Do not collect ordinary app controller support in a
root Controllers/ directory.
NSApplication,
NSApplicationDelegate, app activation policy, app reopen behavior, menu bar
apps, NSStatusItem, status menus, popovers, panels, or quit behavior.NSWindowRestoration, window-controller restoration, document
reopening, and workspace reopening.NSSecureCoding, NSKeyedArchiver,
Codable, user defaults, files, Core Data, SwiftData, or another persistence
surface for AppKit-owned state.NSHostingView or
NSHostingController, or when exposing AppKit views to SwiftUI through
representable bridges.swiftui-app-architecture-workflow when the actual owner is
SwiftUI App, scenes, commands, focus, environment, preferences, or reusable
view composition.explore-apple-swift-docs when the user primarily needs Apple or
Swift documentation lookup rather than architecture guidance.xcode-build-run-workflow when the work becomes build, run,
preview, diagnostics, file-membership, or guarded mutation work in an existing
Xcode-managed project.xcode-testing-workflow when the work becomes Swift Testing,
XCTest, XCUITest, .xctestplan, or test diagnosis.apple-ui-accessibility-workflow when the work is primarily about
accessibility-specific implementation or review.Controllers/ directory used for ordinary view-controller support
instead of GEAWhateverViewController.swift beside the matching viewrequest: optional free-text task description used to classify the AppKit
architecture question.scope: optional explicit scope such as app-lifecycle, menu-bar,
menus, windows, restoration, mvc, archiving, observation, or
mixed-appkit-swiftui.repo_shape: optional high-level repo context such as xcode-app,
document-app, menu-bar-app, multiwindow-app, swiftpm-macos, or
unknown.swiftui_presence: optional emphasis such as none, hosted-in-appkit,
appkit-embedded-in-swiftui, or mixed-ownership.status
success: the request belongs to this workflow and a structure
recommendation is readyhandoff: the request belongs to another skill after AppKit-aware
classificationblocked: the request lacks enough context to recommend a boundary honestlypath_type
primary: the recommendation comes from a directly supported AppKit
architecture pathfallback: the recommendation depends on limited request context because
repo or app shape is unclearoutput
modelContainer, environment modelContext, @Query, model objects, and
bindings.NSKeyedArchiver, NSSecureCoding, Core Data, SwiftData,
user defaults, or plain files without naming what state is being persisted and
who reads it next.NotificationCenter, Combine, or other broadcast mechanisms
for ordinary parent-to-child ownership or local controller state.blocked when the request is too vague to determine whether the
issue is app-level, status-item-level, window-level, controller-level,
document-level, model-level, or hosted-SwiftUI structure.Recommend photos-library-editing-workflow for PhotosUI/AppKit picker selection and PhotoKit authorization, assets, requests, changes, saving, and editing while keeping AppKit window/controller ownership here.
Prefer explicit scope and repo shape when the user provides them.
Fall back to request-text inference when repo shape and app shape are unclear.
Recommend explore-apple-swift-docs when the real need is broader Apple or
Swift docs lookup.
Recommend swiftui-app-architecture-workflow when the real owner is SwiftUI
app, scene, command, focus, environment, preference, or view-composition
structure.
Recommend xcode-build-run-workflow when the next honest step is build, run,
preview, diagnostics, file-membership follow-through, signing, entitlements,
sandboxing, or guarded mutation.
Recommend xcode-testing-workflow when the next honest step is test execution
or test diagnosis.
Recommend apple-ui-accessibility-workflow when the next honest step is
accessibility-specific implementation or review.
Recommend SwiftASB skills when the AppKit question is specifically about adding, diagnosing, or explaining SwiftASB integration.
Use references/customization-flow.md.
scripts/customization_config.py exists to preserve the repo-wide
customization-file contract, but the first version of this skill defines no
runtime-enforced knobs.
Keep the first release focused on the decision model and the documented boundary. If future iterations add a real deterministic need for runtime knobs, document them explicitly before letting runtime behavior depend on them.
references/app-delegate-and-lifecycle.mdreferences/menu-bar-status-item-and-activation.mdreferences/menus-responder-chain-and-validation.mdreferences/windows-controllers-panels-and-inspectors.mdreferences/restoration-documents-and-workspaces.mdreferences/appkit-mvc-target-action-and-bindings.mdreferences/archiving-persistence-and-migration.mdreferences/observation-and-appkit.mdreferences/mixed-appkit-swiftui-composition.mdreferences/architecture-decision-rules.mdreferences/anti-patterns-and-corrections.mdreferences/customization-flow.mdexplore-apple-swift-docs when the user needs direct Apple-docs
lookup instead of AppKit architecture guidance.references/snippets/apple-xcode-project-core.md when the user
needs reusable repo policy rather than a one-off architecture recommendation.scripts/customization_config.pynpx claudepluginhub gaelic-ghost/socket --plugin apple-dev-skillsCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.