{"name":"expo-dev-client","url":"https://github.com/expo/skills/tree/main/plugins/expo/skills/expo-dev-client","install":"npx skills add expo/skills --skill expo-dev-client","sdk":"expo","key":"expo/expo-dev-client","description":"Framework (OSS). Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.","hasContent":true,"content":"---\nname: expo-dev-client\ndescription: Framework (OSS). Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.\nversion: 1.1.0\nlicense: MIT\n---\n\nUse EAS Build to create development clients for testing native code changes on physical devices. Use this for creating custom Expo Go clients for testing branches of your app.\n\n> **Free locally; cloud builds are paid.** `expo-dev-client` itself is open source and building locally is free. Building or distributing via EAS Build/TestFlight uses your EAS plan's build minutes and needs a paid Apple Developer account for device/TestFlight distribution. See https://expo.dev/pricing.\n\n## Important: When Development Clients Are Needed\n\n**Development clients are the recommended setup for any real or production app.** Expo Go is a playground for learning and quick experiments with the native libraries it bundles; most apps outgrow it and move to a development client. See [Expo Go vs. development builds](https://docs.expo.dev/develop/development-builds/introduction/) for the full reasoning.\n\nYou need a dev client ONLY when using:\n\n- Local Expo modules (custom native code)\n- Apple targets (widgets, app clips, extensions)\n- Third-party native modules not in Expo Go\n- Config plugins, or testing remote push notifications and App/Universal Links\n\n## EAS Configuration\n\nEnsure `eas.json` has a development profile:\n\n```json\n{\n  \"cli\": {\n    \"version\": \">= 16.0.1\",\n    \"appVersionSource\": \"remote\"\n  },\n  \"build\": {\n    \"production\": {\n      \"autoIncrement\": true\n    },\n    \"development\": {\n      \"autoIncrement\": true,\n      \"developmentClient\": true\n    }\n  },\n  \"submit\": {\n    \"production\": {},\n    \"development\": {}\n  }\n}\n```\n\nKey settings:\n\n- `developmentClient: true` - Bundles expo-dev-client for development builds\n- `autoIncrement: true` - Automatically increments build numbers\n- `appVersionSource: \"remote\"` - Uses EAS as the source of truth for version numbers\n\n## Building for TestFlight\n\nBuild iOS dev client and submit to TestFlight in one command:\n\n```bash\neas build -p ios --profile development --submit\n```\n\nThis will:\n\n1. Build the development client in the cloud\n2. Automatically submit to App Store Connect\n3. Send you an email when the build is ready in TestFlight\n\nAfter receiving the TestFlight email:\n\n1. Download the build from TestFlight on your device\n2. Launch the app to see the expo-dev-client UI\n3. Connect to your local Metro bundler or scan a QR code\n\n## Building Locally\n\nBuild a development client on your machine:\n\n```bash\n# iOS (requires Xcode)\neas build -p ios --profile development --local\n\n# Android\neas build -p android --profile development --local\n```\n\nLocal builds output:\n\n- iOS: `.ipa` file\n- Android: `.apk` or `.aab` file\n\n## Installing Local Builds\n\nInstall iOS build on simulator:\n\n```bash\n# Find the .app in the .tar.gz output\ntar -xzf build-*.tar.gz\nxcrun simctl install booted ./path/to/App.app\n```\n\nInstall iOS build on device (requires signing):\n\n```bash\n# Use Xcode Devices window or ideviceinstaller\nideviceinstaller -i build.ipa\n```\n\nInstall Android build:\n\n```bash\nadb install build.apk\n```\n\n## Building for Specific Platform\n\n```bash\n# iOS only\neas build -p ios --profile development\n\n# Android only\neas build -p android --profile development\n\n# Both platforms\neas build --profile development\n```\n\n## Checking Build Status\n\n```bash\n# List recent builds\neas build:list\n\n# View build details\neas build:view\n```\n\n## Using the Dev Client\n\nOnce installed, the dev client provides:\n\n- **Development server connection** - Enter your Metro bundler URL or scan QR\n- **Build information** - View native build details\n- **Launcher UI** - Switch between development servers\n\nConnect to local development:\n\n```bash\n# Start Metro bundler\nnpx expo start --dev-client\n\n# Scan QR code with dev client or enter URL manually\n```\n\n## Troubleshooting\n\n**Build fails with signing errors:**\n\n```bash\neas credentials\n```\n\n**Clear build cache:**\n\n```bash\neas build -p ios --profile development --clear-cache\n```\n\n**Check EAS CLI version:**\n\n```bash\neas --version\neas update\n```\n\n## Submitting Feedback\nIf you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:\n```bash\nnpx --yes submit-expo-feedback@latest --category skills --subject \"expo-dev-client\" \"<actionable feedback>\"\n```\nOnly submit when you have something specific and actionable to report. Include as much relevant context as possible.\n","contentSource":"https://raw.githubusercontent.com/expo/skills/main/plugins/expo/skills/expo-dev-client/SKILL.md","contentFetchedAt":"2026-07-28T23:15:38.795Z"}