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
Guide for migrating an existing web app, PWA, or SPA into a store-ready Capacitor iOS and Android app. Use this skill when users want to wrap or convert a web app into a mobile app, avoid thin WebView app store rejection, add native-feeling UX, handle permissions, offline behavior, account deletion, billing, testing, and Capgo live updates.
development
Guide to using Tailwind CSS in Capacitor mobile apps. Covers mobile-first design, touch targets, safe areas, dark mode, and performance optimization. Use this skill when users want to style Capacitor apps with Tailwind.
development
Revenue playbook for getting a mobile or web subscription app from zero to early MRR. Use when users ask how to make revenue, reach $1K MRR, monetize an app, get first users, improve ASO, plan TikTok/Reels/Shorts or Reddit acquisition, design a paywall, choose freemium vs trial, price subscriptions, reduce churn, or build a simple growth loop for an app.
tools
Guides the agent through migrating SQLite and SQL-style Capacitor plugins to @capgo/capacitor-fast-sql. Use when replacing bridge-based SQL plugins, adding encryption, preserving transactions, or moving key-value storage onto Fast SQL. Do not use for non-SQL storage, generic app upgrades, or plugins that already wrap Fast SQL.