skill
claude-testflight-skill
Claude Code skill for one-command iOS TestFlight deployment via SSH
Set up
Skills are installed by placing their folder where your agent loads skills.
The download comes from github.com/KewkLW/claude-testflight-skill itself, not from our server, so what you get is exactly what its author published.
Install instructions come from the README
README
synced Oct 26, 2026claude-testflight-skill
A Claude Code skill that deploys iOS apps to TestFlight in one command. Works locally on a Mac or remotely via SSH to a Mac build host.
What it does
Type /testflight in Claude Code and it:
- Bumps the build number (auto-increment or explicit)
- Unlocks the keychain for codesigning
- Archives and exports an IPA
- Uploads to App Store Connect via
altool - Reports the delivery UUID
Works in two modes:
- Local — running Claude Code directly on a Mac. The deploy script runs on the same machine.
- Remote — running Claude Code on Windows/Linux. The skill SSHs to a Mac to build and upload.
Optional sync mode copies web assets (Capacitor, Ionic, etc.) to the build location before archiving.
Install
git clone https://github.com/KewkLW/claude-testflight-skill.git
cd claude-testflight-skill
./install.sh
This copies the skill into ~/.claude/skills/testflight/.
Manual install
mkdir -p ~/.claude/skills/testflight
cp skills/testflight/SKILL.md ~/.claude/skills/testflight/
Setup
1. Deploy script
Copy scripts/deploy-testflight.sh to your iOS project:
# Local mode — already on this Mac
cp scripts/deploy-testflight.sh ~/your-app/
chmod +x ~/your-app/deploy-testflight.sh
# Remote mode — copy to the build Mac
scp scripts/deploy-testflight.sh user@your-mac:~/your-app/
ssh user@your-mac "chmod +x ~/your-app/deploy-testflight.sh"
2. Configure your project
cp examples/.testflight.env.example /path/to/your/project/.testflight.env
# Edit .testflight.env with your values
Add .testflight.env to your .gitignore.
3. SSH access (remote mode only)
ssh-copy-id user@your-mac
ssh user@your-mac "echo ok"
Usage
| Command | Description |
|---|---|
/testflight | Auto-increment build number, archive, export, upload |
/testflight 42 | Deploy with build number 42 |
/testflight sync | Sync web assets first, then deploy |
Configuration reference
| Variable | Required | Description |
|---|---|---|
TF_MAC_HOST | No | local (default) or SSH user@host for remote builds |
TF_PROJECT_DIR | Yes | Project directory (local path or path on the Mac) |
TF_DEPLOY_SCRIPT | No | Deploy script filename (default: deploy-testflight.sh) |
TF_SCHEME | No | Xcode scheme (default: App) |
TF_XCODEPROJ | No | .xcodeproj filename (default: App.xcodeproj) |
TF_IOS_DIR | No | Override Xcode project location (default: <project>/ios/App) |
TF_API_KEY | Yes | App Store Connect API key ID |
TF_API_ISSUER | Yes | App Store Connect API issuer UUID |
TF_TEAM_ID | Yes | Apple Developer Team ID |
TF_KEYCHAIN_PASS | SSH/headless | Login keychain password (optional for local interactive use) |
TF_SYNC_SOURCE | Sync only | Directory to sync from |
TF_SYNC_DEST | Sync only | Directory to sync to |
TF_SYNC_FILES | No | Space-separated file list (default: sync all) |
Requirements
- Claude Code CLI, desktop app, or web app
- macOS with Xcode, valid signing identity, and App Store Connect API key
- For remote mode: SSH access from your dev machine to the Mac
Troubleshooting
| Error | Fix |
|---|---|
errSecInternalComponent | Keychain not unlocked — set TF_KEYCHAIN_PASS or approve the GUI prompt |
CURRENT_PROJECT_VERSION duplicate | Build number already uploaded — bump or let auto-increment handle it |
Missing code-signing certificate | Ensure security default-keychain -s runs before export |
| SSH timeout | Use LAN IP for build machines on the same network |
| Keychain GUI prompt (local) | Set TF_KEYCHAIN_PASS to skip the GUI prompt |
License
MIT — see LICENSE.