# ios-expo-go-dev > Hot reload development on iPad/iPhone from Windows using Expo Go. - Author: Mason Campbell - Repository: zekkathura/10K_Project - Version: 20260124180122 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/zekkathura/10K_Project - Web: https://mule.run/skillshub/@@zekkathura/10K_Project~ios-expo-go-dev:20260124180122 --- # iOS Expo Go Development (Windows - No Mac Required) Hot reload development on iPad/iPhone from Windows using Expo Go. **Key Rule:** Use `--go` flag and tunnel mode. Connect via Safari URL, not QR code. ## Prerequisites - **Expo Go** installed on iPad/iPhone (App Store, free) - Both devices on same network OR use tunnel mode (recommended) - No Mac required - this uses Expo Go, not native builds ## Quick Start ### Step 1: Kill Existing Processes ```bash npx kill-port 8081 ``` ### Step 2: Start Expo with Correct Flags ```bash cd c:\Users\blink\Documents\10K\10k-scorekeeper npx expo start --tunnel --clear --go ``` | Flag | Purpose | |------|---------| | `--tunnel` | Routes through Expo servers (bypasses network issues) | | `--clear` | Clears Metro cache (use after .env or config changes) | | `--go` | **Critical:** Forces Expo Go mode instead of development build | ### Step 3: Connect iPad 1. Find the URL in terminal after "Metro waiting on": ``` › Metro waiting on exp://abc123-tuesdaylabs-8081.exp.direct ``` 2. On iPad, open **Safari** (not Camera, not Expo Go directly) 3. Type in Safari address bar: ``` exp://abc123-tuesdaylabs-8081.exp.direct ``` (Use the actual URL from your terminal) 4. Safari prompts "Open in Expo Go?" → Tap Open 5. App loads with hot reload enabled ### Step 4: Develop - Edit code on Windows → saves automatically reload on iPad - Press `r` in terminal to force reload - Press `m` to toggle dev menu ## Why These Specific Steps? ### Why `--go` flag? This project has `expo-dev-client` installed, which makes Expo default to "development build" mode. Without `--go`: - Terminal shows: `› Using development build` - QR code generates `exp+10k-scorekeeper://...` URL - Expo Go can't open it (expects a custom dev client app) With `--go`: - Terminal shows: `› Using Expo Go` - QR code generates simple `exp://...` URL - Expo Go opens it correctly ### Why Tunnel Mode? Local network issues are common: - iPad on WiFi, PC on ethernet → router may isolate them - Firewall blocking port 8081 - Different subnets Tunnel routes through Expo's servers, bypassing all local network issues. ### Why Safari Instead of Camera/QR? iOS Camera app often fails with Expo QR codes: - Shows "QR code detected" then "No usable data found" - Even with tunnel mode, iOS may not recognize `exp://` scheme from Camera Typing the URL directly in Safari works reliably. ## Troubleshooting ### "No usable data found" when scanning QR **Cause:** iOS Camera doesn't recognize the URL scheme. **Solution:** Type the URL manually in Safari with `exp://` prefix. ### "Parse manifest JSON: data isn't in correct format" **Cause:** Version mismatch or stale cache. **Solution:** ```bash npx kill-port 8081 npx expo start --tunnel --clear --go ``` ### Still Shows "Using development build" **Cause:** `--go` flag not included. **Solution:** Make sure command includes `--go`: ```bash npx expo start --tunnel --clear --go ``` ### Port Already in Use **Solution:** ```bash npx kill-port 8081 8082 8083 ``` ### iPad Can't Connect (Timeout) **Cause:** Network isolation or firewall. **Solution:** Use `--tunnel` flag (routes through Expo servers). ### Wrong URL Format | Mode | URL Format | Opens In | |------|------------|----------| | Expo Go (correct) | `exp://xxx.exp.direct` | Expo Go app | | Dev Build (wrong) | `exp+10k-scorekeeper://...` | Custom dev client | If you see `exp+10k-scorekeeper://`, press `s` in terminal or restart with `--go`. ## Comparison: iOS vs Android | Aspect | Android | iOS (iPad/iPhone) | |--------|---------|-------------------| | App | Expo Go (Play Store) | Expo Go (App Store) | | QR Code | Works via Camera | Often fails | | Connect Method | Scan QR or enter URL | **Safari URL only** (recommended) | | Command | `npx expo start --tunnel --go` | Same | | Hot Reload | Yes | Yes | | Network | LAN or tunnel | **Tunnel recommended** | ## Full Command Reference ```bash # Standard iOS development (recommended) npx expo start --tunnel --clear --go # If tunnel not needed (same WiFi, no isolation) npx expo start --clear --go # Kill ports before starting npx kill-port 8081 && npx expo start --tunnel --clear --go ``` ## Limitations of Expo Go Expo Go is convenient but has limits: - Cannot test custom native modules not in Expo SDK - Cannot test push notifications (need development build) - Some native features unavailable If you hit these limits, you need a **development build** (custom dev client) which requires: - One-time EAS build: `npx eas-cli build --profile development --platform ios` - Install via TestFlight - Then hot reload works with that custom client ## Expected Console Output Normal startup shows: ``` iOS Bundled 6973ms index.js (876 modules) WARN The global process.env.EXPO_OS is not defined... WARN 🚨 React Native's New Architecture is always enabled in Expo Go... ``` These warnings are normal and don't affect development.