DE

Dein Spiel als App für Mac, iPhone und iPad

JumPHP macht aus deinem Spiel echte Apple-Apps, ganz ohne Browser: PHP 8.5, SDL, OpenGL und OpenAL laufen in der App, wie auf einem Computer und in der nativen Android-App.

  • Mac: eine App für Macs mit Apple Silicon (M1 und neuer) und Intel, ab macOS 11, als .dmg;
  • iPhone und iPad: eine .ipa-App, ab iOS 14, mit der von der Engine gezeichneten Touch-Steuerung und der Ausrichtung des Spiels; dazu dieselbe App für den Simulator von Xcode.

Eine Apple-App zu bauen erfordert Xcode, also einen Mac. Du brauchst aber keinen: GitHub baut sie auf einem seiner Macs (kostenlos für ein öffentliches Repository), von jedem beliebigen Computer aus. Du brauchst ein JumPHP-Projekt auf deinem Computer (auf deinem Computer) und ein GitHub-Repository. Dein Claude kann alles für dich erledigen: Sag ihm einfach „mach die Mac- und iPhone-Apps aus meinem Spiel“.

Ein Befehl

bin/jumphp apple mon-jeu      # Mac + iPhone / iPad
bin/jumphp macos mon-jeu      # nur der Mac
bin/jumphp ios mon-jeu        # nur iPhone / iPad (und der Simulator)
  1. Beim ersten Mal fragt er nach der Kennung der App (io.github.du.mon-jeu: Sie ändert sich nicht mehr, sobald die App im App Store ist).
  2. Er trägt die Version in games/mon-jeu/apple/app.json ein, legt den Workflow .github/workflows/apple.yml in deinem Projekt ab, committet beides und pusht nach deinem Ja.
  3. GitHub baut die Apps auf einem Mac (beim ersten Mal ~40 Minuten, danach ~10: PHP und die Bibliotheken werden zwischengespeichert) und probiert sie dann aus: Die Mac-App lässt das Spiel laufen und behält davon ein Bild, die iPhone-App wird in ein simuliertes iPhone installiert, gestartet und fotografiert.
  4. Er veröffentlicht ein Release deines Repositorys mit den Apps und den beiden Screenshots und lädt sie nach games/mon-jeu/dist/apple/ herunter (die Screenshots in check/: Sieh sie dir an).

Die Folgeversionen: bin/jumphp apple mon-jeu --version 1.1 (die Build-Nummer steigt jedes Mal um eins). Auf einem Mac mit Xcode: --local baut alles vor Ort.

Dateien außerhalb von Git (die Daten eines Originalspiels, die aus einem öffentlichen Repository herausgehalten werden, wie die privaten Dateien des Playgrounds): Der Befehl findet sie und legt sie nach deinem Ja in ein Entwurfs-Release deines Repositorys, das nur sieht, wer dort schreiben darf; der Mac von GitHub legt sie vor dem Bauen wieder im Spiel ab. Die Apps enthalten diese Dateien dann: Ihr Release ist daher ebenfalls ein Entwurf, und du entscheidest, ob du es veröffentlichst.

Ohne Apple-Entwicklerkonto (für den Anfang)

Die Apps sind „ad hoc“ signiert, ohne Identität:

  • Mac: Beim ersten Mal Rechtsklick auf die App > Öffnen (macOS fragt einmal nach). Perfekt für dich, deine Freunde, deine Tester.
  • iPhone / iPad: Ein iPhone installiert nur eine App, die für es signiert ist. Die .ipa wartet auf das Konto (siehe unten). Bis dahin: die App für den Simulator (auf einem Mac mit Xcode), und die Web-Version lässt sich über Safari installieren (Teilen > Zum Home-Bildschirm).

Mit einem Apple-Entwicklerkonto (später)

Jeder Entwickler nutzt sein eigenes Konto im Apple Developer Program (99 $ pro Jahr): Die Apps werden unter seinem Namen veröffentlicht, mit seinen Zertifikaten, die in den Secrets seines Repositorys liegen. Es dient dazu:

  • die Mac-App ohne Rechtsklick zu öffnen: Developer-ID-Signatur und Notarisierung durch Apple;
  • die App auf einem iPhone zu installieren, sie an TestFlight und dann an den App Store zu senden.

Das ist der nächste Schritt für JumPHP. Der App Store akzeptiert ein Spiel in PHP: Der Code läuft in der App und wird mit ihr ausgeliefert, danach wird nichts nachgeladen (Regel 2.5.2).

Die Touch-Steuerung

Auf iPhone und iPad zeichnet die Engine die Bildschirmsteuerung wie im Browser und auf Android: das Steuerkreuz (oder einen Joystick), A, B und START. Sie wird in game.yaml eingestellt:

game:
  touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } }   # pad: stick = Joystick, sonst das Steuerkreuz

Ein Gamepad (Bluetooth, MFi) funktioniert ebenfalls. Auf dem Mac: Tastatur, Maus, Gamepad, wie auf einem Computer.

In der App

  • PHP 8.5, kompiliert für Mac (Apple und Intel) und für das iPhone mit den Erweiterungen von JumPHP (SDL und seine Module für Bild, Sound und Schrift, OpenGL, OpenAL, gd, openssl, mbstring …), SDL2 und OpenAL Soft. Ohne JIT: Apple verbietet ihn auf dem iPhone.
  • Dein Spiel, unverändert, in der App. Spielstände und Optionen landen im Ordner der App (Application Support) und bleiben von einem Update zum nächsten erhalten.
  • Der Name, das Symbol (assets/icon.png, sonst der Anfangsbuchstabe des Titels) und die Ausrichtung (das Format des Spiels) stammen aus game.yaml.
  • 3D-Spiele (gl(), opengl()) funktionieren: OpenGL ES auf dem iPhone, OpenGL auf dem Mac (die Engine passt die Shader selbst an).
  • HTTPS funktioniert ($engine->http(), das Online-Spiel über wss://).

Die technischen Details: docs/apple.md in deinem Projekt.