一键导入
mobile-release
App Store and Play Store submission process. Covers versioning, build configuration, metadata, screenshots, review guidelines, and OTA updates.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
App Store and Play Store submission process. Covers versioning, build configuration, metadata, screenshots, review guidelines, and OTA updates.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Full WCAG 2.2 AA accessibility audit procedure. Goes beyond the reference checklist with step-by-step testing methodology, tooling, and remediation guidance.
Design a RESTful API from requirements. Use when creating a new API, adding endpoints, or restructuring an existing API. Produces endpoint specifications, schemas, and implementation guidance.
Assess system architecture, identify risks and bottlenecks, document decisions with ADRs. Covers modular monolith, microservices, event-driven, and serverless patterns.
Shift Left quality gates, feature flag pipelines, and deployment automation. Use when setting up or modifying build and deploy pipelines, or when establishing quality gates for a project.
Perform a thorough code review with structured feedback. Use when reviewing pull requests, code submissions, or when you want a quality check on your code. Covers correctness, security, performance, readability, and maintainability.
Reduce complexity while preserving exact behavior. Use when code works but is harder to read or maintain than it should be. Applies Chesterton's Fence — understand the code before simplifying it.
| name | mobile-release |
| description | App Store and Play Store submission process. Covers versioning, build configuration, metadata, screenshots, review guidelines, and OTA updates. |
Shipping a mobile app is not like shipping a web app. You don't control the deployment pipeline — Apple and Google do. A bad release means waiting days for review, or worse, getting rejected and starting over. This skill covers the end-to-end process: version bumping, build configuration, store metadata, screenshot generation, submission, review monitoring, and over-the-air (OTA) updates for when you need to ship a fix without going through the store again.
The goal is a repeatable, automated release process where cutting a release is a one-command operation, not a two-day manual checklist.
When NOT to use: Internal-only builds that never touch the stores, or web-only projects. For CI/CD pipeline setup without store submission, use the ci-cd-and-automation skill instead.
Mobile apps have two version identifiers. Confusing them is the most common release mistake.
Version identifiers:
| Platform | User-Visible Version | Build Number |
|---|---|---|
| iOS | CFBundleShortVersionString | CFBundleVersion |
| Android | versionName | versionCode |
| RN/Expo | version in app.json | ios.buildNumber / android.versionCode |
Rules:
MAJOR.MINOR.PATCH (e.g., 2.4.1)
142, 143)Version bump script example:
#!/bin/bash
# bump-version.sh <major|minor|patch>
CURRENT=$(jq -r '.version' app.json)
NEXT=$(npx semver $CURRENT -i $1)
BUILD=$(($(jq -r '.expo.ios.buildNumber' app.json | tr -d '"') + 1))
jq --arg v "$NEXT" --arg b "$BUILD" \
'.version = $v | .expo.ios.buildNumber = ($b|tostring) | .expo.android.versionCode = ($b|tonumber)' \
app.json > tmp.json && mv tmp.json app.json
echo "Bumped to $NEXT (build $BUILD)"
Separate build configuration from code. Never hardcode API URLs or feature flags.
Environment configuration:
Build Variants:
development → dev API, debug logging, dev signing
staging → staging API, analytics enabled, ad-hoc signing
production → prod API, analytics + crash reporting, store signing
EAS Build (Expo/React Native):
// eas.json
{
"build": {
"development": {
"distribution": "internal",
"env": { "API_URL": "https://api.dev.example.com" }
},
"staging": {
"distribution": "internal",
"env": { "API_URL": "https://api.staging.example.com" }
},
"production": {
"distribution": "store",
"env": { "API_URL": "https://api.example.com" },
"autoIncrement": true
}
}
}
Fastlane (native iOS/Android):
# fastlane/Fastfile
platform :ios do
lane :release do
increment_build_number
build_app(scheme: "MyApp", export_method: "app-store")
upload_to_app_store(skip_metadata: false, skip_screenshots: false)
end
end
platform :android do
lane :release do
gradle(task: "bundleRelease")
upload_to_play_store(track: "internal")
end
end
Signing checklist:
Store screenshots are marketing — they determine whether someone downloads your app.
Screenshot requirements:
| Store | Required Sizes | Min Count |
|---|---|---|
| App Store | 6.7" (iPhone 15 Pro Max), 6.5", 5.5", iPad Pro | 1 per size (3 recommended) |
| Play Store | Phone (16:9), 7" tablet, 10" tablet | 2 minimum (8 recommended) |
Automated screenshot generation (Fastlane Snapshot / Screengrab):
# fastlane/Snapfile (iOS)
devices([
"iPhone 15 Pro Max",
"iPhone 15",
"iPad Pro (12.9-inch) (6th generation)"
])
languages(["en-US", "es-ES", "ja"])
scheme("MyAppUITests")
output_directory("./screenshots")
Tips:
Metadata is the store listing content: title, description, keywords, what's new.
App Store metadata:
Name: [30 chars max]
Subtitle: [30 chars max]
Description: [4000 chars max — first 3 lines visible without expand]
Keywords: [100 chars, comma-separated — research competitors]
What's New: [specific changes, not "bug fixes and improvements"]
Category: [primary + secondary]
Play Store metadata:
Title: [30 chars max]
Short description: [80 chars max]
Full description: [4000 chars max]
What's new: [500 chars max]
Category + tags
"What's New" rules:
App Store Connect submission:
# Fastlane
fastlane ios release
# EAS Submit
eas submit --platform ios --profile production
# Manual: Xcode → Product → Archive → Distribute App → App Store Connect
Common rejection reasons (Apple):
Google Play Console submission:
# Fastlane
fastlane android release
# EAS Submit
eas submit --platform android --profile production
Common rejection reasons (Google):
Typical review timelines:
If rejected:
Expedited review (Apple):
OTA (over-the-air) updates push JavaScript/asset changes without a store review. Use them for bug fixes — not for new native features.
OTA update options:
| Tool | Platform | Scope |
|---|---|---|
| EAS Updates | Expo/RN | JS + assets |
| CodePush | React Native | JS + assets (deprecated) |
| Shorebird | Flutter | Dart code |
EAS Updates setup:
# Configure update channels matching build profiles
eas update:configure
# Publish an update
eas update --branch production --message "Fix checkout crash on Android"
OTA update rules:
Phased rollout strategy:
Day 1: 1% of users (canary)
Day 2: 10% (if no crash spike)
Day 3: 25%
Day 5: 50%
Day 7: 100%
Both App Store and Play Store support phased rollouts natively. Use them for every major release.
| Rationalization | Reality |
|---|---|
| "We'll do screenshots manually — it's faster" | It's faster once. You'll do it 50+ times over the app's life. Automate. |
| "What's New: Bug fixes and improvements" | Users and reviewers both hate this. Be specific or don't ship release notes. |
| "We'll just push an OTA update if it's broken" | OTA only works for JS changes. Native crashes need a full store release. |
| "We don't need phased rollout for a small fix" | Small fixes have caused big outages. Rolling out to 1% first costs nothing. |
| "We can skip the staging build" | The staging build is where you catch the "works on my machine" bugs before Apple catches them for you. |
| "Build numbers don't matter — they're internal" | Reusing or decrementing a build number will get your upload rejected instantly. |