Claude Code Plugins

Community-maintained marketplace

Feedback

gmacko-release-deploy-mobile

@gmackie/vercel-expo-app-template
0
0

Use when (1) building mobile app via EAS for distribution, (2) submitting to App Store or Google Play, (3) managing mobile release workflow. Handles Expo EAS build and submission process.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name gmacko-release-deploy-mobile
description Use when (1) building mobile app via EAS for distribution, (2) submitting to App Store or Google Play, (3) managing mobile release workflow. Handles Expo EAS build and submission process.
license MIT
compatibility opencode
metadata [object Object]

Gmacko Mobile Deployment (EAS)

Build and submit mobile applications using Expo Application Services (EAS).

When to Use

  • Web deployment is complete (or mobile-only release)
  • Ready to build for TestFlight/Play Store internal testing
  • Ready to submit to App Store / Google Play
  • Need to manage app credentials

Prerequisites

  • EAS CLI installed: npm install -g eas-cli
  • EAS authenticated: eas whoami
  • EAS project configured: apps/mobile/eas.json
  • Apple/Google credentials configured

Workflow

digraph deploy_mobile {
    rankdir=TB;
    node [shape=box];
    
    start [label="Start Mobile Release" shape=ellipse];
    confirm [label="1. Confirm Build Type"];
    version [label="2. Update Version"];
    credentials [label="3. Verify Credentials"];
    build [label="4. Start EAS Build"];
    monitor [label="5. Monitor Build"];
    success [label="Build Success?" shape=diamond];
    submit [label="6. Submit to Stores"];
    wait [label="7. Wait for Review"];
    document [label="8. Document Release"];
    done [label="Mobile Release Complete" shape=ellipse];
    failed [label="Build Failed" shape=ellipse];
    
    start -> confirm -> version -> credentials -> build;
    build -> monitor -> success;
    success -> submit [label="yes"];
    success -> failed [label="no"];
    submit -> wait -> document -> done;
}

Build Profiles

Defined in apps/mobile/eas.json:

Profile Purpose Distribution
development Dev builds with Expo Go Internal
preview TestFlight / Internal testing Internal
production App Store / Play Store Store

Execution Steps

Step 1: Confirm Build Type

Ask user:

I'm preparing a mobile build.

Options:

  1. Preview - Internal testing (TestFlight / Internal track)
  2. Production - Store release (App Store / Play Store)

Platforms:

  • iOS
  • Android
  • Both

Which would you like to build?

Step 2: Update Version

Check and update version in apps/mobile/app.config.js:

// Current version
const version = "1.0.0";  // User-facing version
const buildNumber = "1";   // iOS: CFBundleVersion, Android: versionCode

Ask user:

Current version: 1.0.0 (build 1)

For this release:

  • Version: [suggest next version]
  • Build number: [suggest increment]

Confirm or specify new values.

Update config:

# In apps/mobile/app.config.js
# Update version and buildNumber constants

Step 3: Verify Credentials

Check credentials are configured:

# Check iOS credentials
eas credentials --platform ios

# Check Android credentials
eas credentials --platform android

For iOS:

## iOS Credentials Check
- [ ] Apple Developer account connected
- [ ] Distribution certificate valid
- [ ] Provisioning profile valid
- [ ] Push notification key configured (if needed)

For Android:

## Android Credentials Check
- [ ] Keystore configured
- [ ] Service account key available (for Play Store)
- [ ] Bundle signing configured

Step 4: Start EAS Build

Preview Build (internal testing):

# Build for both platforms
eas build --profile preview --platform all

# Build for specific platform
eas build --profile preview --platform ios
eas build --profile preview --platform android

Production Build (store release):

# Build for both platforms
eas build --profile production --platform all

# Build for specific platform
eas build --profile production --platform ios
eas build --profile production --platform android

Capture build IDs:

# Build URLs will be provided in output
# Example: https://expo.dev/accounts/gmacko/projects/my-app/builds/xxx

Step 5: Monitor Build

Monitor build progress:

# List recent builds
eas build:list --limit 5

# View specific build
eas build:view [build-id]

# Open in browser
eas build:view [build-id] --open

Report status:

Build Status
============
iOS Build: BUILDING / SUCCESS / FAILED
  - Build ID: xxx
  - Started: [time]
  - Duration: [Xm Xs]

Android Build: BUILDING / SUCCESS / FAILED
  - Build ID: yyy
  - Started: [time]
  - Duration: [Xm Ys]

Build times:

  • iOS: ~15-30 minutes
  • Android: ~10-20 minutes

Step 6: Submit to Stores

For Preview builds (internal testing):

iOS (TestFlight):

eas submit --platform ios --profile preview

Android (Internal track):

eas submit --platform android --profile preview

For Production builds (store release):

iOS (App Store):

eas submit --platform ios --profile production

Android (Play Store):

eas submit --platform android --profile production

Step 7: Wait for Review

iOS App Store:

  • TestFlight: Usually instant to ~1 hour
  • App Store: 24-48 hours typical, can take longer

Google Play:

  • Internal track: Usually instant
  • Production: Few hours to a few days

Track status:

## Review Status

### iOS
- Submitted: [timestamp]
- Status: Waiting for Review / In Review / Ready for Sale
- Estimated: [X hours/days]

### Android
- Submitted: [timestamp]
- Status: Pending / In Review / Published
- Estimated: [X hours]

Step 8: Document Release

Update release summary:

## Mobile Deployment Record

### iOS
- **Version**: X.Y.Z (build N)
- **Build ID**: [eas-build-id]
- **Submitted**: [timestamp]
- **Status**: [current status]
- **TestFlight**: [available/pending]
- **App Store**: [available/pending/in-review]

### Android
- **Version**: X.Y.Z (versionCode N)
- **Build ID**: [eas-build-id]
- **Submitted**: [timestamp]
- **Status**: [current status]
- **Internal Track**: [available/pending]
- **Production**: [available/pending/in-review]

### Release Notes (for stores)
[Same as GitHub release notes, adapted for store format]

Credential Management

iOS Credentials

# Setup/update credentials
eas credentials --platform ios

# Renew expiring certificates
eas credentials --platform ios
# Select "Manage credentials" > "Renew"

Android Credentials

# Setup/update credentials  
eas credentials --platform android

# View keystore info
eas credentials --platform android
# Select "View credentials"

Error Handling

Build Failures

  1. Check build logs:

    eas build:view [build-id]
    
  2. Common iOS issues:

    • Code signing errors → Check credentials
    • Pod install failures → Clear pods, rebuild
    • Xcode version mismatch → Update EAS config
  3. Common Android issues:

    • Gradle errors → Check dependencies
    • Keystore issues → Verify credentials
    • Memory errors → Adjust EAS build config

Submission Failures

  1. iOS rejection reasons:

    • Missing screenshots
    • Privacy policy issues
    • Guideline violations
  2. Android rejection reasons:

    • Policy violations
    • Missing permissions justification
    • Target API level issues

OTA Updates (Expo Updates)

For minor updates without store release:

# Publish OTA update
eas update --branch production --message "Bug fixes"

# Check update status
eas update:list

Note: OTA updates are limited to JS/asset changes, not native code.

Red Flags

Rationalization Correction
"Skip version increment" ALWAYS increment build number for new builds
"Credentials are fine, skip check" Verify credentials before every release
"Submit to production directly" Test via preview/TestFlight first
"Don't need to wait for review" Document expected review time
"OTA can fix native issues" Native changes require new build

Integration

  • Input: Build profile, platforms, version
  • References: Release summary, eas.json config
  • Output: Build IDs, store submission status, updated release record
  • Next: gmacko-release-close or monitor store status