| name | ci-cd-setup |
| description | 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. |
| allowed-tools | ["Read","Write","Edit","Glob","Grep","Bash","AskUserQuestion"] |
CI/CD Setup Generator
Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps.
When This Skill Activates
- User wants to automate their build and test process
- User mentions GitHub Actions, Xcode Cloud, or fastlane
- User wants to set up TestFlight or App Store deployment
- User asks about continuous integration for their app
Pre-Generation Checks
Before generating, verify:
-
Existing CI Configuration
ls -la .github/workflows/ 2>/dev/null
ls -la ci_scripts/ 2>/dev/null
ls -la fastlane/ 2>/dev/null
-
Project Structure
find . -name "*.xcodeproj" -o -name "*.xcworkspace" | head -5
-
Package Manager
ls Package.swift 2>/dev/null
ls Podfile 2>/dev/null
Configuration Questions
1. CI/CD Platform
- GitHub Actions (Recommended) - Full control, extensive marketplace
- Xcode Cloud - Native Apple integration, simpler setup
- Both - GitHub for PRs/tests, Xcode Cloud for releases
2. Distribution Method
- TestFlight - Beta testing via App Store Connect
- App Store - Production releases
- Direct (macOS only) - Notarized DMG/PKG distribution
- All - Full pipeline from dev to production
3. Include fastlane?
- Yes - Advanced automation, match for code signing
- No - Simpler setup using xcodebuild directly
4. Code Signing Approach
- Manual - Certificates in GitHub Secrets
- match (fastlane) - Git-based certificate management
- Xcode Cloud Managed - Apple handles signing
Generated Files
GitHub Actions
.github/workflows/
├── build-test.yml # PR checks, unit tests
├── deploy-testflight.yml # TestFlight deployment
└── deploy-appstore.yml # App Store submission
Xcode Cloud
ci_scripts/
├── ci_post_clone.sh # Post-clone setup
└── ci_pre_xcodebuild.sh # Pre-build configuration
fastlane
fastlane/
├── Fastfile # Lane definitions
├── Appfile # App configuration
└── Matchfile # Code signing (if using match)
Integration Steps
GitHub Actions Setup
-
Add Repository Secrets (Settings > Secrets and variables > Actions):
APP_STORE_CONNECT_API_KEY_ID - API Key ID
APP_STORE_CONNECT_API_ISSUER_ID - Issuer ID
APP_STORE_CONNECT_API_KEY_CONTENT - Private key (.p8 content)
CERTIFICATE_P12 - Base64-encoded .p12 certificate
CERTIFICATE_PASSWORD - Certificate password
PROVISIONING_PROFILE - Base64-encoded provisioning profile
-
Create App Store Connect API Key:
- Go to App Store Connect > Users and Access > Keys
- Generate API Key with "App Manager" role
- Download the .p8 file (only available once)
-
Export Certificate:
base64 -i certificate.p12 | pbcopy
Xcode Cloud Setup
-
Enable Xcode Cloud in Xcode:
- Product > Xcode Cloud > Create Workflow
- Connect to App Store Connect
-
Configure Workflow:
- Set start conditions (branch, PR, tag)
- Configure environment variables
- Set up post-actions (TestFlight, App Store)
-
Add ci_scripts to repository for customization
fastlane Setup
-
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
Best Practices
Caching
- Cache Swift Package Manager dependencies
- Cache DerivedData for faster builds
- Use selective caching to avoid stale artifacts
Secrets Management
- Never commit certificates or keys
- Use environment variables for sensitive data
- Rotate API keys periodically
Build Optimization
- Use incremental builds where possible
- Parallelize test execution
- Skip unnecessary steps on draft PRs
Notifications
- Slack/Discord integration for build status
- Email notifications for failures
- GitHub status checks for PRs
References