App Store Submission Automator
Expert in automating App Store and Google Play submissions with Fastlane, screenshot generation, metadata management, and review optimization.
Decision Points
When to Use Staged vs Full Rollout
IF first app version OR major feature changes:
└── Use staged rollout: 10% → 50% → 100% over 7 days
└── Monitor crash rates and user feedback at each stage
ELSE IF hotfix or minor update:
└── IF critical security fix:
└── Full rollout immediately
ELSE:
└── Use 50% → 100% over 2-3 days
Certificate Renewal Decision Matrix
| Scenario | Days Until Expiry | Action |
|---|---|---|
| Distribution cert | < 30 days | Run fastlane match nuke distribution, then regenerate |
| Development cert | < 30 days | Run fastlane match nuke development |
| Provisioning profile | < 14 days | Run match with force_for_new_devices: true |
| Push cert | < 30 days | Regenerate in Apple Developer Portal, update server |
Submission Type Selection
IF internal testing needed:
├── iOS: Use TestFlight external groups (up to 10,000 testers)
└── Android: Use internal track (up to 100 testers)
ELSE IF public beta:
├── iOS: Use TestFlight public link
└── Android: Use closed track with opt-in URL
ELSE IF production ready:
├── Check if all store requirements met (see Quality Gates)
└── Use production/release track
Failure Modes
Match Credential Mismatch
- Symptom: "No certificate found" or "Profile doesn't match certificate"
- Diagnosis: Git repo out of sync or team member generated certs manually
- Fix: Run
fastlane match nuke, regenerate all certificates, commit to match repo
App Review Rejection - Missing Info
- Symptom: "We need additional information to review your app"
- Diagnosis: Missing demo credentials, contact info, or review notes
- Fix: Add demo_user.txt, demo_password.txt, and detailed notes.txt in fastlane/metadata/review_information/
Build Timeout on Large Apps
- Symptom: Fastlane times out during
build_appstep - Diagnosis: App size > 2GB or complex build process
- Fix: Add
build_timeout: 7200to build_app action, enable incremental builds
Screenshot Generation Fails
- Symptom: snapshot/screengrab produces blank or incorrect screenshots
- Diagnosis: UI tests not waiting for animations or using wrong simulators
- Fix: Add explicit waits in UI tests, verify simulator names match Snapfile device list
Metadata Character Limit Exceeded
- Symptom: Upload fails with "Description too long" error
- Diagnosis: Localized metadata exceeds platform limits (App Store: 4000 chars, Play Store: 4000 chars)
- Fix: Run
fastlane precheckbefore submission, trim descriptions to platform limits
Worked Example
Scenario: Setting up automated submission for a React Native app with iOS and Android targets
Initial Assessment:
- App has existing manual submission process
- Team of 4 developers needs shared code signing
- Requirement for staged rollouts and screenshot automation
Step 1: Setup Decision
# In project root
fastlane init
# Choose option 4 (Manual setup)
Decision Point Hit: Certificate management strategy
- Novice choice: Use Xcode automatic signing (fails in CI)
- Expert choice: Setup match for team-wide certificate sharing
Step 2: Configure Match
# fastlane/Matchfile
git_url("https://github.com/company/certificates")
storage_mode("git")
type("appstore") # Also supports: development, adhoc
Step 3: Create Lanes (Key Decision: Beta vs Production)
# fastlane/Fastfile
desc "TestFlight submission with build number increment"
lane :beta do
setup_ci if ENV['CI']
match(type: "appstore", readonly: true)
# Decision: Always increment build, version only for releases
increment_build_number(build_number: ENV['BUILD_NUMBER'])
build_app(workspace: "ios/MyApp.xcworkspace", scheme: "MyApp")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
Expert Insight: Always use skip_waiting_for_build_processing: true in CI to avoid timeouts
Step 4: Validation Before First Run
- Run
fastlane precheckto validate metadata - Test on single device before full screenshot automation
- Verify CI environment has correct Xcode version
Result: Automated pipeline reducing submission time from 45 minutes to 8 minutes
Quality Gates
Pre-submission checklist that must pass before running production lanes:
-
fastlane precheckpasses without warnings - All required metadata files exist in fastlane/metadata/[locale]/
- Screenshots generated for all required device sizes (iPhone 6.9", 6.3", iPad 13")
- Version number incremented from previous release
- Build number is unique and higher than TestFlight latest
- Code signing certificates valid for >30 days
- Demo credentials provided in review_information/ (if app requires login)
- Staged rollout percentage configured (recommend starting at 10%)
- CI environment variables set: FASTLANE_USER, MATCH_PASSWORD, FASTLANE_SESSION
- All localizations complete for target markets
- App Icon and required assets present in correct formats
NOT-FOR Boundaries
Do NOT use this skill for:
-
CI/CD Pipeline Setup → Use
github-actions-pipeline-builderinstead- This skill assumes CI exists; doesn't create workflows/pipelines
-
App Architecture Decisions → Use
react-native-architectinstead- This skill handles deployment, not code structure or navigation
-
Analytics and Crash Reporting → Use
mobile-analytics-crash-reporting-expertinstead- This skill focuses on store submission, not post-release monitoring
-
App Store Optimization (ASO) → Use dedicated ASO specialist
- This skill handles technical submission, not keyword optimization or conversion
-
Backend API Development → Use
api-architectinstead- This skill assumes your app backend is ready for production
When to delegate:
- For build configuration issues →
react-native-architect - For CI/CD setup from scratch →
github-actions-pipeline-builder - For app performance monitoring →
mobile-analytics-crash-reporting-expert