JA

ゲームをMac、iPhone、iPadのアプリにする

JumPHPは、ゲームを、ブラウザを使わない本物のAppleアプリにします:PHP 8.5、SDL、OpenGL、OpenALが、パソコンやネイティブAndroidアプリと同じように、アプリの中で動きます。

  • Mac:Apple製のMac(M1以降)とIntel Mac向けのアプリで、macOS 11以降が対象です。形式は.dmgです。
  • iPhoneとiPad:.ipaアプリで、iOS 14以降が対象です。タッチ操作はエンジンが描画し、ゲームの向きに合わせます。Xcodeのシミュレーター用にも同じものが作られます。

Appleのアプリを作るにはXcode、つまりMacが必要です。でも、Macを持っている必要はありません。GitHubが、自社のMacの1台でビルドします(公開リポジトリなら無料)。どのコンピューターからでも使えます。必要なのは、お使いのコンピューター上のJumPHPプロジェクト(お使いのコンピューターで)とGitHubリポジトリです。Claudeにすべて任せることもできます:「ゲームのMacアプリとiPhoneアプリを作って」と頼んでください。

コマンド1つで

bin/jumphp apple mon-jeu      # Mac + iPhone / iPad
bin/jumphp macos mon-jeu      # Macだけ
bin/jumphp ios mon-jeu        # iPhone / iPad(とシミュレーター)だけ
  1. 初回は、アプリの識別子(io.github.vous.mon-jeu:App Storeに出したあとは変えられません)を尋ねます。
  2. バージョンをgames/mon-jeu/apple/app.jsonに書き込み、プロジェクトに.github/workflows/apple.ymlワークフローを置いて、コミットし、あなたの同意を得たうえでpushします。
  3. GitHubがMac上でアプリをビルドします(初回は約40分、2回目以降は約10分:PHPとライブラリがキャッシュされます)。そのあと動作を確認します:Macアプリはゲームを動かして画像を保存し、iPhoneアプリはシミュレーターのiPhoneにインストールされ、起動して撮影されます。
  4. アプリと2枚のスクリーンショットを含むリポジトリのリリースを公開し、games/mon-jeu/dist/apple/にダウンロードします(スクリーンショットはcheck/にあります:ぜひ見てください)。

次のバージョンは:bin/jumphp apple mon-jeu --version 1.1(ビルド番号は毎回1つ上がります)。XcodeのあるMacでは、--localですべてをその場でビルドします。

gitの外にあるファイル(元のゲームのデータで、playgroundの非公開ファイルのように、公開リポジトリには置かないもの):コマンドはそれらを見つけ、あなたの同意を得たうえで、リポジトリの下書きリリースに入れます。書き込み権限のある人にしか見えません。GitHubのMacは、ビルドの前にそれらをゲームに戻します。アプリにはこれらのファイルが含まれるため、そのアプリのリリースも下書きになります。公開するかどうかは、あなたが決めます。

Appleのデベロッパーアカウントなしで(まずはこちらから)

アプリは、ID なしの「アドホック」署名になります。

  • Mac:初回は、アプリを右クリック > 開く(macOSが一度だけ確認します)。ご自身、友人、テスターに使ってもらうには十分です。
  • iPhone / iPad:iPhoneは、そのiPhone向けに署名されたアプリしかインストールできません。.ipaは、アカウント(下記)ができるまで待ちます。それまでは、シミュレーターのアプリ(XcodeのあるMacで)と、Safariからインストールできるウェブ版(共有 > ホーム画面に追加)をご利用ください。

Appleのデベロッパーアカウントありで(その次に)

開発者は、それぞれ自分のApple Developer Programアカウント(年額99ドル)を使います。アプリは本人の名義で公開され、証明書は本人のリポジトリのシークレットに保管されます。このアカウントで、次のことができます。

  • 右クリックなしでMacアプリを開く:Developer ID署名と、Appleによる公証。
  • iPhoneにアプリをインストールし、TestFlight、続いてApp Storeに送る。

これは、JumPHPの次のステップです。App Storeは、PHPのゲームを受け付けます。コードはアプリの中で動き、アプリと一緒に配布され、あとから何もダウンロードされないからです(ガイドライン2.5.2)。

タッチ操作

iPhoneとiPadでは、エンジンが、ブラウザやAndroidと同じように、画面上の操作ボタンを描画します:十字キー(またはジョイスティック)、A、B、START。設定はgame.yamlで行います。

game:
  touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } }   # pad: stick = ジョイスティック、指定しなければ十字キー

ゲームパッド(Bluetooth、MFi)も使えます。Macでは、パソコンと同じように、キーボード、マウス、ゲームパッドで操作します。

アプリの中身

  • JumPHPの拡張機能(SDLと、その画像・サウンド・フォントのモジュール、OpenGL、OpenAL、gd、openssl、mbstringなど)つきで、Mac(AppleとIntel)とiPhone向けにコンパイルされたPHP 8.5、SDL2、OpenAL Soft。JITはありません:AppleがiPhoneで禁止しているためです。
  • ゲームは、そのままアプリの中に入ります。セーブデータとオプションは、アプリのフォルダ(Application Support)に保存され、更新をまたいで残ります。
  • 名前、アイコン(assets/icon.png。なければタイトルの頭文字)、向き(ゲームの画面の形に合わせたもの)は、game.yamlから取られます。
  • 3Dゲーム(gl()、opengl())も動きます:iPhoneではOpenGL ES、MacではOpenGL(エンジンがシェーダーを自動的に変換します)。
  • HTTPSが使えます($engine->http()、wss://によるオンラインプレイ)。

技術的な詳細:お使いのプロジェクトのdocs/apple.md。