Apple App Store submission and management expertise
Manages App Store Connect submissions, TestFlight distribution, and app metadata for iOS releases.
npx claudepluginhub a5c-ai/babysitterThis skill inherits all available tools. When active, it can use any tool Claude has access to.
README.mdThis 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.
bash - Execute xcrun, altool, and Transporter commandsread - Analyze app metadata and configuration fileswrite - Generate metadata files and API configurationsedit - Update app store metadataglob - Search for metadata and screenshot filesgrep - Search for patterns in configurationsAPI Authentication
App Management
Build Upload
Build Information
Beta Distribution
Beta Feedback
App Information
Version Metadata
Media Assets
Review Submission
Release Management
This skill integrates with the following processes:
ios-appstore-submission.js - App Store submissionbeta-testing-setup.js - TestFlight configurationapp-store-optimization.js - ASO metadataautomated-release-management.js - Release automation# Generate API key in App Store Connect
# Users and Access > Keys > App Store Connect API
# Key file structure
AuthKey_XXXXXXXXXX.p8
# 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)"
# 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/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)
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/
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/
└── ...
// 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
}
}
# 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
{
"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"
}
]
}
]
}
fastlane-cicd - Build automationswift-swiftui - iOS developmentmobile-security - App securityActivates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.