一键导入
app-store-release
Release to the App Store using App Store Connect, TestFlight, metadata, and screenshots. Use this when shipping an iOS build to Apple.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Release to the App Store using App Store Connect, TestFlight, metadata, and screenshots. Use this when shipping an iOS build to Apple.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
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.
Use Play percentage rollouts and iOS phased release to limit blast radius. Use this when planning or operating a production release.
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.
| name | app-store-release |
| description | Release to the App Store using App Store Connect, TestFlight, metadata, and screenshots. Use this when shipping an iOS build to Apple. |
Apple's release path is: Archive → Upload → Process → TestFlight → Submit for Review → Phased Release. Automate each step with pilot and deliver; never click through the Connect UI on release day.
# Flutter
flutter build ipa --release \
--export-options-plist=ios/ExportOptions.plist \
--build-name=1.4.2 --build-number=$GITHUB_RUN_NUMBER
# Native
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp \
-configuration Release -archivePath build/MyApp.xcarchive archive
xcodebuild -exportArchive -archivePath build/MyApp.xcarchive \
-exportPath build/ipa -exportOptionsPlist ios/ExportOptions.plist
Minimal ExportOptions.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key><string>app-store</string>
<key>signingStyle</key><string>manual</string>
<key>teamID</key><string>ABCDE12345</string>
<key>uploadBitcode</key><false/>
<key>uploadSymbols</key><true/>
<key>provisioningProfiles</key>
<dict>
<key>com.acme.app</key>
<string>match AppStore com.acme.app</string>
</dict>
</dict>
</plist>
pilot (TestFlight)lane :beta do
api_key = app_store_connect_api_key(
key_id: ENV["APP_STORE_CONNECT_KEY_ID"],
issuer_id: ENV["APP_STORE_CONNECT_ISSUER_ID"],
key_content: ENV["APP_STORE_CONNECT_KEY_CONTENT"],
is_key_content_base64: true,
)
setup_ci
match(type: "appstore", readonly: true, api_key: api_key)
build_app(workspace: "MyApp.xcworkspace", scheme: "MyApp",
export_options: "ios/ExportOptions.plist")
upload_to_testflight(
api_key: api_key,
skip_waiting_for_build_processing: true,
changelog: File.read("../CHANGELOG_CURRENT.txt"),
distribute_external: true,
groups: ["External Beta"],
)
end
Alternative: xcrun altool --upload-app -f MyApp.ipa --apiKey ... --apiIssuer ....
Automate group membership with pilot:
bundle exec fastlane pilot add user@example.com --groups "External Beta"
deliverios/fastlane/metadata/en-US/ tree:
metadata/
en-US/
name.txt # ≤ 30 chars
subtitle.txt # ≤ 30 chars
description.txt # ≤ 4000 chars
keywords.txt # comma-separated, ≤ 100 chars
release_notes.txt # ≤ 4000 chars, this version
support_url.txt
marketing_url.txt
privacy_url.txt
Submit:
lane :release do
api_key = app_store_connect_api_key(...)
deliver(
api_key: api_key,
submit_for_review: true,
automatic_release: false,
phased_release: true,
force: true, # skip HTML preview
precheck_include_in_app_purchases: false,
submission_information: {
add_id_info_uses_idfa: false,
export_compliance_uses_encryption: false,
},
)
end
Required sizes (as of Xcode 15): 6.7" iPhone, 6.1" iPhone (optional fallback), 12.9" iPad Pro, 13" iPad Pro. Generate with fastlane snapshot:
bundle exec fastlane snapshot init
# Configure Snapfile with devices + languages
bundle exec fastlane snapshot
Place results under ios/fastlane/screenshots/<locale>/.
Apps using only HTTPS qualify for the simplified compliance path. Set in Info.plist to skip the per-build question:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
If you use custom crypto, you need annual self-classification and possibly an ERN/CCATS.
Enable via deliver(phased_release: true). Apple's 7-day ramp delivers updates to 1%, 2%, 5%, 10%, 20%, 50%, 100% of devices set to auto-update. See the dedicated phased-release-ios skill for pausing/resuming.
missing_compliance email on first upload of a version — open the build in TestFlight and answer export compliance.CFBundleIconName. Check the email details.upload_symbols_to_crashlytics or sentry-cli debug-files upload right after build_app.For critical bugs affecting users, request expedited review (App Store Connect → Contact Us → App Review → Request Expedited Review). Use sparingly; Apple tracks abuse.
Separate from PrivacyInfo.xcprivacy. Fill under App Store Connect → App Privacy. Must match actual data practices across the app and all embedded SDKs (ads, analytics, crash reporters).
match-managed profiles.pilot with App Store Connect API key; no password login.ios/fastlane/metadata.phased_release: true on production submissions.