Has creado una app de iOS con Expo o React Native. Quieres probarla en tu propio iPhone. La respuesta de Apple: cómprate un Mac, o paga 99$/año por una cuenta de desarrollador — solo para instalar tu propia app en tu propio dispositivo.
Sideloadly y AltStore resuelven la mitad del problema (la firma) gratis,
usando tu Apple ID normal. Pero siguen necesitando un .ipa ya compilado
para firmarlo, y compilar una app de iOS siempre ha significado Xcode, y
Xcode siempre ha significado un Mac.
ipa-builder elimina el Mac. Compila tu .ipa en los runners macOS
gratuitos de GitHub — sin Xcode local, sin Apple Developer Program, sin
ningún paso de firma de tu parte.
| Sin ipa-builder | Con ipa-builder |
|---|---|
| 🖥️ Tener o alquilar un Mac | ☁️ Runner macOS de GitHub Actions |
| 💳 99$/año de cuenta Apple Developer | 🆓 Apple ID gratuito (vía Sideloadly/AltStore) |
| 🛠️ Instalar y configurar Xcode | ⚡ gh workflow run y esperar ~10-15 min |
Todo el pipeline es un único job workflow_dispatch: lo lanzas, hace
checkout de tu app en otro repo, la compila sin firmar y te devuelve un
artefacto descargable.
flowchart LR
A["👤 Tú\ngh workflow run"] --> B["🔀 GitHub Actions\nworkflow_dispatch"]
B --> C["📥 Checkout del repo objetivo\n(token cross-repo)"]
C --> D["🍎 Runner macOS\nselecciona Xcode"]
D --> E["📦 npm install\nexpo prebuild\npod install"]
E --> F["🔨 xcodebuild\nCODE_SIGNING_ALLOWED=NO"]
F --> G["🗜️ Empaqueta el .ipa\n(sin firmar)"]
G --> H["⬆️ Sube el artefacto\nretención 14 días"]
H --> I["📲 Sideloadly / AltStore\nfirma con tu Apple ID gratis"]
I --> J["✅ En tu iPhone"]
style A fill:#1f2937,stroke:#4b5563,color:#fff
style B fill:#2088FF,stroke:#0969da,color:#fff
style D fill:#000000,stroke:#4b5563,color:#fff
style F fill:#147EFB,stroke:#0969da,color:#fff
style I fill:#3DA639,stroke:#2c7a2c,color:#fff
style J fill:#1f2937,stroke:#4b5563,color:#fff
Cada paso usa el toolchain real — npx expo prebuild, CocoaPods,
xcodebuild con la firma de código explícitamente desactivada — así que lo
que sale es un artefacto de build sin firmar genuino, no un truco. El job
completo está en un único fichero legible:
.github/workflows/build-ipa.yml.
- Una cuenta de GitHub con la CLI
ghinstalada y autenticada (gh auth login). - Un proyecto Expo/React Native en un repo de GitHub (tuyo o al que tengas acceso), con
app.jsonconfigurado (ios.bundleIdentifierpuesto). - Haz un fork de este repo (o cópialo) a tu propia cuenta.
El workflow necesita permiso para leer el repo que quieres compilar (aunque
sea privado) usando un token propio — el GITHUB_TOKEN por defecto solo
tiene acceso al repo donde vive el workflow.
-
Ve a github.com/settings/tokens?type=beta → Generate new token (fine-grained).
-
Ponle un nombre, p. ej.
ipa-builder-checkout. -
En Repository access → Only select repositories, marca los repos que quieras poder compilar.
-
En Permissions → Repository permissions, pon Contents: Read-only. No hace falta nada más.
-
Genera el token y cópialo (solo se muestra una vez).
-
En tu terminal, dentro de tu copia de este repo:
gh secret set CROSS_REPO_TOKEN --repo TU-USUARIO/ipa-builder
gh workflow run build-ipa.yml --repo TU-USUARIO/ipa-builder \
-f repo=TU-USUARIO/tu-app \
-f ref=main \
-f app_dir=. \
-f ipa_name=mi-app-unsigned| Input | Significado |
|---|---|
repo |
owner/nombre del repo con la app que quieres compilar |
ref |
Rama, tag o commit (por defecto main) |
app_dir |
Carpeta con package.json/app.json (. si está en la raíz) |
ipa_name |
Nombre que le quieres dar al .ipa resultante |
¿Prefieres hacerlo con clics? Ve a la pestaña Actions de tu copia de este repo → Build unsigned iOS IPA → Run workflow, y rellena los mismos campos.
Cuando termine (~10-15 min), abre esa ejecución → Artifacts → descarga el .ipa.
| No firmado por Apple | Intencional — Sideloadly/AltStore lo firman con tu Apple ID gratis al instalarlo |
| Caduca en 7 días | Las firmas gratuitas de Apple dejan de funcionar a los 7 días salvo que refresques con Sideloadly/AltServer |
| Coste del runner macOS | Cuenta 10× contra tus minutos gratuitos de GitHub Actions |
| Caducidad del artefacto | Las descargas caducan a los 14 días (límite de GitHub Actions) |
| Errores de acceso | Si Checkout target project falla con un error de permisos, el token no tiene acceso a ese repo |
Proyecto de código abierto, abierto a contribuciones — reportes de bugs, ideas o pull requests. Abre un issue o PR cuando quieras.
MIT — úsalo, modifícalo y compártelo libremente. Ver LICENSE.
Hecho por @adro0303 — developer de software/IA cansado de pagarle a Apple para probar sus propias apps. Más proyectos → github.com/adro0303