mobile-app-deployment
Skill4 starsChanged 5 months agoMITView on GitHub
Mobile app deployment patterns for iOS App Store and Google Play Store including EAS Submit, signing credentials, TestFlight, staged rollouts, OTA updates (expo-updates), and CI/CD. Use for shipping React Native apps to production.
- Reads credentials
In this repository101 other files it gives its agents.
- ai-video-understandingSkill
- apple-foundation-modelsSkill
- arch-dddSkill
- arch-decision-recordsSkill
- arch-diagramsSkill
- arch-eventsSkill
- arch-mvp-roadmapSkill
- arch-python-modernSkill
- aws-app-runnerSkill
- aws-cicd-patternsSkill
- aws-security-hardeningSkill
- azure-functions-python-v2Skill
- azure-identity-m2m-authSkill
- azure-service-bus-messagingSkill
- azure-workflow-execution-modelsSkill
- caddy-tls-proxySkill
- compliance-frameworksSkill
- design-system-workflowSkill
- dev-debugging-strategiesSkill
- dev-standardsSkill
- docker-python-poetrySkill
- docker-pythonSkill
- fastapi-patternsSkill
- ffmpeg-laravel-videoSkill
- formik-yup-react-nativeSkill
- frontend-accessibilitySkill
- frontend-angular-aiSkill
- frontend-angularSkill
- frontend-angular-toolingSkill
- frontend-design-systemsSkill
- frontend-material-chatSkill
- frontend-material-design-3Skill
- frontend-svelteSkill
- gcp-cicd-patternsSkill
- gcp-cloud-runSkill
- gcp-cloudsql-infrastructureSkill
- gcp-finopsSkill
- gcp-observabilitySkill
- gcp-security-hardeningSkill
- github-actions-cicdSkill
- healthkit-biofeedbackSkill
- infra-terraformSkill
- ios-app-qualitySkill
- ios-audio-hapticsSkill
- jest-nestjs-testingSkill
- langchain-azure-openai-patternsSkill
- laravel-auth-hardeningSkill
- laravel-ci-mysqlSkill
- laravel-mix-webpackSkill
- laravel-modern-patternsSkill
- laravel-pint-patternsSkill
- laravel-s3-storageSkill
- laravel-sail-dockerSkill
- mobile-e2e-testingSkill
- mobile-offline-syncSkill
- mobile-push-notificationsSkill
- mobile-video-uploadSkill
- mongodb-asyncmongoclient-patternsSkill
- mongodb-atlas-patternsSkill
- nestjs-patternsSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
When eas build fails with Provisioning Profile has expired in --non-interactive mode, renew locally:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Mobile App Deployment
Deployment Workflow
The standard React Native deployment pipeline follows four phases: build (EAS Build compiles native binaries), submit (EAS Submit uploads to App Store Connect / Google Play Console), review (platform-specific approval, typically 24-48 hours), and release (staged rollout or full availability). OTA updates via expo-updates bypass the build-submit-review cycle for JavaScript-only changes.
OTA Update Decision Matrix
OTA updates (expo-updates) are appropriate for JavaScript/TypeScript code changes, React component and styling updates, asset changes (images, fonts), and API endpoint modifications. A native build is required for permission changes, native module additions, Expo SDK upgrades, app icon or splash screen changes, and any Swift/Objective-C/Kotlin/Java modifications. When uncertain, @expo/fingerprint detects whether native changes exist.
Critical: CodePush Deprecation
Microsoft CodePush was discontinued on March 31, 2025 with the App Center shutdown. The recommended replacement is expo-updates with EAS Update, which provides integrated channel/branch management, automatic rollback on crashes, and compatibility with the React Native New Architecture.
Camera/Video App Review
Camera and video apps face elevated scrutiny: iOS guideline 2.5.14 requires a visible recording indicator and explicit consent; Google Play's Photo/Video Permissions policy (enforced May 2025) requires a declaration form for apps using READ_MEDIA_IMAGES or READ_MEDIA_VIDEO.
iOS Provisioning Profile Renewal (EAS)
When eas build fails with Provisioning Profile has expired in --non-interactive mode, renew locally:
eas credentials --platform iosInteractive flow: Select build profile (development) > Build Credentials > All: Set up all required credentials > reuse existing distribution certificate > select devices for ad hoc profile.
The "App Store Configuration" section may show old expired certs — what matters is the "Build Credentials" section showing active status. After renewal, subsequent --non-interactive builds will use the new profile.
Anti-pattern: Running --non-interactive with an expired provisioning profile fails silently — renew first via eas credentials --platform ios.
Google Play Data Safety Preparation
Accurate Data Safety submissions require cross-referencing the codebase: camera usage paths (classification + profile photos), device identifiers (expo-device deviceName), privacy policy URL coverage for all declared data types, and in-app post-login access to the privacy policy.
EAS Build Configuration
Peer dependency conflicts: .npmrc with legacy-peer-deps=true resolves peer dependency conflicts for EAS cloud builds (npm ci respects .npmrc) without modifying eas.json install commands.
Export compliance: ITSAppUsesNonExemptEncryption: false in app.json ios.infoPlist skips the interactive export compliance prompt that blocks --non-interactive builds.
Free tier budget: CI-triggered EAS builds consume a build queue slot per attempt (~3h wait) on the free tier — if: false in CI with manual eas build CLI avoids queue exhaustion.
EAS-managed credentials: eas credentials -p android generates and stores keystores securely in EAS. Manual keytool -genkey adds local credential management burden and risks committing keys to git.
EAS Secrets Management
API keys belong in EAS Dashboard environment variables, not in eas.json env blocks (which get committed to git). Create with:
eas env:create --name CLASSIFIER_API_KEY --value '<key>' --visibility secret --environment productionBuild logs for secret-visibility vars show "No environment variables with visibility Plain text and Sensitive found" — this is expected; the value is injected at build time but hidden from logs.
Non-interactive update workaround: eas env:update requires interactive prompts. In CI or non-interactive shells, delete + recreate:
eas env:delete <env> --variable-name NAME --variable-environment <env> --non-interactive
eas env:create --name NAME --value '<new>' --visibility secret --environment <env>End-to-end key verification before build: curl -s -o /dev/null -w "%{http_code}" -X POST <api-url> -H "Authorization: Bearer <key>" — returns 403 for a bad key, 500 (or similar) for a good key with missing body. A 30-second curl catches key mismatches that otherwise surface only after a multi-hour build + device install. Client-side EAS secret and server-side secret store (e.g. AWS Secrets Manager) are two locations that must stay in sync.
References
See reference.md for detailed submission workflows, signing credential management, versioning strategies, and anti-patterns. See examples.md for production-ready configurations including eas.json profiles, GitHub Actions pipelines, expo-updates integration code, and EAS CLI commands.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

