
App Store Deployment
- 522 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
app-store-deployment is a Claude Code skill that guides developers through signing, versioning, build configuration, and submission of iOS and Android apps to the App Store and Google Play without missing release-critica
About
app-store-deployment is a Claude Code skill from aj-geddes/useful-ai-prompts for publishing mobile applications to official app stores. It walks developers through iOS and Android code signing, semantic versioning, build configuration, pre-submission testing checks, and the App Store Connect and Google Play Console submission workflows. Developers reach for app-store-deployment when a mobile build is ready but store certificates, provisioning profiles, bundle IDs, or release track configuration remain incomplete. The skill consolidates platform-specific release management guidance that otherwise spans Apple developer portals, Xcode archive settings, Android keystore files, and Play Console tracks. It targets teams shipping React Native, Flutter, or native mobile apps who need a structured release checklist inside their AI coding session.
- Covers full signing, versioning, build configuration, and submission process for both Apple App Store and Google Play
- Includes certificate generation, provisioning profiles, and Xcode build settings guidance
- Automates build and deployment processes for mobile releases
- Manages app updates, rollouts, and release management
- Provides reference guides and best practices for production app publishing
App Store Deployment by the numbers
- 522 all-time installs (skills.sh)
- Ranked #42 of 248 Release Management skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill app-store-deploymentAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 522 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
How do you submit iOS and Android apps to app stores?
Correctly sign, version, and submit iOS and Android apps to the App Store and Google Play without missing critical steps.
Who is it for?
Mobile developers preparing their first or recurring App Store and Google Play releases who need guided signing, versioning, and submission steps.
Skip if: Web-only SaaS projects, backend API deployments, or teams whose mobile release pipeline is fully automated in CI with no manual store steps.
When should I use this skill?
User asks to deploy to App Store or Google Play, configure signing certificates, manage app versions, or submit a mobile release
What you get
Signed release builds, store-ready metadata, provisioning profiles or keystores, and submitted App Store and Google Play releases
- signed release builds
- store submission packages
- release configuration
Files
App Store Deployment
Table of Contents
Overview
Publish mobile applications to official app stores with proper code signing, versioning, testing, and submission procedures.
When to Use
- Publishing apps to App Store and Google Play
- Managing app versions and releases
- Configuring signing certificates and provisioning profiles
- Automating build and deployment processes
- Managing app updates and rollouts
Quick Start
Minimal working example:
# Create development and distribution signing certificates
# Step 1: Generate Certificate Signing Request (CSR) in Keychain Access
# Step 2: Create App ID in Apple Developer Portal
# Step 3: Create provisioning profiles (Development, Distribution)
# Xcode configuration for signing
# Set Team ID, Bundle Identifier, and select provisioning profiles
# Build Settings:
# - Code Sign Identity: "iPhone Distribution"
# - Provisioning Profile: Select appropriate profile
# - Code Sign Style: Automatic (recommended)
# Info.plist settings
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| iOS Deployment Setup | iOS Deployment Setup |
| Android Deployment Setup | Android Deployment Setup |
| Version Management | Version Management |
| Automated CI/CD with GitHub Actions | Automated CI/CD with GitHub Actions |
| Pre-Deployment Checklist | Pre-Deployment Checklist |
Best Practices
✅ DO
- Use signed certificates and provisioning profiles
- Automate builds with CI/CD
- Test on real devices before submission
- Keep version numbers consistent
- Document deployment procedures
- Use environment-specific configurations
- Implement proper error tracking
- Monitor app performance post-launch
- Plan rollout strategy
- Keep backup of signing materials
- Test offline functionality
- Maintain release notes
❌ DON'T
- Commit signing materials to git
- Skip device testing
- Release untested code
- Ignore store policies
- Use hardcoded API keys
- Skip security reviews
- Deploy without monitoring
- Ignore crash reports
- Make large version jumps
- Use invalid certificates
- Deploy without backups
- Release during holidays
Android Deployment Setup
Android Deployment Setup
// build.gradle configuration
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0.0"
}
signingConfigs {
release {
storeFile file("keystore.jks")
storePassword System.getenv("KEYSTORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'com.google.android.play:core:1.10.3'
}# Create keystore for app signing
keytool -genkey -v \
-keystore ~/my-release-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10950 \
-alias my-key-alias
# Build App Bundle
./gradlew bundleRelease
# Build APK for testing
./gradlew assembleRelease
# Verify APK signature
jarsigner -verify -verbose -certs app/build/outputs/apk/release/app-release.apkAutomated CI/CD with GitHub Actions
Automated CI/CD with GitHub Actions
name: Deploy to App Stores
on:
push:
tags:
- "v*"
jobs:
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Build iOS App
run: |
cd ios
pod install
xcodebuild -workspace MyApp.xcworkspace \
-scheme MyApp \
-configuration Release \
-archivePath ~/Desktop/MyApp.xcarchive \
archive
- name: Upload to App Store
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
run: |
xcrun altool --upload-app \
--file MyApp.ipa \
--type ios \
-u $APPLE_ID \
-p $APPLE_PASSWORD
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
java-version: "11"
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Build Android App
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
cd android
./gradlew bundleRelease
- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_SERVICE_ACCOUNT }}
packageName: com.example.myapp
releaseFiles: android/app/build/outputs/bundle/release/app.aab
track: internal
status: completed
create-release:
runs-on: ubuntu-latest
needs: [build-ios, build-android]
steps:
- uses: actions/checkout@v3
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: Release notes here
draft: false
prerelease: falseiOS Deployment Setup
iOS Deployment Setup
# Create development and distribution signing certificates
# Step 1: Generate Certificate Signing Request (CSR) in Keychain Access
# Step 2: Create App ID in Apple Developer Portal
# Step 3: Create provisioning profiles (Development, Distribution)
# Xcode configuration for signing
# Set Team ID, Bundle Identifier, and select provisioning profiles
# Build Settings:
# - Code Sign Identity: "iPhone Distribution"
# - Provisioning Profile: Select appropriate profile
# - Code Sign Style: Automatic (recommended)
# Info.plist settings
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
<key>NSUserTrackingUsageDescription</key>
<string>We use tracking for analytics</string>
</dict>
</plist>
# Build for App Store submission
xcodebuild -workspace MyApp.xcworkspace \
-scheme MyApp \
-configuration Release \
-archivePath ~/Desktop/MyApp.xcarchive \
archive
# Export for distribution
xcodebuild -exportArchive \
-archivePath ~/Desktop/MyApp.xcarchive \
-exportOptionsPlist ExportOptions.plist \
-exportPath ~/Desktop/MyApp
# ExportOptions.plist
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
<key>signingStyle</key>
<string>automatic</string>
<key>method</key>
<string>app-store</string>
</dict>
</plist>
# Upload to App Store
xcrun altool --upload-app --file MyApp.ipa \
--type ios \
-u your-apple-id@example.com \
-p your-app-specific-passwordPre-Deployment Checklist
Pre-Deployment Checklist
# iOS Checklist
- [ ] Increment version (CFBundleShortVersionString)
- [ ] Update build number (CFBundleVersion)
- [ ] Run all tests (>80% coverage)
- [ ] Test on minimum iOS version
- [ ] Review crash logs
- [ ] Check for deprecated APIs
- [ ] Verify all permissions documented
- [ ] Test offline functionality
- [ ] Verify app icon (1024x1024)
- [ ] Set privacy policy URL
- [ ] Archive and verify build
- [ ] Test on real devices
# Android Checklist
- [ ] Increment versionCode and versionName
- [ ] Run all tests (>80% coverage)
- [ ] Test on API 21+ devices
- [ ] Verify navigation
- [ ] Check battery optimization
- [ ] Enable app signing
- [ ] Build release AAB
- [ ] Verify ProGuard obfuscation
- [ ] Test landscape/portrait
- [ ] Upload screenshots
- [ ] Add release notes
- [ ] Test on multiple devicesVersion Management
Version Management
# Version tracking
# package.json
{
"name": "myapp",
"version": "1.0.0",
"build": {
"ios": { "buildNumber": "1" },
"android": { "versionCode": 1 }
}
}
# Increment version script
#!/bin/bash
CURRENT=$(jq -r '.version' package.json)
IFS='.' read -ra VER <<< "$CURRENT"
MAJOR=${VER[0]}
MINOR=${VER[1]}
PATCH=${VER[2]}
PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
jq ".version = \"$NEW_VERSION\"" package.json > package.json.tmp
mv package.json.tmp package.json
echo "Version updated to $NEW_VERSION"#!/bin/bash
# validate-pipeline.sh - Validate CI/CD pipeline configuration
# Usage: ./validate-pipeline.sh <pipeline_file>
set -euo pipefail
PIPELINE_FILE="${{1:?Usage: $0 <pipeline_file>}}"
echo "Validating pipeline: $PIPELINE_FILE"
# TODO: Add pipeline validation
# - Check YAML/Groovy syntax
# - Verify stage dependencies
# - Check for required stages (build, test, deploy)
# - Validate environment variable references
# - Check for security best practices
echo "Pipeline validation complete."
# CI/CD Pipeline Starter Template
# TODO: Customize for your CI/CD platform (GitHub Actions, GitLab CI, Jenkins, etc.)
name: CI/CD Pipeline
# TODO: Configure triggers
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# TODO: Add build steps
test:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
# TODO: Add test steps
deploy:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
# TODO: Add deployment steps
- run: echo "Deploy to production"
Related skills
How it compares
Use app-store-deployment for manual or guided mobile store releases rather than web deployment or backend CI/CD pipeline skills.
FAQ
Which app stores does app-store-deployment cover?
app-store-deployment covers both Apple App Store submission for iOS apps and Google Play submission for Android apps. The skill addresses signing, versioning, build configuration, and the console submission process for each platform.
What release steps does app-store-deployment include?
app-store-deployment includes code signing certificate setup, semantic versioning, build configuration, pre-submission testing guidance, and step-by-step store submission procedures for App Store Connect and Google Play Console.