From ios-dev
App Store Connect API - metadata, screenshots, release automation
npx claudepluginhub willsigmon/sigstack --plugin ios-devThis skill is limited to using the following tools:
Automate App Store submissions with the Connect API.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides MCP server integration in Claude Code plugins via .mcp.json or plugin.json configs for stdio, SSE, HTTP types, enabling external services as tools.
Automate App Store submissions with the Connect API.
export ASC_KEY_ID="XXXXXXXXXX"
export ASC_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export ASC_KEY_PATH="~/.appstore/AuthKey_XXXXXXXXXX.p8"
lane :metadata do
deliver(
submit_for_review: false,
automatic_release: false,
force: true,
metadata_path: "./fastlane/metadata",
screenshots_path: "./fastlane/screenshots"
)
end
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"/
# 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")
fastlane snapshot
lane :frames do
frameit(
white: true,
path: "./fastlane/screenshots"
)
end
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
deliver(
phased_release: true,
automatic_release: true
)
brew install app-store-connect-cli
# Or
pip install appstoreconnect
asc apps list
asc builds list --app-id 123456789
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)
import requests
token = generate_token()
response = requests.get(
"https://api.appstoreconnect.apple.com/v1/apps",
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
)
| Role | Capabilities |
|---|---|
| Admin | Everything |
| App Manager | Manage apps, no financials |
| Developer | Builds, TestFlight |
| Marketing | Metadata, screenshots |
| Sales | Reports, analytics |
lane :check_status do
latest = latest_testflight_build_number
puts "Latest build: #{latest}"
# Check review status
# ... API call
end
# 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