-
Guarda scripts en el repositorio: Pon bash de scripts/ci/ bajo control de versiones - laptops, GitHub Actions y hooks de EAS ejecutan los mismos puntos de entrada, no fragmentos únicos de Slack.
-
Usa npx para las CLIs de Expo y EAS: npx expo-doctor y npx eas-cli@latest evitan la desviación de versión global entre compañeros de equipo e imágenes de CI.
-
Estandariza npm ci en automatización: Instalaciones impulsadas por lockfile en CI; npm install solo en ramas de características locales cuando intencionalmente actualizas dependencias.
-
Ejecuta npx expo-doctor antes de trabajar en nativo: Detecta la asimetría de versión de SDK 57 antes de que expo run:* o eas build desperdicien veinte minutos en CocoaPods o Gradle.
-
Empareja expo start --dev-client con compilaciones de desarrollo: Los shells nativos personalizados necesitan la bandera dev-client de Metro - expo start simple se orienta a la semántica de Expo Go.
-
Limpia Metro con intención: npx expo start --clear después de actualizaciones de dependencias; no la aliases a cada guardado - oculta errores del bundler.
-
Reserva expo prebuild para cambios nativos: Plugins de configuración, derechos y nuevos módulos nativos - no cada commit de JS bajo CNG.
-
Refleja las compuertas de CI localmente: npm run lint && npx tsc --noEmit && npm test -- --ci antes de eas build --non-interactive - mismos comandos, misma superficie de fallo.
-
Exporta EXPO_TOKEN solo en CI: Tokens de robot en GitHub Secrets / EAS - nunca hagas commit; verifica con eas whoami en un trabajo de prueba seca.
-
Analiza eas build:list --json: Usa jq para URLs de artefactos - las tablas legibles por humanos no son legibles por máquina y se rompen cuando el formato de CLI cambia.
-
Falla cerrada con jq -er: Los campos JSON requeridos deben salir con código no cero cuando faltan - evita que curl descargue páginas de error HTML como "APKs".
-
Usa rg para la clasificación de registros: Busca en registros JSONL y EAS con globs -g - más rápido que grep -R y respeta .gitignore.
-
Resuelve UDIDs del simulador de iOS en scripts: Los nombres de dispositivos colisionan entre versiones de Xcode - xcrun simctl list devices available -j | jq es estable.
-
Inicia simuladores antes de simctl install: El alias booted no apunta a nada cuando el Simulador está apagado - simctl boot luego instala.
-
Captura pantalla con simctl io para evidencia: Artefactos PNG para PRs, líneas base de Maestro y adjuntos de App Store - reproducible sin interfaz de usuario de Xcode.
-
Establece ANDROID_HOME y JDK 17 explícitamente: Gradle de RN 0.86 espera JDK 17 - documenta rutas en bloques de README y env de CI.
-
adb reverse tcp:8081 en Android USB: Los dispositivos físicos no alcanzan localhost del portátil sin reverse - haz esto después de cada reconexión de cable.
-
Sufija adb -s SERIAL con múltiples dispositivos: El emulador más el teléfono causa errores de objetivo ambiguo - enumera con adb devices -l.
-
Filtra logcat agresivamente: '*:S' ReactNativeJS:V AndroidRuntime:E muestra errores de JS y nativos fatales sin spam del sistema.
-
Instala APKs con adb install -r: Reinstala clientes de desarrollo de EAS o assembleDebug sin Android Studio - verifica que android.package coincida.
-
Prefiere Metro LAN; túnel como respaldo: --tunnel es más lento - usa USB adb reverse o Wi-Fi compartido antes de usar túnel por defecto.
-
Encadena comandos con && en scripts: set -euo pipefail más compuertas explícitas - falla rápido como CI, no éxito parcial silencioso.
-
Almacena filtros jq junto a flujos de trabajo: scripts/jq/latest-apk.jq revisado en PRs - no one-liners en línea duplicados en tres archivos YAML.
-
Linux CI para Android; macOS para simctl de iOS: No pretendas que simctl se ejecuta en ubuntu-latest - divide trabajos por capacidad de plataforma.
-
Lee cruzadamente los documentos de plataforma cuando CLI no es suficiente: La firma, los derechos y las pistas de Play viven en EAS Build, iOS Platform, y Android Platform - CLI despeja la fricción de desarrollo, no la política de la tienda.
Versiones de stack: Esta página fue escrita para React 19.2.3, React Native 0.86.0, y Expo SDK 57 (expo ~57.0.4).