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):
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
}
Los errores del Mac (para probar en el simulador)
-
Node incompatible (
expected >= 20.19.4):nvm install 20.19.4 && nvm use 20.19.4. -
"Can't determine id of Simulator app":
xcode-selectapuntaba a un Xcode sinSimulator.app. -
IPHONEOS_DEPLOYMENT_TARGET is set to 12.0: un config plugin que sube todos los pods a iOS 15.1 en elpost_install(sobrevive aprebuild).
Compilar y subir
npm install -g eas-cli
eas login
eas build -p ios --profile production
eas submit -p ios --latest
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 **
La causa:
-
ios/.xcode.enves un script de bash que Xcode ejecuta al compilar. - En Windows, git tiene
core.autocrlf=true: el repo guarda LF, pero al hacer checkout los convierte a CRLF. -
eas buildsube los archivos tal como están en tu disco, no como están en git. - Bash no entiende el
\ry la build falla.
Cómo detectarlo:
git ls-files --eol | grep "w/crlf"
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
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
¿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)