App Store Connect

Apple App Store submission and management expertise

509 stars

Best use case

App Store Connect is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Apple App Store submission and management expertise

Teams using App Store Connect should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/app-store-connect/SKILL.md --create-dirs "https://raw.githubusercontent.com/a5c-ai/babysitter/main/library/specializations/mobile-development/skills/app-store-connect/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/app-store-connect/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How App Store Connect Compares

Feature / AgentApp Store ConnectStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Apple App Store submission and management expertise

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# App Store Connect Skill

## Overview

This skill provides comprehensive capabilities for Apple App Store submission and management. It enables interaction with App Store Connect API, metadata management, TestFlight distribution, and app lifecycle management.

## Allowed Tools

- `bash` - Execute xcrun, altool, and Transporter commands
- `read` - Analyze app metadata and configuration files
- `write` - Generate metadata files and API configurations
- `edit` - Update app store metadata
- `glob` - Search for metadata and screenshot files
- `grep` - Search for patterns in configurations

## Capabilities

### App Store Connect API

1. **API Authentication**
   - Configure API keys and JWT tokens
   - Implement token refresh logic
   - Handle rate limiting
   - Configure team and issuer IDs

2. **App Management**
   - Create and manage app records
   - Configure app capabilities
   - Manage bundle IDs
   - Handle app transfers

### Build Management

3. **Build Upload**
   - Upload builds via Transporter
   - Configure altool uploads
   - Handle build processing status
   - Manage build metadata
   - Configure App Store connect upload

4. **Build Information**
   - Track build processing
   - Configure build usage compliance
   - Manage export compliance
   - Handle build expiration

### TestFlight

5. **Beta Distribution**
   - Configure internal testing groups
   - Manage external beta testers
   - Set up beta build distribution
   - Handle beta app review
   - Configure test information

6. **Beta Feedback**
   - Collect crash reports
   - Manage feedback submissions
   - Track tester engagement
   - Analyze beta metrics

### Metadata Management

7. **App Information**
   - Configure app name and subtitle
   - Set primary and secondary categories
   - Manage age ratings
   - Configure privacy policy URLs
   - Set support and marketing URLs

8. **Version Metadata**
   - Write descriptions and keywords
   - Manage what's new text
   - Configure promotional text
   - Handle copyright information

9. **Media Assets**
   - Upload app screenshots
   - Configure app previews
   - Manage app icons
   - Handle different device sizes

### In-App Purchases

10. **IAP Configuration**
    - Create consumable products
    - Configure subscriptions
    - Set up subscription groups
    - Handle promotional offers
    - Configure introductory pricing

### Submission

11. **Review Submission**
    - Submit for App Review
    - Handle review notes
    - Configure demo account
    - Manage review attachments
    - Track review status

12. **Release Management**
    - Configure release options
    - Set up phased releases
    - Handle manual releases
    - Manage version releases

## Target Processes

This skill integrates with the following processes:

- `ios-appstore-submission.js` - App Store submission
- `beta-testing-setup.js` - TestFlight configuration
- `app-store-optimization.js` - ASO metadata
- `automated-release-management.js` - Release automation

## Dependencies

### Required

- Apple Developer account
- App Store Connect access
- Xcode (for Transporter)
- Valid signing certificates

### Optional

- Fastlane
- App Store Connect API key
- Transporter app

## Configuration

### API Key Setup

```bash
# Generate API key in App Store Connect
# Users and Access > Keys > App Store Connect API

# Key file structure
AuthKey_XXXXXXXXXX.p8
```

### Environment Variables

```bash
# App Store Connect API
export APP_STORE_CONNECT_API_KEY_ID="XXXXXXXXXX"
export APP_STORE_CONNECT_API_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export APP_STORE_CONNECT_API_KEY_PATH="./AuthKey_XXXXXXXXXX.p8"

# Alternative: Base64 encoded key
export APP_STORE_CONNECT_API_KEY="$(cat AuthKey.p8 | base64)"
```

## Usage Examples

### Upload Build with xcrun

```bash
# Validate IPA
xcrun altool --validate-app \
  --file ./build/MyApp.ipa \
  --type ios \
  --apiKey XXXXXXXXXX \
  --apiIssuer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# Upload IPA
xcrun altool --upload-app \
  --file ./build/MyApp.ipa \
  --type ios \
  --apiKey XXXXXXXXXX \
  --apiIssuer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

### Fastlane Deliver Configuration

```ruby
# fastlane/Deliverfile
app_identifier("com.example.myapp")
username("developer@example.com")

# Metadata
name({
  "en-US" => "My Awesome App",
  "es-ES" => "Mi Aplicacion Increible"
})

subtitle({
  "en-US" => "The best app ever",
  "es-ES" => "La mejor app del mundo"
})

# Keywords (comma-separated)
keywords({
  "en-US" => "productivity,tasks,notes,todo",
  "es-ES" => "productividad,tareas,notas"
})

# URLs
support_url("https://example.com/support")
marketing_url("https://example.com")
privacy_url("https://example.com/privacy")

# App Review Information
app_review_information(
  first_name: "John",
  last_name: "Doe",
  phone_number: "+1 555 555 5555",
  email_address: "review@example.com",
  demo_user: "demo@example.com",
  demo_password: "demo123",
  notes: "Demo account is pre-configured with sample data"
)

# Submission
submit_for_review(false)
automatic_release(false)
phased_release(true)

# Precheck
precheck_include_in_app_purchases(false)
```

### Metadata Directory Structure

```
fastlane/metadata/
├── en-US/
│   ├── name.txt
│   ├── subtitle.txt
│   ├── description.txt
│   ├── keywords.txt
│   ├── release_notes.txt
│   ├── promotional_text.txt
│   ├── support_url.txt
│   ├── marketing_url.txt
│   └── privacy_url.txt
├── es-ES/
│   └── ... (same structure)
├── review_information/
│   ├── first_name.txt
│   ├── last_name.txt
│   ├── phone_number.txt
│   ├── email_address.txt
│   ├── demo_user.txt
│   ├── demo_password.txt
│   └── notes.txt
├── copyright.txt
├── primary_category.txt
├── secondary_category.txt
└── trade_representative_contact_information/
```

### Screenshots Directory

```
fastlane/screenshots/
├── en-US/
│   ├── iPhone 15 Pro Max-1_home.png
│   ├── iPhone 15 Pro Max-2_feature.png
│   ├── iPhone 15 Pro Max-3_settings.png
│   ├── iPhone 15 Pro-1_home.png
│   ├── iPad Pro (12.9-inch)-1_home.png
│   └── ...
└── es-ES/
    └── ...
```

### App Store Connect API Usage

```swift
// Example: Fetching apps using App Store Connect API
import Foundation

struct AppStoreConnectClient {
    let keyId: String
    let issuerId: String
    let privateKey: String

    func generateToken() -> String {
        // Generate JWT token
        let header = ["alg": "ES256", "kid": keyId, "typ": "JWT"]
        let payload = [
            "iss": issuerId,
            "exp": Int(Date().addingTimeInterval(20 * 60).timeIntervalSince1970),
            "aud": "appstoreconnect-v1"
        ]
        // Sign with ES256
        return jwt
    }

    func fetchApps() async throws -> [App] {
        let url = URL(string: "https://api.appstoreconnect.apple.com/v1/apps")!
        var request = URLRequest(url: url)
        request.setValue("Bearer \(generateToken())", forHTTPHeaderField: "Authorization")

        let (data, _) = try await URLSession.shared.data(for: request)
        let response = try JSONDecoder().decode(AppsResponse.self, from: data)
        return response.data
    }
}
```

### TestFlight Configuration

```ruby
# fastlane/Fastfile
lane :beta do
  # Build
  gym(scheme: "MyApp")

  # Upload to TestFlight
  pilot(
    skip_waiting_for_build_processing: false,
    distribute_external: true,
    notify_external_testers: true,

    # Beta groups
    groups: ["Internal Testers", "External Beta"],

    # Changelog
    changelog: "Bug fixes and performance improvements",

    # Beta App Review
    beta_app_review_info: {
      contact_email: "review@example.com",
      contact_first_name: "John",
      contact_last_name: "Doe",
      contact_phone: "+1 555 555 5555",
      demo_account_name: "demo@example.com",
      demo_account_password: "demo123",
      notes: "Testing instructions here"
    },

    # Localized info
    localized_build_info: {
      "en-US" => {
        whats_new: "Bug fixes and improvements"
      },
      "es-ES" => {
        whats_new: "Correcciones y mejoras"
      }
    }
  )
end
```

### In-App Purchase Configuration

```json
{
  "iaps": [
    {
      "product_id": "com.example.premium_monthly",
      "type": "auto_renewable_subscription",
      "reference_name": "Premium Monthly",
      "subscription_group": "Premium",
      "pricing": [
        {
          "country": "USA",
          "price_tier": 4
        }
      ],
      "localizations": [
        {
          "locale": "en-US",
          "name": "Premium Monthly",
          "description": "Unlock all premium features"
        }
      ]
    }
  ]
}
```

## Quality Gates

### Submission Readiness

- All required metadata complete
- Screenshots for all required sizes
- Privacy policy URL valid
- Age rating configured
- App review information complete

### Build Requirements

- Valid code signing
- No missing entitlements
- Export compliance configured
- Build processed successfully

### Compliance

- App Privacy questionnaire complete
- IDFA usage declared
- Third-party code disclosed

## Related Skills

- `fastlane-cicd` - Build automation
- `swift-swiftui` - iOS development
- `mobile-security` - App security

## Version History

- 1.0.0 - Initial release with App Store Connect API support

Related Skills

connected-papers-mapper

509
from a5c-ai/babysitter

Citation graph exploration for discovering related work through visual graph traversal

steel-connection-designer

509
from a5c-ai/babysitter

Steel connection design skill for bolted and welded connections per AISC specifications

salesforce-connector

509
from a5c-ai/babysitter

Bi-directional Salesforce CRM integration for sales data management

pipedrive-connector

509
from a5c-ai/babysitter

Pipedrive CRM integration optimized for SMB sales teams

hubspot-connector

509
from a5c-ai/babysitter

HubSpot CRM and Marketing Hub integration for sales and marketing alignment

dynamics365-connector

509
from a5c-ai/babysitter

Microsoft Dynamics 365 Sales integration with Power Platform support

feast-feature-store

509
from a5c-ai/babysitter

Feature store management skill for online/offline feature serving, feature registration, and training-serving consistency.

process-builder

509
from a5c-ai/babysitter

Scaffold new babysitter process definitions following SDK patterns, proper structure, and best practices. Guides the 3-phase workflow from research to implementation.

Workflow & Productivity

babysitter

509
from a5c-ai/babysitter

Orchestrate via @babysitter. Use this skill when asked to babysit a run, orchestrate a process or whenever it is called explicitly. (babysit, babysitter, orchestrate, orchestrate a run, workflow, etc.)

yolo

509
from a5c-ai/babysitter

Run Babysitter autonomously with minimal manual interruption.

user-install

509
from a5c-ai/babysitter

Install the user-level Babysitter Codex setup.

team-install

509
from a5c-ai/babysitter

Install the team-pinned Babysitter Codex workspace setup.