ゲームを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(とシミュレーター)だけ
- 初回は、アプリの識別子(
io.github.vous.mon-jeu:App Storeに出したあとは変えられません)を尋ねます。 - バージョンを
games/mon-jeu/apple/app.jsonに書き込み、プロジェクトに.github/workflows/apple.ymlワークフローを置いて、コミットし、あなたの同意を得たうえでpushします。 - GitHubがMac上でアプリをビルドします(初回は約40分、2回目以降は約10分:PHPとライブラリがキャッシュされます)。そのあと動作を確認します:Macアプリはゲームを動かして画像を保存し、iPhoneアプリはシミュレーターのiPhoneにインストールされ、起動して撮影されます。
- アプリと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。