home / skills / willsigmon / sigstack / app-store-connect-expert

app-store-connect-expert skill

/plugins/ios-dev/skills/app-store-connect-expert

This skill automates App Store submissions and metadata management using App Store Connect API and Fastlane for streamlined release workflows.

npx playbooks add skill willsigmon/sigstack --skill app-store-connect-expert

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.8 KB
---
name: App Store Connect Expert
description: App Store Connect API - metadata, screenshots, release automation
allowed-tools: Read, Edit, Bash, WebFetch
model: sonnet
---

# App Store Connect Expert

Automate App Store submissions with the Connect API.

## API Setup

### Create API Key
1. App Store Connect → Users and Access → Keys
2. Generate new key with appropriate role
3. Download .p8 file (only once!)

### Environment Variables
```bash
export ASC_KEY_ID="XXXXXXXXXX"
export ASC_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export ASC_KEY_PATH="~/.appstore/AuthKey_XXXXXXXXXX.p8"
```

## Fastlane Integration

### Deliver (Metadata & Screenshots)
```ruby
lane :metadata do
  deliver(
    submit_for_review: false,
    automatic_release: false,
    force: true,
    metadata_path: "./fastlane/metadata",
    screenshots_path: "./fastlane/screenshots"
  )
end
```

### Metadata Structure
```
fastlane/
├── metadata/
│   ├── en-US/
│   │   ├── name.txt
│   │   ├── subtitle.txt
│   │   ├── description.txt
│   │   ├── keywords.txt
│   │   ├── promotional_text.txt
│   │   ├── privacy_url.txt
│   │   └── support_url.txt
│   └── ja/
│       └── ...
└── screenshots/
    └── en-US/
        ├── iPhone 6.5"/
        ├── iPhone 5.5"/
        └── iPad Pro 12.9"/
```

## Screenshot Automation

### Fastlane Snapshot
```ruby
# Snapfile
devices([
  "iPhone 15 Pro Max",
  "iPhone 8 Plus",
  "iPad Pro (12.9-inch) (6th generation)"
])

languages([
  "en-US",
  "ja"
])

scheme("AppUITests")
output_directory("./fastlane/screenshots")
```

### Run Snapshots
```bash
fastlane snapshot
```

### Frame Screenshots
```ruby
lane :frames do
  frameit(
    white: true,
    path: "./fastlane/screenshots"
  )
end
```

## Release Automation

### Submit for Review
```ruby
lane :release do
  deliver(
    submit_for_review: true,
    automatic_release: true,
    submission_information: {
      add_id_info_uses_idfa: false
    },
    precheck_include_in_app_purchases: false
  )
end
```

### Phased Release
```ruby
deliver(
  phased_release: true,
  automatic_release: true
)
```

## App Store Connect CLI

### Installation
```bash
brew install app-store-connect-cli
# Or
pip install appstoreconnect
```

### List Apps
```bash
asc apps list
```

### Get Build Status
```bash
asc builds list --app-id 123456789
```

## API Direct Access

### JWT Token Generation
```python
import jwt
import time

def generate_token():
    headers = {
        "alg": "ES256",
        "kid": KEY_ID,
        "typ": "JWT"
    }

    payload = {
        "iss": ISSUER_ID,
        "exp": int(time.time()) + 1200,  # 20 minutes
        "aud": "appstoreconnect-v1"
    }

    with open(KEY_PATH, 'r') as f:
        private_key = f.read()

    return jwt.encode(payload, private_key,
                      algorithm='ES256', headers=headers)
```

### API Request
```python
import requests

token = generate_token()
response = requests.get(
    "https://api.appstoreconnect.apple.com/v1/apps",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
)
```

## Roles & Permissions

| Role | Capabilities |
|------|-------------|
| Admin | Everything |
| App Manager | Manage apps, no financials |
| Developer | Builds, TestFlight |
| Marketing | Metadata, screenshots |
| Sales | Reports, analytics |

## Common Automations

### Nightly Build Info
```ruby
lane :check_status do
  latest = latest_testflight_build_number
  puts "Latest build: #{latest}"

  # Check review status
  # ... API call
end
```

### Auto-Reply Reviews
```ruby
# Note: App Store Connect doesn't support this via API
# Use third-party tools like AppFollow
```

Use when: App Store submission, metadata management, screenshot automation

Overview

This skill automates App Store Connect workflows using the App Store Connect API, Fastlane, and CLI tools. It focuses on metadata management, screenshot generation and framing, and release automation including phased releases and submission. The guidance covers API key setup, JWT usage, and practical Fastlane lanes to integrate into CI pipelines.

How this skill works

It inspects and manipulates App Store Connect resources via the official API and tools: it creates JWT tokens from a .p8 key for direct API calls, uses Fastlane deliver and snapshot to upload metadata and screenshots, and invokes the App Store Connect CLI for quick queries. Lanes and scripts are designed to run in CI: export environment variables, run snapshots, frame images, then deliver metadata and optionally submit builds for review or phased release.

When to use it

  • Automating app submissions from CI/CD pipelines
  • Managing localized metadata and bulk screenshot uploads
  • Generating consistent device screenshots from UI tests
  • Implementing nightly checks for latest TestFlight builds
  • Orchestrating phased or automatic releases

Best practices

  • Store ASC_KEY_ID, ASC_ISSUER_ID and ASC_KEY_PATH as secure environment variables in CI
  • Use Fastlane metadata and screenshots folders to track localization and version-controlled assets
  • Run fastlane snapshot in an emulated/test environment and frame screenshots before uploading
  • Keep JWT token lifetimes short (e.g., 20 minutes) and generate them per CI job
  • Assign minimal App Store Connect roles required for automation; use Marketing role for metadata-only jobs

Example use cases

  • CI pipeline runs UI tests to produce screenshots, frames them, and uploads localized screenshots and metadata via fastlane deliver
  • Generate a short-lived JWT in a deployment job, query builds with asc CLI, and gate release on build status
  • Nightly job prints latest TestFlight build number and triggers smoke tests when a new build appears
  • Release lane that submits a build for review with IDFA flags set and enables phased release for staged rollout

FAQ

How do I securely store the .p8 API key for CI?

Keep the .p8 file in a secure secrets store or encrypted CI variable and reference it by path via ASC_KEY_PATH; avoid committing the key to version control.

Can the API auto-reply to App Store reviews?

No—App Store Connect does not expose review replies via the API. Use third-party services for review management and automated responses.