Tu juego como app de Mac, iPhone e iPad
JumPHP convierte tu juego en verdaderas apps de Apple, sin navegador: PHP 8.5, SDL, OpenGL y OpenAL funcionan dentro de la app, como en un ordenador y en la app de Android nativa.
- Mac: una app para los Mac de Apple (M1 y posteriores) e Intel, macOS 11 o posterior, en
.dmg; - iPhone e iPad: una app
.ipa, iOS 14 o posterior, con los controles táctiles dibujados por el motor y la orientación del juego; y la misma para el simulador de Xcode.
Fabricar una app de Apple requiere Xcode, y por tanto un Mac. No hace falta tener uno: GitHub la fabrica en uno de sus Mac (gratis para un repositorio público), desde cualquier ordenador. Necesitas un proyecto JumPHP en tu ordenador (en tu ordenador) y un repositorio de GitHub. Tu Claude puede hacerlo todo por ti: pídele «haz las apps de Mac y iPhone de mi juego».
Un comando
bin/jumphp apple mon-jeu # Mac + iPhone / iPad
bin/jumphp macos mon-jeu # solo el Mac
bin/jumphp ios mon-jeu # solo el iPhone / iPad (y el simulador)
- La primera vez, pregunta el identificador de la app (
io.github.tu.mi-juego: no cambia una vez en el App Store). - Anota la versión en
games/mon-jeu/apple/app.json, pone el workflow.github/workflows/apple.ymlen tu proyecto, hace el commit y, tras tu sí, hace push. - GitHub fabrica las apps en un Mac (la primera vez ~40 minutos, después ~10: PHP y las bibliotecas se guardan en caché) y después las prueba: la app de Mac ejecuta el juego y guarda una imagen, la app de iPhone se instala en un iPhone simulado, se inicia y se fotografía.
- Publica una release de tu repositorio con las apps y las dos capturas, y las descarga en
games/mon-jeu/dist/apple/(las capturas encheck/: míralas).
Las versiones siguientes: bin/jumphp apple mon-jeu --version 1.1 (el número de build sube uno cada
vez). En un Mac con Xcode: --local lo fabrica todo en el propio equipo.
Archivos fuera de git (los datos de un juego original, guardados fuera de un repositorio público, como los archivos privados del playground): el comando los encuentra y, tras tu sí, los pone en una release borrador de tu repositorio, que solo ven quienes pueden escribir en él; el Mac de GitHub los devuelve al juego antes de fabricarlo. Las apps, por su parte, contienen esos archivos: su release también es un borrador y eres tú quien decide publicarla.
Sin cuenta de desarrollador de Apple (para empezar)
Las apps se firman «ad hoc», sin identidad:
- Mac: la primera vez, clic derecho en la app > Abrir (macOS pregunta una vez). Perfecto para ti, tus amistades y tus testers.
- iPhone / iPad: un iPhone solo instala una app firmada para él. El
.ipaespera a la cuenta (más abajo). Mientras tanto: la app del simulador (en un Mac con Xcode), y la versión web se instala desde Safari (Compartir > Añadir a pantalla de inicio).
Con una cuenta de desarrollador de Apple (después)
Cada desarrollador usa su propia cuenta del Apple Developer Program (99 $ al año): las apps se publican a su nombre, con sus certificados, guardados en los secretos de su repositorio. Sirve para:
- abrir la app de Mac sin el clic derecho: firma Developer ID y notarización de Apple;
- instalar la app en un iPhone, enviarla a TestFlight y después al App Store.
Es el siguiente paso de JumPHP. El App Store acepta un juego en PHP: el código se ejecuta en la app y viene con ella, no se descarga nada después (regla 2.5.2).
Los controles táctiles
En iPhone e iPad, el motor dibuja los controles en pantalla como en el navegador y en Android: la
cruceta (o un joystick), A, B y START. Se configuran en game.yaml:
game:
touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } } # pad: stick = joystick, si no la cruceta
Un mando (Bluetooth, MFi) también funciona. En Mac: teclado, ratón, mando, como en un ordenador.
Dentro de la app
- PHP 8.5 compilado para Mac (Apple e Intel) y para iPhone con las extensiones de JumPHP (SDL y sus módulos de imagen, sonido y fuentes, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2 y OpenAL Soft. Sin JIT: Apple lo prohíbe en iPhone.
- Tu juego, tal cual, dentro de la app. Las partidas guardadas y las opciones van a la carpeta de la app (Application Support) y se conservan de una actualización a otra.
- El nombre, el icono (
assets/icon.png, si no la inicial del título) y la orientación (la forma del juego) vienen degame.yaml. - Los juegos en 3D (
gl(),opengl()) funcionan: OpenGL ES en iPhone, OpenGL en Mac (el motor adapta los shaders por sí mismo). - HTTPS funciona (
$engine->http(), el juego online enwss://).
Los detalles técnicos: docs/apple.md en tu proyecto.