| name | App Store Connect |
| description | Apple App Store submission and management expertise |
| version | 1.0.0 |
| category | iOS Distribution |
| slug | app-store-connect |
| status | active |
| graph | {"domains":["domain:mobile"],"specializations":["specialization:mobile-development"],"skillAreas":["skill-area:app-store-deployment","skill-area:ios-native"],"roles":["role:mobile-engineer"],"workflows":["workflow:feature-development","workflow:release-management"],"topics":["topic:accessibility"]} |
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
-
API Authentication
- Configure API keys and JWT tokens
- Implement token refresh logic
- Handle rate limiting
- Configure team and issuer IDs
-
App Management
- Create and manage app records
- Configure app capabilities
- Manage bundle IDs
- Handle app transfers
Build Management
-
Build Upload
- Upload builds via Transporter
- Configure altool uploads
- Handle build processing status
- Manage build metadata
- Configure App Store connect upload
-
Build Information
- Track build processing
- Configure build usage compliance
- Manage export compliance
- Handle build expiration
TestFlight
-
Beta Distribution
- Configure internal testing groups
- Manage external beta testers
- Set up beta build distribution
- Handle beta app review
- Configure test information
-
Beta Feedback
- Collect crash reports
- Manage feedback submissions
- Track tester engagement
- Analyze beta metrics
Metadata Management
-
App Information
- Configure app name and subtitle
- Set primary and secondary categories
- Manage age ratings
- Configure privacy policy URLs
- Set support and marketing URLs
-
Version Metadata
- Write descriptions and keywords
- Manage what's new text
- Configure promotional text
- Handle copyright information
-
Media Assets
- Upload app screenshots
- Configure app previews
- Manage app icons
- Handle different device sizes
In-App Purchases
- IAP Configuration
- Create consumable products
- Configure subscriptions
- Set up subscription groups
- Handle promotional offers
- Configure introductory pricing
Submission
-
Review Submission
- Submit for App Review
- Handle review notes
- Configure demo account
- Manage review attachments
- Track review status
-
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
AuthKey_XXXXXXXXXX.p8
Environment Variables
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"
export APP_STORE_CONNECT_API_KEY="$(cat AuthKey.p8 | base64)"
Usage Examples
Upload Build with xcrun
xcrun altool --validate-app \
--file ./build/MyApp.ipa \
--type ios \
--apiKey XXXXXXXXXX \
--apiIssuer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xcrun altool --upload-app \
--file ./build/MyApp.ipa \
--type ios \
--apiKey XXXXXXXXXX \
--apiIssuer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Fastlane Deliver Configuration
app_identifier("com.example.myapp")
username("developer@example.com")
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({
"en-US" => "productivity,tasks,notes,todo",
"es-ES" => "productividad,tareas,notas"
})
support_url("https://example.com/support")
marketing_url("https://example.com")
privacy_url("https://example.com/privacy")
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"
)
submit_for_review(false)
automatic_release(false)
phased_release(true)
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
import Foundation
struct AppStoreConnectClient {
let keyId: String
let issuerId: String
let privateKey: String
func generateToken() -> String {
let header = ["alg": "ES256", "kid": keyId, "typ": "JWT"]
let payload = [
"iss": issuerId,
"exp": Int(Date().addingTimeInterval(20 * 60).timeIntervalSince1970),
"aud": "appstoreconnect-v1"
]
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")
(data, ) .shared.data(for: request)
response ().decode(., from: data)
response.data
}
}
TestFlight Configuration
lane :beta do
gym(scheme: "MyApp")
pilot(
skip_waiting_for_build_processing: false,
distribute_external: true,
notify_external_testers: true,
groups: ["Internal Testers", "External Beta"],
changelog: "Bug fixes and performance improvements",
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_build_info: {
"en-US" => {
whats_new: "Bug fixes and improvements"
},
"es-ES" => {
whats_new: "Correcciones y mejoras"
}
}
)
end
In-App Purchase Configuration
{
"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