<!-- skill: Mobile Store Release | version: 1.0.0 | description: Ship to Play and App Store with versioning, assets and rollouts | category: Mobile -->
## Instructions
- Versioning: single source of truth — Android `versionCode` (int, always +1) + `versionName` ("1.2.0"), iOS `CFBundleVersion` (build no.) + `CFBundleShortVersionString` ("1.2.0"); Flutter/RN sync both; tag git `v1.2.0+34` per release.
- Version strategy: SemVer (major.minor.patch), build number = CI run count; never reuse a versionCode/buildNumber — stores reject it; keep a `CHANGELOG.md` per release.
- Icons: Android adaptive icon (foreground + background, `mipmap-anydpi-v26`, 432x432 safe zone 66dp circle), iOS 1024x1024 no-transparency no-rounded-corners; generate via Android Studio Image Asset / Xcode / flutter_launcher_icons, verify on device.
- Splash: Android 12+ `windowSplashScreenBackground + splashScreenTheme`, iOS `LaunchScreen.storyboard`/SwiftUI `UILaunchScreen`; must match first app frame to avoid flash; test cold start on low-end device.
- Screenshots: Play needs 2+ phone + 7" + 10" tablet if tablet supported + feature graphic 1024x500; App Store needs 6.7" + 6.5" + iPad 13" sets; capture on real devices, no status-bar carrier text, no placeholder/lorem.
- Listings: title (30 chars Play / 30 App Store) + short desc (80) + full desc with keywords first 2 lines; per-locale translations for top 5 markets; promo video optional but boosts conversion.
- Privacy labels: Apple privacy nutrition (data types + tracking yes/no + purposes) must match code (check SDKs: analytics/ads/crash); Play Data Safety section same — mismatches trigger rejection; include account-deletion URL if login exists.
- Content rating: Play questionnaire + Apple age rating — answer honestly (user-generated content? gambling? medical?); underrate and you get pulled later, overrate and you lose audience.
- Staged rollout: Play staged rollout 20% → 50% → 100% over 3-7 days with halt-on-crash rule (halt if crash rate >1.5% or ANR >0.5%); App Store phased release 7 days (pause anytime in App Store Connect).
- Pre-submit QA: release build on 3 real devices (low/mid/flagship), fresh-install + upgrade paths, airplane-mode behavior, permission deny flows, 64-bit + targetSdk (`targetSdkVersion` = latest required by Play) checks.
- Rejection fixes: read the exact guideline number (e.g. 2.1 performance, 5.1.1 data collection), fix + appeal note quoting what changed + demo video if reviewer couldn't reproduce; never resubmit identical binary.
- Post-release: watch Play Vitals (crash/ANR) + Xcode Crashes Organizer hourly for 48h; hotfix via Play emergency patch / App Store expedited review (documented crash only); OTA (Expo/Flutter shorebird) only for JS/Dart-only changes.
## Examples
- Indie launch: icons/splash regen, screenshots 4 locales, internal → closed → 20% rollout, crash-free 48h → 100%, phased iOS in parallel.
- Rejection recovery: Guideline 5.1.1 (missing purpose string) → add NSLocation string + privacy label update + appeal note → approved in 24h.
- Hotfix week: crash spike 2.1% → halt rollout at 20%, fix, versionCode+1 patch, resume rollout, post-mortem in changelog.
## Workflows
1. Freeze: version bump + changelog + tag; build signed release artifacts.
2. Assets pass: icons, splash, screenshots, feature graphic, listings per locale.
3. Compliance: privacy labels/data-safety, rating questionnaire, target-SDK check.
4. Beta: Play internal/closed + TestFlight external (1-2 days soak, crash triage).
5. Staged rollout (20→50→100 / phased 7-day) with vitals monitoring.
6. Post-release: 48h watch → full rollout → retrospective + next version plan.
## Templates
- Release checklist:
```markdown
# Release v1.2.0+34 — 2026-10-13
- [ ] versionCode 34 / buildNumber 34, versionName 1.2.0 (git tag v1.2.0+34)
- [ ] CHANGELOG entry + localized release notes (en, de, fr, es, pt)
- [ ] Icons: adaptive 432px + iOS 1024 (no alpha) verified on device
- [ ] Splash cold-start matches first frame (low-end device tested)
- [ ] Screenshots: phone 2+, 7" + 10" tablet, 6.7"/6.5"/iPad sets
- [ ] Feature graphic 1024x500 + listings per locale
- [ ] Privacy labels (Apple) + Data Safety (Play) match SDK list
- [ ] Rating questionnaires completed honestly
- [ ] targetSdk = latest required, 64-bit ABIs, permissions strings present
- [ ] Fresh install + upgrade + offline + deny-permission QA (3 devices)
- [ ] Internal/closed beta soak 48h, crash-free >99%
- [ ] Rollout: Play 20% + iOS phased ON; halt rule crash>1.5%/ANR>0.5%
- [ ] Post-release watch scheduled (Vitals + Xcode Organizer)
```
- fastlane lanes:
```ruby
# fastlane/Fastfile
default_platform(:android)
platform :android do
  lane :internal do
    gradle(task: "clean bundleRelease")
    upload_to_play_store(track: "internal", aab: "app-release.aab",
      release_status: "draft")
  end
  lane :rollout do |o|
    upload_to_play_store(track: "production", rollout: o[:pct] || "0.2")
  end
end
platform :ios do
  lane :beta do
    build_app(scheme: "App", export_method: "app-store")
    upload_to_testflight(distribute_external: true, groups: ["Beta"])
  end
end
```
- Store CLI commands:
```bash
# version bump helpers
# android: app/build.gradle -> versionCode 35, versionName "1.2.1"
# ios: agvtool new-version -all 35  # or Xcode build settings
git tag -a v1.2.1+35 -m "1.2.1 (35): crash fix" && git push --tags
# EAS / Flutter
eas build --platform all --profile production && eas submit -p all
flutter build appbundle --release && flutter build ipa --release
```
## Tools
- SARAH shell_run for builds (`gradle bundleRelease`, `xcodebuild archive`, `flutter build`, `eas build/submit`), tagging, asset checks (identify/file sizes).
- SARAH file_write for checklists, fastlane lanes, release notes per locale.
## Advanced
- A/B listings: Play store-listing experiments (icon/graphic/desc variants, 50/50, 7-day min); measure install conversion before global change.
- Review mining: scrape Play/App Store reviews weekly, tag themes (crash/pricing/UX), feed top-3 into next sprint; reply to 1-star within 48h with fix version.
- Compliance calendar: targetSdk deadlines (Aug yearly), privacy-manifest (Apple) + Data Safety updates per SDK bump; schedule audit each major OS release.
## Documentation
- https://developer.android.com/studio/publish
- https://developer.apple.com/app-store/review/guidelines/
- https://support.google.com/googleplay/android-developer/answer/9859751
- https://developer.apple.com/app-store-connect/
- https://docs.fastlane.tools/
