ES

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)
  1. La primera vez, pregunta el identificador de la app (io.github.tu.mi-juego: no cambia una vez en el App Store).
  2. Anota la versión en games/mon-jeu/apple/app.json, pone el workflow .github/workflows/apple.yml en tu proyecto, hace el commit y, tras tu sí, hace push.
  3. 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.
  4. Publica una release de tu repositorio con las apps y las dos capturas, y las descarga en games/mon-jeu/dist/apple/ (las capturas en check/: 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 .ipa espera 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 de game.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 en wss://).

Los detalles técnicos: docs/apple.md en tu proyecto.