Skills have been living inside one app's repository, which means the next Xcode project starts without them and a copy is the only way to share. A marketplace makes them installable once at user scope. Two kinds of knowledge, handled differently. What Apple ships with Xcode stays Apple's: this repository carries a script that exports it from the locally installed Xcode rather than a copy, so nobody redistributes pre-release material and everyone's guidance matches their own SDK. What we learned by shipping goes in the skill, and only if it burned us — the file writes hidden in view bodies, the blobs that froze the main thread, the watch target that quietly stopped compiling, the test summary that reads as zero tests when eighty-four passed. Each of those cost real time twice before being written down. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
65 lines
2.0 KiB
Markdown
65 lines
2.0 KiB
Markdown
# pdat-xcode
|
|
|
|
A Claude Code plugin marketplace for Apple platform work.
|
|
|
|
## What is here
|
|
|
|
**`pdat-swift-practice`** — one skill, `xcode-practice`. Practices for
|
|
SwiftUI, Core Data, XcodeGen and Swift Testing that came out of shipping
|
|
apps: work that must not happen in a view `body`, blobs that must stay off
|
|
the main thread, derived collections computed once, Keychain access
|
|
outside view `init`, keeping every target of a multi-platform project
|
|
building, and reading test output correctly.
|
|
|
|
It deliberately does not restate Apple's own guidance. Where the two
|
|
overlap, Apple wins.
|
|
|
|
**`bin/export-apple-skills.sh`** — Xcode ships its own skills, written by
|
|
the framework teams. They are Apple's material, so this repository carries
|
|
a script to export them rather than a copy of them. Everyone exports from
|
|
the Xcode they have, which keeps the guidance matched to their SDK.
|
|
|
|
```sh
|
|
bin/export-apple-skills.sh .claude/skills
|
|
```
|
|
|
|
Xcode must be running or the export hangs.
|
|
|
|
## Install
|
|
|
|
```
|
|
/plugin marketplace add <url-of-this-repo>
|
|
/plugin install pdat-swift-practice@pdat-xcode
|
|
```
|
|
|
|
Install at user scope and it applies to every project, including ones that
|
|
do not exist yet.
|
|
|
|
To hand it to a team through a repository instead, put this in that
|
|
project's `.claude/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"extraKnownMarketplaces": {
|
|
"pdat-xcode": {
|
|
"source": { "source": "git", "url": "<url-of-this-repo>" }
|
|
}
|
|
},
|
|
"enabledPlugins": { "pdat-swift-practice@pdat-xcode": true }
|
|
}
|
|
```
|
|
|
|
Anyone who clones that project gets the skill without installing anything.
|
|
|
|
## Updating
|
|
|
|
Push a change, bump `version` in both `.claude-plugin/marketplace.json` and
|
|
`pdat-swift-practice/.claude-plugin/plugin.json`, then `/plugin marketplace
|
|
update` locally. Without the version bump, installs will not notice.
|
|
|
|
## Adding to the skill
|
|
|
|
The bar is deliberately high: something that actually went wrong, more than
|
|
once, and whose fix is not obvious from the framework documentation. A rule
|
|
nobody has been burned by is a rule nobody will follow.
|