skills/apple-and-xcode-policies/SKILL.md
Use when touching Swift code, any .xcodeproj, an Xcode workspace, code-signing entitlements, or working in an Apple project that uses AgenticToolkit. Enforces Swift 6.2.x, XcodeGen-generated projects (project.yml is source of truth), /apple layout, code-signing rules, Swift file organization, and AgenticToolkit Loggable requirement. macOS only.
npx skillsauth add mikefullerton/catherding apple-and-xcode-policiesInstall 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.
All Swift code targets the latest patch release of Swift 6.2 (i.e. 6.2.x).
@Sendable, @MainActor, strict data-race safety.Three rules for Swift source files:
struct, class, enum, actor, or protocol per file. Child entities of that top-level entity are the only exception.extension Outer { ... }, not inside the outer entity's body.extension Foo: MyProtocol { }. Fall back to declaring the conformance on the primary type only when the compiler forbids extension-based conformance.For Apple projects that depend on AgenticToolkit, logging MUST go through the Loggable protocol:
Loggable.os.Logger / print / NSLog directly from types that should be observable — conform to Loggable, which gives each subsystem a unique log category.Multi-platform repos use top-level platform directories. Create only the ones the repo needs:
/apple
/windows
/android
Each Apple project lives in its own subdirectory under /apple:
/apple/ProjectName1/
/apple/ProjectName2/
Platform-specific code, projects, and tooling live exclusively under their platform directory.
XcodeGen-generated Xcode projects. All Apple code — reusable libraries and shipping products alike — is described by a hand-edited project.yml; the .xcodeproj is generated from it via XcodeGen.
project.yml is the source of truth. It is checked into the repo and edited directly. Run xcodegen generate to (re)build the .xcodeproj after any change to project.yml or after adding/removing source files..xcodeproj is also checked in for IDE convenience and so the workspace works without a generation step, but never edit it by hand — re-run XcodeGen instead. If the two diverge, project.yml wins.Package.swift files. External SPM dependencies consumed from GitHub are still fine — declared in project.yml under packages: and added to targets via dependencies: - package: ….project.yml under each target's dependencies: with project: …)./apple must contain a single .xcworkspace that aggregates every Xcode project in the repo:
.xcodeproj directly under /apple/<ProjectName>/ → include.mikefullerton (Temporal Apple Developer account).Full rationale across these policy files in ~/projects/active/catherding/policies/workflow/apple-platform-development/:
project.yml is source of truth) + single .xcworkspaceStart at INDEX.md to navigate.
development
Use whenever writing, modifying, refactoring, or reviewing code, or when making any design decision — including small ones. Loads the 21 cookbook principles (simplicity, yagni, fail-fast, explicit-over-implicit, separation-of-concerns, design-for-deletion, etc.) as heuristics for judgment calls about code shape, module boundaries, and what to build. Applies across all languages and project types.
tools
Toggle per-session YOLO mode (auto-approve permissions with configurable deny list). Use when --dangerously-skip-permissions is broken. /yolo on, /yolo off, /yolo install, /yolo uninstall, /yolo configure, /yolo status
development
Use when authoring or modifying install/uninstall scripts, or when creating a /setup directory for a repo that requires developer setup steps. Enforces the /setup layout, install/uninstall naming, and supporting-files location.
testing
Use when creating a new repo (git init, gh repo create, scaffolding a new project) or when a repo is missing README/LICENSE/.gitignore/.claude/CLAUDE.md. Enforces the "every repo must have" checklist and documentation layout.