plugins/capacitor-deployment/skills/capacitor-app-store/SKILL.md
Complete guide to publishing Capacitor apps to Apple App Store and Google Play Store. Covers app preparation, screenshots, metadata, review guidelines, and submission process. Use this skill when users are ready to publish their app.
npx skillsauth add cap-go/capgo-skills capacitor-app-storeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide to submitting Capacitor apps to Apple App Store and Google Play Store.
// capacitor.config.ts - Not stored here, just for reference
// iOS: Info.plist
// CFBundleShortVersionString = "1.2.3" (user-visible)
// CFBundleVersion = "45" (build number, increment each upload)
// Android: build.gradle
// versionName = "1.2.3" (user-visible)
// versionCode = 45 (must increment each upload)
<!-- ios/App/App/Info.plist -->
<key>CFBundleDisplayName</key>
<string>My App</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<!-- Privacy descriptions - REQUIRED for permissions -->
<key>NSCameraUsageDescription</key>
<string>Take photos for your profile</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Select photos from your library</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Find nearby locations</string>
<key>NSFaceIDUsageDescription</key>
<string>Secure login with Face ID</string>
<key>NSMicrophoneUsageDescription</key>
<string>Record voice messages</string>
<!-- App Tracking Transparency -->
<key>NSUserTrackingUsageDescription</key>
<string>Allow tracking for personalized ads</string>
<!-- Export compliance -->
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
// android/app/build.gradle
android {
defaultConfig {
applicationId "com.yourcompany.yourapp"
minSdkVersion 22
targetSdkVersion 34
versionCode 1
versionName "1.0.0"
// 64-bit support
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
Required sizes (place in Assets.xcassets):
| Size | Scale | Usage | |------|-------|-------| | 20pt | 2x, 3x | Notification | | 29pt | 2x, 3x | Settings | | 40pt | 2x, 3x | Spotlight | | 60pt | 2x, 3x | App Icon | | 76pt | 1x, 2x | iPad | | 83.5pt | 2x | iPad Pro | | 1024pt | 1x | App Store |
Required sizes (place in res/mipmap-*):
| Density | Size | Folder | |---------|------|--------| | mdpi | 48x48 | mipmap-mdpi | | hdpi | 72x72 | mipmap-hdpi | | xhdpi | 96x96 | mipmap-xhdpi | | xxhdpi | 144x144 | mipmap-xxhdpi | | xxxhdpi | 192x192 | mipmap-xxxhdpi |
Also needed:
# Use capacitor-assets
npm install -D @capacitor/assets
npx capacitor-assets generate --iconBackgroundColor '#ffffff'
| Device | Size | Required | |--------|------|----------| | iPhone 6.7" | 1290x2796 | Yes | | iPhone 6.5" | 1284x2778 | Yes | | iPhone 5.5" | 1242x2208 | Yes | | iPad Pro 12.9" | 2048x2732 | If supporting iPad | | iPad Pro 11" | 1668x2388 | If supporting iPad |
| Type | Size | Required | |------|------|----------| | Phone | 1080x1920 to 1080x2400 | Yes (2-8) | | 7" Tablet | 1200x1920 | If supporting | | 10" Tablet | 1600x2560 | If supporting |
// Use Playwright for automated screenshots
import { test } from '@playwright/test';
const devices = [
{ name: 'iPhone 14 Pro Max', viewport: { width: 430, height: 932 } },
{ name: 'iPhone 14', viewport: { width: 390, height: 844 } },
{ name: 'Pixel 7', viewport: { width: 412, height: 915 } },
];
test('generate screenshots', async ({ page }) => {
for (const device of devices) {
await page.setViewportSize(device.viewport);
// Screenshot 1: Home
await page.goto('/');
await page.screenshot({
path: `screenshots/${device.name}-home.png`,
fullPage: false,
});
// Screenshot 2: Feature
await page.goto('/feature');
await page.screenshot({
path: `screenshots/${device.name}-feature.png`,
});
}
});
# Using Xcode
# Product > Archive > Distribute App > App Store Connect
# Using Fastlane
fastlane ios release
# Using xcrun
xcrun altool --upload-app --type ios --file App.ipa \
--apiKey KEY_ID --apiIssuer ISSUER_ID
Complete the questionnaire for IARC rating
# Build AAB (required for new apps)
cd android && ./gradlew bundleRelease
# Upload via Play Console or API
# Production > Create new release > Upload AAB
| Track | Purpose | |-------|---------| | Internal testing | Up to 100 testers, instant | | Closed testing | Invite-only, review | | Open testing | Public beta | | Production | Full release |
| Reason | Solution | |--------|----------| | Crashes | Test on real devices, fix bugs | | Broken links | Verify all URLs work | | Incomplete metadata | Fill all required fields | | Missing privacy info | Complete App Privacy section | | Login issues | Provide demo account | | Guideline 4.2 (Minimum Functionality) | Add meaningful features | | Guideline 5.1.1 (Data Collection) | Justify data usage |
| Reason | Solution | |--------|----------| | Crashes/ANRs | Fix stability issues | | Policy violation | Review Play policies | | Deceptive behavior | Be transparent about features | | Sensitive permissions | Justify in-app | | Target SDK too low | Update to API 34+ |
# Increment patch (1.0.0 -> 1.0.1)
npm version patch
# Increment minor (1.0.0 -> 1.1.0)
npm version minor
# Increment major (1.0.0 -> 2.0.0)
npm version major
iOS:
Android:
development
Guides the agent through authoring and validating agent skills. Use when creating new skill directories, tightening skill metadata, extracting supporting references, or preparing skillgrade evals. Do not use for general app documentation, generic README editing, or non-agentic library code.
tools
Use for Capgo Cloud Build native iOS and Android workflows, including CLI login, API-key handling, iOS build onboarding, signing credential storage, build requests, store upload settings, output download links, and troubleshooting. Do not use for OTA bundle uploads or generic Capacitor setup unless a native Capgo build is requested.
development
Guides the agent through authoring and validating agent skills. Use when creating new skill directories, tightening skill metadata, extracting supporting references, or preparing skillgrade evals. Do not use for general app documentation, generic README editing, or non-agentic library code.
tools
Use for Capgo Cloud Build native iOS and Android workflows, including CLI login, API-key handling, iOS build onboarding, signing credential storage, build requests, store upload settings, output download links, and troubleshooting. Do not use for OTA bundle uploads or generic Capacitor setup unless a native Capgo build is requested.