Cómo crear una app para iOS sin una Mac
Crea y publica una app iOS sin Mac con Expo EAS, un Mac alquilado en la nube o CI. Compara costos, opciones de firma y pruebas en iPhone.
Puedes escribir, compilar, firmar y publicar una app para iOS sin tener una Mac, pero todas las rutas que funcionan toman prestado macOS de otra parte: los servidores de compilación de Expo, una Mac alquilada o un runner de CI.
Si trabajas en Windows o Linux, probablemente tienes una app de React Native o Capacitor que funciona, un iPhone sobre tu escritorio y una guía de primeros pasos que te pide abrir Xcode. Xcode no se instala en tu equipo.
Este artículo recorre las rutas legítimas para sortear ese problema, lo que cuesta cada una y cómo probar tu app una vez compilada. Compilar en la nube es la parte fácil. Probar sin una Mac es más difícil.
Puntos clave
- Xcode,
codesigny el simulador de iOS solo se ejecutan en macOS, así que todas las rutas sin Mac ejecutan la compilación en la Mac de otra persona. - En proyectos de Expo y React Native,
eas build --platform ioscompila y firma la app en los servidores de Expo, yeas submit --platform iosla sube a App Store Connect desde Windows o Linux. - El Apple Developer Program cuesta 99 USD al año sea cual sea la ruta que elijas, porque tanto la firma para la App Store como la distribución por TestFlight requieren la membresía.
- El simulador de iOS es una aplicación de macOS, así que sin una Mac propia las pruebas se hacen en un iPhone físico, mediante una compilación interna de EAS o TestFlight.
- Instalar macOS en hardware que no es de Apple, ya sea como hackintosh o en una máquina virtual, infringe los términos de licencia de Apple.
¿Por qué la cadena de herramientas de compilación de Apple necesita macOS?
Xcode, xcodebuild, la herramienta codesign y el simulador de iOS solo se ejecutan en macOS. Esto significa que la verdadera pregunta es qué Mac hace el trabajo, porque no puedes evitar usar una. Compilar código nativo de iOS, firmar el binario con tu certificado de distribución y empaquetarlo para App Store Connect son procesos que ocurren dentro de la cadena de herramientas de Apple. Cada una de las rutas siguientes sortea esta limitación. Ninguna la elimina.
Crear una app para iOS sin una Mac con Expo EAS
En un proyecto de React Native o Expo, eas build --platform ios compila y firma la app en los servidores de Expo. Una vez que inicias sesión con tu cuenta del Apple Developer Program, EAS CLI también puede generar por ti el certificado de distribución y el perfil de aprovisionamiento. Para la mayoría de los lectores de este artículo, esta es la ruta recomendada.
Si eres nuevo en Expo, empieza por Getting Started with Expo. La secuencia completa de la guía de configuración de compilaciones de Expo es la siguiente:
# Create a project if you don't have one
npx create-expo-app@latest my-app
cd my-app
# Install the EAS CLI and sign in to your Expo account
npm install --global eas-cli
eas login
eas whoami # confirms which account you're signed in as
# Generate the build configuration for the project
eas build:configure
# Build a signed iOS binary on Expo's servers
eas build --platform ios --message "First App Store build"
# Check build status and logs later
eas build:list
Si prefieres evitar la instalación global, ejecuta npx eas-cli@latest allí donde la documentación indique eas. Cuando comienza la compilación, la CLI te pregunta si debe gestionar tus credenciales de iOS. Si respondes que sí e inicias sesión en tu cuenta de Apple, nunca tendrás que abrir Acceso a Llaveros ni un portal de certificados.
EAS Build funciona de forma inmediata con apps de Expo y React Native, incluidas las que creaste con react-native o ignite-cli. Expo afirma que también funciona con otros proyectos nativos. Capacitor no cuenta con una guía oficial de EAS, por lo que los equipos que usan Capacitor suelen recurrir a alguna de las rutas siguientes.
Para publicar solo hace falta un comando más:
eas submit --platform ios
EAS Submit se ejecuta en Windows, Linux o macOS. Envía tu compilación a App Store Connect y, cuando Apple termina de procesar la subida, la encontrarás en TestFlight. Para este paso necesitas una cuenta de pago de Apple Developer. Puedes autenticarte con una clave de API de App Store Connect o con tu Apple ID más una contraseña específica para la app.
Alquilar una Mac en la nube cuando necesitas Xcode
Una Mac alquilada en la nube te ofrece un escritorio completo de macOS mediante una conexión remota. Úsala cuando necesites el propio Xcode: para trabajar con módulos nativos, depurar a nivel de Xcode o en un proyecto de Capacitor sin una ruta de compilación gestionada. Proveedores como MacStadium y MacinCloud alquilan este tipo de máquinas. Ganas control, pero también asumes las tareas de administración: instalas y actualizas Xcode, gestionas certificados y perfiles, y escribes tus propios scripts de compilación.
Usar CI con runners de macOS
La CI alojada con runners de macOS es adecuada para equipos que ya automatizan sus compilaciones con scripts. GitHub Actions ofrece runners alojados de macOS junto a los de Linux y Windows, y otros proveedores de CI ofrecen máquinas macOS similares. El runner se encarga de la compilación, pero la firma sigue siendo responsabilidad tuya: almacenas los certificados y perfiles como secretos y los integras tú mismo en el pipeline. Si usas Expo, también puedes lanzar compilaciones de EAS desde la CI y conservar la firma gestionada por Expo.
Rutas que debes evitar: hackintosh y máquinas virtuales con macOS
Ejecutar macOS en hardware que no es de Apple, ya sea como hackintosh o en una máquina virtual dentro de un PC con Windows o Linux, infringe los términos de licencia de Apple. La licencia de software de macOS Tahoe prohíbe instalar o ejecutar macOS en cualquier computadora que no sea de la marca Apple, y solo permite máquinas virtuales con macOS en una Mac que ya ejecute macOS. Descarta ambas rutas.
¿Cómo se prueba una app para iOS sin una Mac?
Sin una Mac propia, pruebas una app para iOS en un iPhone físico, ya sea mediante una compilación de desarrollo o interna de EAS o mediante TestFlight, porque el simulador de iOS es una aplicación de macOS. La compilación puede resolverse por completo en la nube. Las pruebas son donde realmente se nota no tener una Mac.
Para el trabajo diario, añade el cliente de desarrollo y compila para distribución interna:
npx expo install expo-dev-client
Con la distribución interna, EAS utiliza aprovisionamiento ad hoc. El perfil incluye los UDID (identificadores únicos de dispositivo) de los dispositivos aprobados, y un dispositivo solo puede instalar la compilación si figuraba en esa lista cuando se generó. Registras tu iPhone con este comando:
eas device:create
Después de registrar un dispositivo, genera una nueva compilación. Las compilaciones creadas antes del registro no se instalarán en él. Estas compilaciones para dispositivos se firman con un certificado de distribución y un perfil ad hoc, y ambos requieren una cuenta de pago del Apple Developer Program.
Para pruebas más amplias, TestFlight admite hasta 10 000 testers externos por app. Los invitas por correo electrónico o compartiendo un enlace público, y la compilación debe superar antes la revisión de TestFlight App Review.
Queda una carencia sin resolver: tanto la depuración nativa con Xcode como el simulador de iOS siguen necesitando macOS. Cuando llegues a ese punto, alquila una Mac en la nube para esa sesión.
¿Cuánto cuesta y qué ruta conviene elegir?
El Apple Developer Program cuesta 99 USD al año, y en muchas regiones Apple lo factura en tu moneda local. Esa cuota se aplica a todas las rutas sin Mac, porque la firma para la App Store y la distribución por TestFlight requieren la membresía sin importar dónde se ejecute la compilación.
| Ruta | Quién ejecuta macOS | Qué gestionas tú | Coste adicional |
|---|---|---|---|
| Expo EAS | Expo | Configuración de la app | Plan gratuito disponible; consulta los precios de EAS |
| Mac en la nube | Proveedor de alquiler | Xcode, certificados, scripts | Consulta al proveedor |
| Runner de CI con macOS | Proveedor de CI | Pipeline, secretos de firma | Consulta al proveedor |
El plan gratuito de EAS te ofrece una pequeña cuota mensual de compilaciones de iOS en una cola más lenta. Los planes de pago te pasan a la cola rápida, permiten compilaciones más largas y te dejan pagar para ejecutar más compilaciones en paralelo.
Para el caso habitual de una app de React Native o Expo desarrollada en Windows o Linux, usa Expo junto con un iPhone físico. Paga la membresía de 99 USD, compila y firma con EAS, prueba con compilaciones internas y TestFlight, y alquila una Mac solo cuando necesites el propio Xcode.
No tener una Mac significa que alquilas la cadena de herramientas de Apple en lugar de comprar el hardware. Compilar y publicar funciona perfectamente en remoto. Lo que pierdes es el simulador y la depuración nativa. Tu siguiente paso: inscríbete en el Apple Developer Program, ejecuta eas build:configure en tu proyecto y registra tu iPhone con eas device:create antes de tu primera compilación interna.
Preguntas frecuentes
¿Puedo ejecutar mi app en un iPhone sin una Mac ni una cuenta de pago de Apple?
Sí, para prototipar, mediante Expo Go. Instala Expo Go desde la App Store, inicia tu proyecto de Expo en Windows o Linux y escanea el código QR con la cámara del iPhone. La versión del SDK de Expo de tu proyecto debe coincidir con la versión de Expo Go disponible en la App Store. Expo Go incluye un conjunto fijo de bibliotecas nativas, por lo que las bibliotecas con otro código nativo fallan dentro de él. Las notificaciones push remotas, los universal links y el nombre e icono propios de tu app requieren una compilación de desarrollo, y para instalarla en un iPhone sin una Mac necesitas el programa de pago.
¿Cuántos iPhone pueden instalar una compilación interna de EAS?
Hasta 100 iPhone por año de membresía. Las compilaciones ad hoc solo se instalan en dispositivos registrados en tu cuenta de Apple Developer, y Apple contabiliza cada familia de productos por separado, de modo que se permiten 100 iPhone y también 100 iPad. Desactivar un dispositivo no libera su plaza: solo puedes eliminar dispositivos y restablecer el recuento a 100 al comienzo de un nuevo año de membresía. Para grupos más grandes, usa TestFlight, que no requiere registrar dispositivos.
¿Necesito una nueva compilación de iOS por cada cambio de código?
No. EAS Update envía por OTA (over the air) los cambios de JavaScript, estilos e imágenes a las compilaciones que incluyen la biblioteca expo-updates, y los usuarios reciben la nueva versión la próxima vez que abren la app. Los cambios nativos, como añadir una biblioteca que incluye código Swift u Objective-C, siguen requiriendo una nueva compilación de EAS y, en el caso de apps publicadas en la tienda, un nuevo envío a la App Store. La compilación que añade expo-updates por primera vez también debe ser una compilación nueva.
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.
Star on GitHub12k