{"slug":"mobile-deployment-eas","title":"mobile-deployment-eas","summary":"EAS Build, Update, Submit deployment patterns","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-29T15:28:13.619026Z","repo":{"url":"https://github.com/agents-inc/skills","stars":24,"forks":8,"license":"MIT","updatedAt":"2026-09-07T17:50:55Z"},"bodyHtml":"<hr>\n<h2>name: mobile-deployment-eas\ndescription: EAS Build, Update, Submit deployment patterns</h2>\n<h1>EAS Deployment Patterns</h1>\n<blockquote>\n<p><strong>Quick Guide:</strong> EAS (Expo Application Services) handles cloud builds, OTA updates, and app store submission. Use build profiles in <code>eas.json</code> to separate development/preview/production builds. Use EAS Update with runtime version fingerprinting for safe OTA deploys. Use <code>--environment</code> flag (SDK 55+) instead of <code>--channel</code> when publishing updates. Let EAS manage credentials unless you have enterprise requirements.</p>\n</blockquote>\n<hr>\n<p>&lt;critical_requirements&gt;</p>\n<h2>CRITICAL: Before Using This Skill</h2>\n<blockquote>\n<p><strong>All code must follow project conventions in CLAUDE.md</strong> (kebab-case, named exports, import ordering, <code>import type</code>, named constants)</p>\n</blockquote>\n<p><strong>(You MUST use the <code>--environment</code> flag with <code>eas update</code> on SDK 55+ projects -- the <code>--channel</code> flag is replaced)</strong></p>\n<p><strong>(You MUST set <code>runtimeVersion</code> with <code>\"fingerprint\"</code> policy for projects with native dependencies -- mismatched runtime versions crash apps on OTA update)</strong></p>\n<p><strong>(You MUST use EAS Secrets for sensitive values -- NEVER put API keys or tokens in <code>eas.json</code> env blocks or <code>EXPO_PUBLIC_</code> variables)</strong></p>\n<p><strong>(You MUST run <code>eas build</code> from the app directory in monorepos -- NOT from the repository root)</strong></p>\n<p>&lt;/critical_requirements&gt;</p>\n<hr>\n<p><strong>Auto-detection:</strong> EAS Build, EAS Update, EAS Submit, eas.json, eas build, eas update, eas submit, eas credentials, eas secret, EAS Workflows, build profiles, OTA updates, runtime version, fingerprint policy, app store submission, code signing, eas-cli</p>\n<p><strong>When to use:</strong></p>\n<ul>\n<li>Configuring cloud builds for iOS and Android</li>\n<li>Publishing OTA (over-the-air) updates to deployed apps</li>\n<li>Submitting builds to App Store or Google Play</li>\n<li>Managing iOS provisioning profiles and Android keystores</li>\n<li>Setting up CI/CD pipelines for mobile deployment</li>\n<li>Configuring build profiles for different environments</li>\n</ul>\n<p><strong>Key patterns covered:</strong></p>\n<ul>\n<li><code>eas.json</code> build profiles with inheritance (<code>extends</code>)</li>\n<li>EAS Update channels, branches, and runtime versions</li>\n<li>EAS Submit for iOS App Store and Google Play</li>\n<li>Credentials management (automatic vs local)</li>\n<li>EAS Secrets for sensitive build-time values</li>\n<li>EAS Workflows for CI/CD automation</li>\n<li>Monorepo build configuration</li>\n<li>Version management with <code>autoIncrement</code> and <code>appVersionSource</code></li>\n</ul>\n<p><strong>When NOT to use:</strong></p>\n<ul>\n<li>General Expo SDK development (app.config.ts, Expo Router, components)</li>\n<li>Local-only builds with <code>npx expo run:ios/android</code> without EAS</li>\n<li>Projects not using Expo managed workflow</li>\n</ul>\n<hr>\n\n<hr>\n\n<hr>\n<p><strong>Detailed Resources:</strong></p>\n<ul>\n<li><a href=\"examples/core.md\">examples/core.md</a> - Build profiles, eas.json configuration, runtime versions, submit config, monorepo setup</li>\n<li><a href=\"examples/updates.md\">examples/updates.md</a> - OTA update workflows, client-side update hook, channel strategies</li>\n<li><a href=\"examples/credentials.md\">examples/credentials.md</a> - iOS provisioning, Android keystores, local credentials, code signing</li>\n<li><a href=\"examples/workflows.md\">examples/workflows.md</a> - EAS Workflows YAML, custom build steps, GitHub integration</li>\n<li><a href=\"reference.md\">reference.md</a> - Decision frameworks, CLI commands, version management, anti-patterns</li>\n</ul>\n<hr>\n<p>&lt;red_flags&gt;</p>\n<h2>RED FLAGS</h2>\n<p><strong>High Priority Issues:</strong></p>\n<ul>\n<li><strong>Using <code>--channel</code> on SDK 55+ projects</strong> -- replaced by <code>--environment</code> flag; old flag no longer works</li>\n<li><strong>Missing <code>runtimeVersion</code> in app config</strong> -- OTA updates fail silently or crash on incompatible builds</li>\n<li><strong>Putting secrets in <code>eas.json</code> env blocks</strong> -- config is committed to version control; use EAS Secrets instead</li>\n<li><strong>Running <code>eas build</code> from monorepo root</strong> -- must run from the app directory (<code>apps/mobile/</code>, not repo root)</li>\n<li><strong>Not setting <code>autoIncrement</code> for production</strong> -- Android versionCode must strictly increase; Play Store rejects same or lower values</li>\n</ul>\n<p><strong>Medium Priority Issues:</strong></p>\n<ul>\n<li><strong>Using <code>distribution: \"store\"</code> for preview builds</strong> -- use <code>\"internal\"</code> for ad hoc/internal distribution</li>\n<li><strong>Not configuring <code>resourceClass</code></strong> -- default may be slow for large projects; <code>\"medium\"</code> or <code>\"large\"</code> speeds up builds</li>\n<li><strong>Skipping <code>--non-interactive</code> in CI</strong> -- EAS prompts for input by default; CI pipelines hang without this flag</li>\n<li><strong>Forgetting <code>--auto-submit</code> when build + submit are always paired</strong> -- saves a manual step and avoids submitting the wrong build</li>\n</ul>\n<p><strong>Gotchas &amp; Edge Cases:</strong></p>\n<ul>\n<li><strong><code>fingerprint</code> policy can be too aggressive</strong> -- may flag changes that don't affect native code, forcing unnecessary rebuilds</li>\n<li><strong>iOS provisioning profiles expire after 12 months</strong> -- won't affect apps in production, but next build requires regeneration via <code>eas credentials</code></li>\n<li><strong><code>autoIncrement: \"version\"</code> vs <code>\"buildNumber\"</code></strong> -- <code>\"version\"</code> bumps the user-visible version string; <code>\"buildNumber\"</code> bumps the internal build number only</li>\n<li><strong>EAS Update has ~50MB asset limit</strong> -- large assets should use a CDN, not be bundled in updates</li>\n<li><strong><code>appVersionSource: \"remote\"</code> requires paid plan</strong> -- tracks versions server-side; free tier must manage locally</li>\n<li><strong>Android <code>buildType: \"apk\"</code> is for testing only</strong> -- Play Store requires <code>\"app-bundle\"</code> (AAB) for production submissions</li>\n<li><strong>Code signing (end-to-end) requires Production or Enterprise plan</strong> -- not available on free tier</li>\n<li><strong><code>extends</code> depth limit is 5 levels</strong> -- circular dependencies cause build errors</li>\n<li><strong>iOS simulator builds cannot install on physical devices</strong> -- need a separate <code>development-device</code> profile with <code>\"simulator\": false</code></li>\n</ul>\n<p>&lt;/red_flags&gt;</p>\n<hr>\n<p>&lt;critical_reminders&gt;</p>\n<h2>CRITICAL REMINDERS</h2>\n<blockquote>\n<p><strong>All code must follow project conventions in CLAUDE.md</strong></p>\n</blockquote>\n<p><strong>(You MUST use the <code>--environment</code> flag with <code>eas update</code> on SDK 55+ projects -- the <code>--channel</code> flag is replaced)</strong></p>\n<p><strong>(You MUST set <code>runtimeVersion</code> with <code>\"fingerprint\"</code> policy for projects with native dependencies -- mismatched runtime versions crash apps on OTA update)</strong></p>\n<p><strong>(You MUST use EAS Secrets for sensitive values -- NEVER put API keys or tokens in <code>eas.json</code> env blocks or <code>EXPO_PUBLIC_</code> variables)</strong></p>\n<p><strong>(You MUST run <code>eas build</code> from the app directory in monorepos -- NOT from the repository root)</strong></p>\n<p><strong>Failure to follow these rules will cause OTA update crashes, credential exposure, and build failures.</strong></p>\n<p>&lt;/critical_reminders&gt;</p>\n","files":[{"path":"examples/core.md","sizeBytes":8918,"isText":true},{"path":"examples/credentials.md","sizeBytes":6093,"isText":true},{"path":"examples/updates.md","sizeBytes":7476,"isText":true},{"path":"examples/workflows.md","sizeBytes":6144,"isText":true},{"path":"reference.md","sizeBytes":8417,"isText":true},{"path":"SKILL.md","sizeBytes":14500,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"notes-only","suspicious":0,"notes":3,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-29T15:30:59.925586Z","sha256":"A34FAC6F8334DB9A192C71B99ECD3EF5E42C4A6D3514C383C30430119E5EE626","sizeBytes":19059},"review":null,"source":{"repositoryUrl":"https://github.com/agents-inc/skills","path":"dist/plugins/mobile-deployment-eas/skills/mobile-deployment-eas","license":"MIT","commit":"3a51ef571e996b18294bf776d53dbdad26de0617","subtreeSha":"1C8EF9AB3B84EF14596DF2957CACE3351CDC4600FCF18F99678FF31001EF8164","lastSyncedAt":"2026-09-29T15:27:48.914434Z"},"reviewedAt":"2026-09-29T15:37:06.718766Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/agents-inc/skills/tree/main/dist/plugins/mobile-deployment-eas/skills/mobile-deployment-eas"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install agents-inc-skills@llmmart"},{"target":"git","command":"git clone https://github.com/agents-inc/skills.git"}]}