expo-build-deploy

Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

242 stars

Best use case

expo-build-deploy is best used when you need a repeatable AI agent workflow instead of a one-off prompt. It is especially useful for teams working in multi. Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

Users should expect a more consistent workflow output, faster repeated execution, and less time spent rewriting prompts from scratch.

Practical example

Example input

Use the "expo-build-deploy" skill to help with this workflow task. Context: Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

Example output

A structured workflow result with clearer steps, more consistent formatting, and an output that is easier to reuse in the next run.

When to use this skill

  • Use this skill when you want a reusable workflow rather than writing the same prompt again and again.

When not to use this skill

  • Do not use this when you only need a one-off answer and do not need a reusable workflow.
  • Do not use it if you cannot install or maintain the related files, repository context, or supporting tools.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/expo-build-deploy/SKILL.md --create-dirs "https://raw.githubusercontent.com/aiskillstore/marketplace/main/skills/cjharmath/expo-build-deploy/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/expo-build-deploy/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How expo-build-deploy Compares

Feature / Agentexpo-build-deployStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Expo Build & Deploy (iOS)

## EAS Build Setup

### Initial configuration

```bash
# Install EAS CLI
npm install -g eas-cli

# Login to Expo account
eas login

# Initialize EAS in project
eas build:configure
```

This creates `eas.json`:

```json
{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}
```

### app.json iOS configuration

```json
{
  "expo": {
    "name": "MyApp",
    "slug": "myapp",
    "version": "1.0.0",
    "scheme": "myapp",
    "ios": {
      "bundleIdentifier": "com.yourcompany.myapp",
      "buildNumber": "1",
      "supportsTablet": false,
      "infoPlist": {
        "NSCameraUsageDescription": "Take photos for your profile",
        "NSLocationWhenInUseUsageDescription": "Find locations near you"
      }
    }
  }
}
```

## Build Types

### Development build (for development)

```bash
# For simulator
eas build --profile development --platform ios

# For physical device
eas build --profile development --platform ios --local
```

Use with `npx expo start --dev-client`

### Preview build (internal testing)

```bash
eas build --profile preview --platform ios
```

Distributes via ad-hoc provisioning. Testers install via link.

### Production build (App Store)

```bash
eas build --profile production --platform ios
```

## Credentials Management

EAS manages credentials automatically, but you can control them:

```bash
# View current credentials
eas credentials

# Let EAS manage everything (recommended)
# Just run build, it handles certificates

# Use existing credentials
eas credentials --platform ios
# Select "Use existing" and provide paths
```

### Manual credential setup (if needed)

1. Create App ID in Apple Developer Portal
2. Create Distribution Certificate
3. Create Provisioning Profile
4. Configure in `eas.json`:

```json
{
  "build": {
    "production": {
      "ios": {
        "credentialsSource": "local"
      }
    }
  }
}
```

## Environment Variables

### In eas.json

```json
{
  "build": {
    "production": {
      "env": {
        "API_URL": "https://api.yourapp.com"
      }
    },
    "preview": {
      "env": {
        "API_URL": "https://staging-api.yourapp.com"
      }
    }
  }
}
```

### Secrets (sensitive values)

```bash
# Set secret
eas secret:create --name API_KEY --value "sk_live_xxx" --scope project

# List secrets
eas secret:list

# Use in app.json
{
  "extra": {
    "apiKey": process.env.API_KEY
  }
}
```

Access in code:

```typescript
import Constants from 'expo-constants';

const apiKey = Constants.expoConfig?.extra?.apiKey;
```

## TestFlight Deployment

### Configure submit profile

```json
{
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "1234567890",
        "appleTeamId": "XXXXXXXXXX"
      }
    }
  }
}
```

Get `ascAppId` from App Store Connect URL: `https://appstoreconnect.apple.com/apps/1234567890`

### Submit to TestFlight

```bash
# Build and submit in one command
eas build --profile production --platform ios --auto-submit

# Or submit existing build
eas submit --platform ios --latest

# Submit specific build
eas submit --platform ios --id <build-id>
```

### App Store Connect setup (first time)

1. Create app in App Store Connect
2. Fill in app information
3. Set up TestFlight:
   - Add internal testers (immediate access)
   - Create external testing group (requires review)

## App Store Submission

### Pre-submission checklist

- [ ] App icons (1024x1024 for App Store)
- [ ] Screenshots for required device sizes
- [ ] Privacy policy URL
- [ ] App description and keywords
- [ ] Age rating questionnaire
- [ ] Export compliance (encryption)

### Submit for review

1. Build with production profile
2. Submit to App Store Connect
3. In App Store Connect:
   - Select build for submission
   - Complete app information
   - Submit for review

```bash
# Automated submission
eas submit --platform ios --latest
```

## Over-the-Air Updates

For JS/asset-only changes (no native code changes):

```bash
# Publish update
eas update --branch production --message "Bug fix for login"

# Preview before publishing
eas update --branch preview --message "Testing new feature"
```

### Configure update channels

```json
{
  "build": {
    "production": {
      "channel": "production"
    },
    "preview": {
      "channel": "preview"
    }
  }
}
```

### Check for updates in app

```typescript
import * as Updates from 'expo-updates';

async function checkForUpdates() {
  if (__DEV__) return; // Skip in development
  
  try {
    const update = await Updates.checkForUpdateAsync();
    if (update.isAvailable) {
      await Updates.fetchUpdateAsync();
      await Updates.reloadAsync();
    }
  } catch (error) {
    console.log('Update check failed:', error);
  }
}
```

## Version Management

### Increment version for new features

```json
{
  "expo": {
    "version": "1.1.0"  // Shown to users
  }
}
```

### Increment buildNumber for each build

```json
{
  "expo": {
    "ios": {
      "buildNumber": "2"  // Must increase for each upload
    }
  }
}
```

### Automate with EAS

```json
{
  "build": {
    "production": {
      "ios": {
        "autoIncrement": "buildNumber"
      }
    }
  }
}
```

## Local Builds

Build on your machine instead of EAS servers:

```bash
# Requires Xcode installed
eas build --platform ios --local
```

Useful for:
- Faster iteration during debugging
- Inspecting build output
- Offline builds

## Troubleshooting

### Build fails with signing error

```bash
# Reset credentials and let EAS regenerate
eas credentials --platform ios
# Select "Remove" then rebuild
```

### "Missing compliance" warning

Add to `app.json`:

```json
{
  "expo": {
    "ios": {
      "infoPlist": {
        "ITSAppUsesNonExemptEncryption": false
      }
    }
  }
}
```

### Build succeeds but app crashes

```bash
# Check native logs
eas build:view <build-id>

# Download and inspect build
eas build:download <build-id>
```

### TestFlight build stuck in processing

- Usually takes 10-30 minutes
- Check App Store Connect for status
- Ensure buildNumber is unique

### OTA update not applied

- Verify channel matches
- Check `Updates.checkForUpdateAsync()` is called
- Ensure not in development mode
- Updates only apply on next cold start

## Common Commands Reference

```bash
# Build
eas build --platform ios --profile production
eas build --platform ios --profile preview
eas build --platform ios --local

# Submit
eas submit --platform ios --latest
eas submit --platform ios --id <build-id>

# Updates
eas update --branch production --message "Fix"
eas update:list

# Credentials
eas credentials --platform ios
eas credentials:configure

# View builds
eas build:list
eas build:view <build-id>
eas build:cancel <build-id>

# Secrets
eas secret:create --name KEY --value "xxx"
eas secret:list
```

Related Skills

deploying-to-production

242
from aiskillstore/marketplace

Automate creating a GitHub repository and deploying a web project to Vercel. Use when the user asks to deploy a website/app to production, publish a project, or set up GitHub + Vercel deployment.

project-map-builder

242
from aiskillstore/marketplace

生成或更新用户指定文件夹的 PROJECT_MAP.md。适用于用户要求目录地图/项目地图/代码仓概览/文件夹级说明/更新已有 PROJECT_MAP.md 的场景。必须先询问要扫描的文件夹范围,禁止默认全仓库扫描;支持单目录或多目录(合并或分别生成)。

lesson-builder

242
from aiskillstore/marketplace

帮助用户通过讨论完成课程大纲和课件。当用户说"备课"、"做课件"、"准备课程"时触发。

deploy-to-vercel

242
from aiskillstore/marketplace

Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".

viral-generator-builder

242
from aiskillstore/marketplace

Expert in building shareable generator tools that go viral - name generators, quiz makers, avatar creators, personality tests, and calculator tools. Covers the psychology of sharing, viral mechanics, and building tools people can't resist sharing with friends. Use when: generator tool, quiz maker, name generator, avatar creator, viral tool.

vercel-deployment

242
from aiskillstore/marketplace

Expert knowledge for deploying to Vercel with Next.js Use when: vercel, deploy, deployment, hosting, production.

vercel-deploy-claimable

242
from aiskillstore/marketplace

Deploy applications and websites to Vercel. Use this skill when the user requests deployment actions such as 'Deploy my app', 'Deploy this to production', 'Create a preview deployment', 'Deploy and give me the link', or 'Push this live'. No authentication required - returns preview URL and claimable deployment link.

telegram-bot-builder

242
from aiskillstore/marketplace

Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot.

slack-bot-builder

242
from aiskillstore/marketplace

Build Slack apps using the Bolt framework across Python, JavaScript, and Java. Covers Block Kit for rich UIs, interactive components, slash commands, event handling, OAuth installation flows, and Workflow Builder integration. Focus on best practices for production-ready Slack apps. Use when: slack bot, slack app, bolt framework, block kit, slash command.

seo-authority-builder

242
from aiskillstore/marketplace

Analyzes content for E-E-A-T signals and suggests improvements to build authority and trust. Identifies missing credibility elements. Use PROACTIVELY for YMYL topics.

security-bluebook-builder

242
from aiskillstore/marketplace

Build security Blue Books for sensitive apps

reference-builder

242
from aiskillstore/marketplace

Creates exhaustive technical references and API documentation. Generates comprehensive parameter listings, configuration guides, and searchable reference materials. Use PROACTIVELY for API docs, configuration references, or complete technical specifications.