NL

Je game als app voor Mac, iPhone en iPad

JumPHP maakt van je game echte Apple-apps, zonder browser: PHP 8.5, SDL, OpenGL en OpenAL draaien in de app, zoals op een computer en in de native Android-app.

  • Mac: een app voor Apple-Macs (M1 en later) en Intel, macOS 11 of nieuwer, als .dmg;
  • iPhone en iPad: een .ipa-app, iOS 14 of nieuwer, met de touchbesturing getekend door de engine en de oriëntatie van de game; en dezelfde voor de simulator van Xcode.

Een Apple-app maken vereist Xcode, dus een Mac. Je hoeft er geen te hebben: GitHub bouwt de app op een van zijn Macs (gratis voor een openbare repository), vanaf elke computer. Je hebt een JumPHP-project op je computer nodig (op je computer) en een GitHub-repository. Je Claude kan alles voor je doen: vraag hem “maak de Mac- en iPhone-apps van mijn game”.

Eén commando

bin/jumphp apple mon-jeu      # Mac + iPhone / iPad
bin/jumphp macos mon-jeu      # alleen de Mac
bin/jumphp ios mon-jeu        # alleen de iPhone / iPad (en de simulator)
  1. De eerste keer vraagt het de identifier van de app (io.github.jij.mon-jeu: die verandert niet meer zodra hij in de App Store staat).
  2. Het noteert de versie in games/mon-jeu/apple/app.json, zet de workflow .github/workflows/apple.yml in je project, commit ze en pusht, na jouw ja.
  3. GitHub bouwt de apps op een Mac (de eerste keer ~40 minuten, daarna ~10: PHP en de bibliotheken worden in de cache bewaard) en probeert ze uit: de Mac-app laat de game draaien en bewaart er een beeld van, de iPhone-app wordt geïnstalleerd in een gesimuleerde iPhone, gestart en gefotografeerd.
  4. Het publiceert een release van je repository met de apps en de twee screenshots, en downloadt ze naar games/mon-jeu/dist/apple/ (de screenshots in check/: bekijk ze).

De volgende versies: bin/jumphp apple mon-jeu --version 1.1 (het buildnummer gaat elke keer met één omhoog). Op een Mac met Xcode: --local bouwt alles ter plekke.

Bestanden buiten git (de data van een originele game, buiten een openbare repository gehouden, zoals de privébestanden van de playground): het commando vindt ze en zet ze, na jouw ja, in een concept-release van je repository, die alleen zichtbaar is voor wie erin kan schrijven; de Mac van GitHub zet ze terug in de game voordat hij hem bouwt. De apps bevatten die bestanden wel: hun release is dan ook een concept, jij beslist of je hem publiceert.

Zonder Apple-ontwikkelaarsaccount (om te beginnen)

De apps zijn “ad hoc” ondertekend, zonder identiteit:

  • Mac: de eerste keer klik met rechts op de app > Open (macOS vraagt het één keer). Prima voor jezelf, je vrienden, je testers.
  • iPhone / iPad: een iPhone installeert alleen een app die voor hem is ondertekend. De .ipa wacht op het account (hieronder). Ondertussen: de app van de simulator (op een Mac met Xcode), en de webversie installeer je vanuit Safari (Deel > Zet op beginscherm).

Met een Apple-ontwikkelaarsaccount (daarna)

Elke ontwikkelaar neemt zijn eigen account van het Apple Developer Program (99 $ per jaar): de apps worden onder zijn naam gepubliceerd, met zijn certificaten, bewaard in de secrets van zijn repository. Het dient om:

  • de Mac-app te openen zonder rechtsklik: Developer ID-ondertekening en notarisatie door Apple;
  • de app op een iPhone te installeren, naar TestFlight te sturen en daarna naar de App Store.

Dat is de volgende stap van JumPHP. De App Store accepteert een game in PHP: de code draait in de app en komt er mee, er wordt daarna niets gedownload (regel 2.5.2).

De touchbesturing

Op iPhone en iPad tekent de engine de besturing op het scherm zoals in de browser en op Android: het kruis (of een joystick), A, B en START. Ze worden ingesteld in game.yaml:

game:
  touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } }   # pad: stick = joystick, anders het kruis

Een gamepad (Bluetooth, MFi) werkt ook. Op Mac: toetsenbord, muis, gamepad, zoals op een computer.

In de app

  • PHP 8.5 gecompileerd voor Mac (Apple en Intel) en voor iPhone met de extensies van JumPHP (SDL en zijn beeld-, geluids- en lettertypemodules, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2 en OpenAL Soft. Zonder JIT: Apple verbiedt dat op iPhone.
  • Je game, zoals hij is, in de app. Opgeslagen games en opties gaan naar de map van de app (Application Support) en blijven van de ene update naar de andere bestaan.
  • De naam, het pictogram (assets/icon.png, anders de beginletter van de titel) en de oriëntatie (de vorm van de game) komen uit game.yaml.
  • 3D-games (gl(), opengl()) werken: OpenGL ES op iPhone, OpenGL op Mac (de engine past de shaders zelf aan).
  • HTTPS werkt ($engine->http(), de game online via wss://).

De technische details: docs/apple.md in je project.