skills/generators/ci-cd-setup/SKILL.md
Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps. Use when setting up GitHub Actions, Xcode Cloud, or fastlane for continuous integration, TestFlight, or App Store deployment.
npx skillsauth add rshankras/claude-code-apple-skills ci-cd-setupInstall 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.
Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps.
Before generating, verify:
Existing CI Configuration
# Check for existing CI files
ls -la .github/workflows/ 2>/dev/null
ls -la ci_scripts/ 2>/dev/null
ls -la fastlane/ 2>/dev/null
Project Structure
# Find Xcode project/workspace
find . -name "*.xcodeproj" -o -name "*.xcworkspace" | head -5
Package Manager
# Check for SPM vs CocoaPods
ls Package.swift 2>/dev/null
ls Podfile 2>/dev/null
.github/workflows/
├── build-test.yml # PR checks, unit tests
├── deploy-testflight.yml # TestFlight deployment
└── deploy-appstore.yml # App Store submission
ci_scripts/
├── ci_post_clone.sh # Post-clone setup
└── ci_pre_xcodebuild.sh # Pre-build configuration
fastlane/
├── Fastfile # Lane definitions
├── Appfile # App configuration
└── Matchfile # Code signing (if using match)
.swiftlint.yml # from templates/swiftlint/swiftlint.yml
Skills in this library may ship graduated enforcement as a
rules/swiftlint.yml fragment (opt_in_rules + custom_rules) — prose
rules turned into deterministic lint. When generating .swiftlint.yml:
templates/swiftlint/swiftlint.yml.skills/<category>/<skill>/rules/swiftlint.yml; append its
custom_rules entries and union its opt_in_rules.observable_object_legacy
applies only to iOS 17+/macOS 14+ deployment targets, and
xctest_in_unit_tests must keep its UITests exclusion (XCUITest
legitimately requires XCTest).build-test.yml runs the lint job automatically once
.swiftlint.yml exists (if: hashFiles('.swiftlint.yml') != '').Current fragments: security/ (hardcoded secrets), ios/coding-best-practices
(print-in-production, legacy ObservableObject, force_unwrapping/force_try),
testing/tdd-feature (XCTest scoped out of unit tests),
swift/concurrency (@unchecked Sendable without justification).
Add Repository Secrets (Settings > Secrets and variables > Actions):
APP_STORE_CONNECT_API_KEY_ID - API Key IDAPP_STORE_CONNECT_API_ISSUER_ID - Issuer IDAPP_STORE_CONNECT_API_KEY_CONTENT - Private key (.p8 content)CERTIFICATE_P12 - Base64-encoded .p12 certificateCERTIFICATE_PASSWORD - Certificate passwordPROVISIONING_PROFILE - Base64-encoded provisioning profileCreate App Store Connect API Key:
Export Certificate:
# Export from Keychain as .p12, then base64 encode
base64 -i certificate.p12 | pbcopy
Enable Xcode Cloud in Xcode:
Configure Workflow:
Add ci_scripts to repository for customization
Install fastlane:
brew install fastlane
Initialize (if starting fresh):
fastlane init
Set up match (optional, for code signing):
fastlane match init
fastlane match development
fastlane match appstore
development
US web checkout via the StoreKit External Purchase Link entitlement — currently 0% Apple commission (litigation ongoing), how to ship it safely, and how to architect for a commission flip so a future ruling is a config change, not a rewrite. Use when adding external purchase links, weighing web checkout vs IAP, or planning US-storefront pricing strategy.
tools
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School & Business Manager. Use when a developer has multiple apps, a subscription worth sharing, complementary indie partners, or school/clinic/business buyers.
testing
Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.
tools
Stage-by-stage audit of an app's App Store growth machinery against a 54-item P0–P9 playbook — every item scored from an App Store Connect MCP call, a codebase check, or an explicit question to the user, then routed to the skill or command that fixes it. Read-only on App Store Connect. Use for a growth audit or scorecard, a pre-launch growth plan, a quarterly re-audit, or "which growth levers am I missing."