一键导入
staged-rollouts
Use Play percentage rollouts and iOS phased release to limit blast radius. Use this when planning or operating a production release.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use Play percentage rollouts and iOS phased release to limit blast radius. Use this when planning or operating a production release.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | staged-rollouts |
| description | Use Play percentage rollouts and iOS phased release to limit blast radius. Use this when planning or operating a production release. |
A staged rollout is the simplest risk-control tool available to mobile teams. The policy is: never release to 100% on day one. Ramp slowly, watch the crash SLO, and halt the moment a regression surfaces.
Default ladder (adjust per risk level):
| Day | Android (Play) | iOS (phased) |
|---|---|---|
| 0 | 5% | 1% (auto) |
| 1 | 10% | 2% (auto) |
| 2 | 20% | 5% (auto) |
| 3 | 50% | 10% (auto) |
| 4–6 | 100% | 20/50/100% (auto) |
Higher-risk releases (new auth flows, IAP changes, framework upgrades) start at 1% and linger 48h per step.
bundle exec fastlane supply \
--package_name com.acme.app \
--aab build/app/outputs/bundle/release/app-release.aab \
--track production \
--rollout 0.05 \
--release_status inProgress \
--json_key "$PLAY_SERVICE_ACCOUNT_JSON_PATH"
bundle exec fastlane supply \
--track production \
--rollout 0.20 \
--skip_upload_aab true \
--skip_upload_metadata true
# Set rollout to 0 — no new devices receive the new build
bundle exec fastlane supply --track production --rollout 0 --skip_upload_aab true
Users already on the new build stay on it; only new installs/updates are paused. For true rollback, re-promote the previous AAB.
deliver(
api_key: api_key,
submit_for_review: true,
automatic_release: false,
phased_release: true,
)
Apple ramps over 7 days automatically to devices with auto-updates on. Users can always manually update to the new version regardless of phase.
Via App Store Connect UI or the Connect API:
# Pause (PATCH to appStoreVersionPhasedReleases)
curl -X PATCH "https://api.appstoreconnect.apple.com/v1/appStoreVersionPhasedReleases/$ID" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"data":{"type":"appStoreVersionPhasedReleases","id":"'$ID'","attributes":{"phasedReleaseState":"PAUSED"}}}'
States: INACTIVE → ACTIVE → PAUSED / COMPLETE. You cannot go back in phases.
Don't promote on a schedule; promote on evidence. Automate a gate:
# .github/workflows/promote.yml
on:
schedule: [{ cron: "0 13 * * 1-5" }] # weekdays 13:00 UTC
jobs:
check-and-promote:
runs-on: ubuntu-latest
steps:
- name: Fetch crash-free sessions from Firebase
run: |
rate=$(curl -s -H "Authorization: Bearer $FIREBASE_TOKEN" \
"https://crashlytics.googleapis.com/.../metrics/crashFreeSessions?version=1.4.2" \
| jq -r '.value')
if (( $(echo "$rate < 99.5" | bc -l) )); then
echo "Crash-free $rate% below SLO; halting"; exit 1
fi
- run: bundle exec fastlane android promote_next
Every rollout step posts to #release:
Binary rollout and flag flip are always separate; see feature-flags-release.
versionCode — Play rejects it. Always bump.#release channel notified at every transition.Use Apple's phased release for automatic updates on iOS — behavior, pausing, resuming, and interaction with manual updates. Use this when shipping production iOS builds.
Generate keystores, enrol in Play App Signing, and understand v1/v2/v3/v4 APK signature schemes. Use this when setting up Android release signing.
Diagnose and fix common Apple and Google code-signing errors. Use this when a release build fails to sign, upload, or install.
Manage Apple certificates, provisioning profiles, automatic vs manual signing, and fastlane match. Use this when setting up iOS release signing.
Publish Android apps to Amazon Appstore, Huawei AppGallery, Samsung Galaxy Store, and deal with HMS vs GMS. Use this when targeting non-Google Android markets.
Release to the App Store using App Store Connect, TestFlight, metadata, and screenshots. Use this when shipping an iOS build to Apple.