DEV Community

Felipe Zuluaga
Felipe Zuluaga

Posted on

Publicar en la App Store desde Windows con Expo y EAS (y el error de los saltos de línea)

Programo en Windows y quería llevar mi app de React Native + Expo a la App Store. ¿Se puede sin un Mac? Sí, pero con trampas. Este es el resumen del proceso y de los errores reales que me aparecieron.

Si prefieres verlo en pantalla, aquí está el video completo (con capítulos):

https://youtu.be/7aK1r9mw7Fs

Qué puedes (y qué no) hacer desde Windows

Sí: escribir el código, configurar app.config.js, compilar en la nube con EAS Build, subir con EAS Submit y probar en un iPhone real con TestFlight.

No: usar el simulador de iOS (solo existe en macOS) ni ejecutar npx expo prebuild -p ios (en Windows borra tu carpeta ios/). Alternativas: Appetize.io o un Mac en la nube. Yo usé un Mac prestado solo para el simulador.

Antes de compilar

  • Necesitas el Apple Developer Program: unos 99 USD al año.
  • En App Store Connect creas la app con nombre, idioma, bundle ID y SKU (un código interno que no se puede cambiar). El nombre que quería ya estaba ocupado, así que ten alternativas.
  • En app.config.js:
ios: {
  bundleIdentifier: "com.tuempresa.tuapp",
  buildNumber: "36",       // un entero que SIEMPRE sube
  supportsTablet: false,   // solo iPhone: sin capturas de iPad
}
Enter fullscreen mode Exit fullscreen mode

Los errores del Mac (para probar en el simulador)

  1. Node incompatible (expected >= 20.19.4): nvm install 20.19.4 && nvm use 20.19.4.
  2. "Can't determine id of Simulator app": xcode-select apuntaba a un Xcode sin Simulator.app.
  3. IPHONEOS_DEPLOYMENT_TARGET is set to 12.0: un config plugin que sube todos los pods a iOS 15.1 en el post_install (sobrevive a prebuild).

Compilar y subir

npm install -g eas-cli
eas login
eas build -p ios --profile production
eas submit -p ios --latest
Enter fullscreen mode Exit fullscreen mode

En la primera build, EAS te pide el Apple ID (con doble factor) y genera por ti los certificados y los provisioning profiles: responde Sí. Con eas submit, elige App Manager para la API Key (suficiente para publicar). Luego Apple procesa el binario, normalmente en 5–10 minutos, y la build aparece en TestFlight.

El error que no esperaba: \r: command not found

Mi build de iOS falló con un mensaje genérico:

The "Run fastlane" step failed with an unknown error.

El error real estaba en los Xcode logs:

Script '[Expo] Configure project' failed
.../ios/Pods/../.xcode.env: line 5: \r: command not found
** ARCHIVE FAILED **
Enter fullscreen mode Exit fullscreen mode

La causa:

  1. ios/.xcode.env es un script de bash que Xcode ejecuta al compilar.
  2. En Windows, git tiene core.autocrlf=true: el repo guarda LF, pero al hacer checkout los convierte a CRLF.
  3. eas build sube los archivos tal como están en tu disco, no como están en git.
  4. Bash no entiende el \r y la build falla.

Cómo detectarlo:

git ls-files --eol | grep "w/crlf"
Enter fullscreen mode Exit fullscreen mode

La solución: un .gitattributes en la raíz que fuerce LF.

* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
*.png binary
*.ttf binary
Enter fullscreen mode Exit fullscreen mode

Después borra y restaura con git checkout los archivos que estaban en CRLF, ejecuta git add --renormalize ., haz commit y lanza la build de nuevo.

Lecciones: el error útil siempre está en los Xcode logs, eas build usa tu copia local, y si compilas iOS desde Windows, pon eol=lf desde el día 1.

Antes de enviar a revisión

Completa la ficha (capturas, descripción, textos), comprueba que las páginas que enlazas funcionen, elige la compilación que ya probaste en TestFlight y configura la clasificación por edades con lo que de verdad contiene tu app: Apple lo valida y puede rechazarte si no coincide.

La primera revisión puede tardar hasta una semana. Todavía estoy esperando el resultado, y lo contaré.

Resumen de comandos

nvm install 20.19.4 && nvm use 20.19.4
npm install -g eas-cli
eas login
eas build -p ios --profile production
eas submit -p ios --latest
Enter fullscreen mode Exit fullscreen mode

¿Te topaste con algún error distinto? Cuéntamelo en los comentarios. Y si te sirvió, sígueme para ver cómo termina la revisión de Apple.

Top comments (0)