charlesjones-dev/claude-code-plugins-dev/swift-ci-scaffold
Claude Code and agent skill by charlesjones-dev/claude-code-plugins-dev
- community
Checking that the SKILL.md file is still in the repository.
Scaffold the repo side of Xcode Cloud for an XcodeGen or Tuist Swift project: generate ci_scripts/ci_post_clone.sh (regen plus guarded CI_BUILD_NUMBER stamping), propose a unit-test-only CI scheme, print the exact App Store Connect workflow checklist, and optionally install an opt-in .githooks/pre-push gate. Shows diffs and confirms before writing.
Install
npx vskill@latest install charlesjones-dev/claude-code-plugins-dev/swift-ci-scaffoldSKILL.md
Swift CI Scaffolder
You prepare the repo side of Xcode Cloud for a generator-based Swift project, and you fix the two build-system blockers that /swift-preflight flags: a missing/weak ci_post_clone.sh and a static build number. You also optionally install a local pre-push gate.
You cannot create or edit the Xcode Cloud workflow itself - those live in App Store Connect, not the repo. You scaffold what the repo can hold and print the exact UI steps for the rest.
Rules
- Non-destructive. Probe first, propose a diff, confirm, then write. Never overwrite an existing
ci_post_clone.sh,project.yml, or hook without showing the change and getting a yes. - Preserve the source of truth. On XcodeGen, edits go into
project.yml, never the pbxproj. Read the real deployed bundle id / team from the pbxproj first and make sureproject.ymlalready carries them (if not, tell the user to reconcile - see/swift-preflightCheck 1 - before you scaffold a regen step, because regen would otherwise revert their signing identity). - Idempotent. If a well-formed script/scheme/hook already exists, say so and offer to only patch the missing pieces.
Arguments
The text typed after the command holds the arguments. In Claude Code it is inserted here: $ARGUMENTS. In other agents, read it from the user's message. It may be empty.
path(optional) - repo root. Default: current working directory.--hook- jump straight to the pre-push hook step.
Phase 0: Probe
Detect the generator (xcodegen / tuist), platforms, existing ci_scripts/, the app + unit-test + UI-test targets, and the current CURRENT_PROJECT_VERSION. If the project is a plain .xcodeproj (no generator) or SwiftPM library, tell the user this scaffolder is for generator-based app projects on Xcode Cloud and stop. Suggest they run /swift-verify (with the same path, if they gave one) for the local gate instead; it's a command-only skill, so you can't run it for them.
Critical pre-check (XcodeGen drift): before proposing a regen-on-CI script, confirm project.yml already declares the real PRODUCT_BUNDLE_IDENTIFIER and DEVELOPMENT_TEAM that the pbxproj uses:
If project.yml is missing either, stop and warn: adding a CI regen step now would revert the hand-set signing identity and break the App Store record. Have the user copy the real values into project.yml settings.base first.
Phase 1: ci_scripts/ci_post_clone.sh
If absent or malformed, propose this (adapt generator and stamp target):
After writing, set the executable bit: chmod +x ci_scripts/ci_post_clone.sh.
Notes to surface:
- The
sedform above matches aCURRENT_PROJECT_VERSION:line inproject.yml. If the project version lives elsewhere (a base xcconfig, or only in the pbxproj), adapt the stamp target and tell the user. - For Tuist, swap
brew install xcodegen+xcodegen generateforbrew install tuist+tuist generate, and stamp wherever the version is declared. - Do not also enable App Store Connect auto-increment; pick one source of truth (this script).
Phase 2: Unit-test-only CI scheme
If a UI-test target exists and no unit-test-only shared scheme is present, propose adding one to project.yml schemes: (so it generates as shared). Example shape:
Explain: point the Xcode Cloud Test actions (iOS + macOS) at App-CI, keep the Archive action on the full App scheme. The scheme is only visible to Xcode Cloud after the commit that defines it is pushed.
Phase 3: App Store Connect workflow checklist (print, cannot automate)
Phase 4: Opt-in pre-push hook (only if user agrees, or --hook)
Offer, never force. If yes, write .githooks/pre-push (version-controlled, like a .githooks/ convention) that runs the local gate before a push:
If there is no scripts/verify.sh, inline the detected pipeline (xcodegen generate -> swiftformat --lint -> swiftlint --strict -> xcodebuild test on the cheapest destination). chmod +x .githooks/pre-push. Then tell the user to run git config core.hooksPath .githooks once per clone, and that --no-verify bypasses it (discouraged - fix the failure instead). Do not auto-run git config; that changes their git setup - tell them the command.
Output
Summarize what was written (with the diff already shown and confirmed), what was skipped because it already existed, and the remaining manual App Store Connect steps. End by suggesting a re-run of /swift-preflight to confirm the FAILs cleared.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/ai-swift/skills/swift-ci-scaffold/SKILL.md
Popularity
- Repository stars
- 32
- Repository forks
- 3
- 7-day trend score
- 17
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/charlesjones-dev/claude-code-plugins-dev/swift-ci-scaffold)