IT

Il tuo gioco come app per Mac, iPhone e iPad

JumPHP trasforma il tuo gioco in vere app Apple, senza browser: PHP 8.5, SDL, OpenGL e OpenAL girano nell'app, come su un computer e nell'app Android nativa.

  • Mac: un'app per i Mac Apple (M1 e successivi) e Intel, macOS 11 o più recente, in .dmg;
  • iPhone e iPad: un'app .ipa, iOS 14 o più recente, con i comandi touch disegnati dal motore e l'orientamento del gioco; e la stessa per il simulatore di Xcode.

Costruire un'app Apple richiede Xcode, quindi un Mac. Non serve averne uno: GitHub la costruisce su uno dei suoi Mac (gratis per un repository pubblico), da qualsiasi computer. Serve un progetto JumPHP sul tuo computer (sul tuo computer) e un repository GitHub. Il tuo Claude può fare tutto al tuo posto: chiedigli «fai le app Mac e iPhone del mio gioco».

Un solo comando

bin/jumphp apple mon-jeu      # Mac + iPhone / iPad
bin/jumphp macos mon-jeu      # solo il Mac
bin/jumphp ios mon-jeu        # solo iPhone / iPad (e il simulatore)
  1. La prima volta, chiede l'identificativo dell'app (io.github.tu.mon-jeu: non cambia più una volta sull'App Store).
  2. Annota la versione in games/mon-jeu/apple/app.json, mette il workflow .github/workflows/apple.yml nel tuo progetto, fa il commit e, dopo il tuo sì, il push.
  3. GitHub costruisce le app su un Mac (la prima volta ~40 minuti, poi ~10: PHP e le librerie sono tenuti in cache), poi le prova: l'app Mac fa girare il gioco e ne conserva un'immagine, l'app iPhone viene installata in un iPhone simulato, avviata e fotografata.
  4. Pubblica una release del tuo repository con le app e i due screenshot, e li scarica in games/mon-jeu/dist/apple/ (gli screenshot in check/: guardali).

Le versioni successive: bin/jumphp apple mon-jeu --version 1.1 (il numero di build sale di uno ogni volta). Su un Mac con Xcode: --local costruisce tutto sul posto.

File fuori da git (i dati di un gioco originale, tenuti fuori da un repository pubblico, come i file privati del playground): il comando li trova e, dopo il tuo sì, li mette in una release bozza del tuo repository, che vedono solo coloro che possono scriverci; il Mac di GitHub li rimette nel gioco prima di costruirlo. Le app, invece, contengono questi file: la loro release è quindi una bozza anch'essa, sei tu a decidere di pubblicarla.

Senza account sviluppatore Apple (per cominciare)

Le app sono firmate «ad hoc», senza identità:

  • Mac: la prima volta, clic destro sull'app > Apri (macOS lo chiede una volta). Perfetto per te, i tuoi amici, i tuoi tester.
  • iPhone / iPad: un iPhone installa solo un'app firmata per lui. L'.ipa aspetta l'account (qui sotto). Nel frattempo: l'app del simulatore (su un Mac con Xcode), e la versione web si installa da Safari (Condividi > Aggiungi alla schermata Home).

Con un account sviluppatore Apple (poi)

Ogni sviluppatore usa il proprio account dell'Apple Developer Program (99 $ all'anno): le app sono pubblicate a suo nome, con i suoi certificati, custoditi nei secret del suo repository. Serve a:

  • aprire l'app Mac senza il clic destro: firma Developer ID e notarizzazione da parte di Apple;
  • installare l'app su un iPhone, inviarla su TestFlight poi sull'App Store.

È la prossima tappa di JumPHP. L'App Store accetta un gioco in PHP: il codice gira nell'app e arriva con essa, non viene scaricato nulla in seguito (regola 2.5.2).

I comandi touch

Su iPhone e iPad, il motore disegna i comandi sullo schermo come nel browser e su Android: la croce direzionale (o un joystick), A, B e START. Si regolano in game.yaml:

game:
  touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } }   # pad: stick = joystick, altrimenti la croce

Funziona anche un gamepad (Bluetooth, MFi). Su Mac: tastiera, mouse, gamepad, come su un computer.

Nell'app

  • PHP 8.5 compilato per Mac (Apple e Intel) e per iPhone con le estensioni di JumPHP (SDL e i suoi moduli immagine, suono e font, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2 e OpenAL Soft. Senza JIT: Apple lo vieta su iPhone.
  • Il tuo gioco, così com'è, nell'app. I salvataggi e le opzioni vanno nella cartella dell'app (Application Support) e restano da un aggiornamento all'altro.
  • Il nome, l'icona (assets/icon.png, altrimenti l'iniziale del titolo) e l'orientamento (la forma del gioco) vengono da game.yaml.
  • I giochi in 3D (gl(), opengl()) funzionano: OpenGL ES su iPhone, OpenGL su Mac (il motore adatta gli shader da sé).
  • HTTPS funziona ($engine->http(), il gioco online in wss://).

I dettagli tecnici: docs/apple.md nel tuo progetto.