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)
- La prima volta, chiede l'identificativo dell'app (
io.github.tu.mon-jeu: non cambia più una volta sull'App Store). - Annota la versione in
games/mon-jeu/apple/app.json, mette il workflow.github/workflows/apple.ymlnel tuo progetto, fa il commit e, dopo il tuo sì, il push. - 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.
- Pubblica una release del tuo repository con le app e i due screenshot, e li scarica in
games/mon-jeu/dist/apple/(gli screenshot incheck/: 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'
.ipaaspetta 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 dagame.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 inwss://).
I dettagli tecnici: docs/apple.md nel tuo progetto.