把你的游戏做成 Mac、iPhone 和 iPad 应用
JumPHP 可以把你的游戏做成真正的 Apple 应用,不需要浏览器:PHP 8.5、SDL、OpenGL 和 OpenAL 都在应用内运行,就像在电脑上以及原生 Android 应用中一样。
- Mac:一个适用于 Apple 芯片(M1 及以后)和 Intel Mac 的应用,需要 macOS 11 或更高版本,格式为
.dmg; - iPhone 和 iPad:一个
.ipa应用,需要 iOS 14 或更高版本,触摸操作控件由引擎绘制,屏幕方向跟随游戏;同时还有一个用于 Xcode 模拟器的同样版本。
构建 Apple 应用需要 Xcode,也就是需要一台 Mac。但你不必拥有:GitHub 会在它的 Mac 上为你构建(公开仓库免费),你在任何电脑上都能操作。你需要电脑上的一个 JumPHP 项目(见在你的电脑上)和一个 GitHub 仓库。你的 Claude 可以替你完成一切:对它说“给我的游戏做 Mac 和 iPhone 应用”。
一条命令
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放进你的项目,提交,并在你同意之后推送。 - GitHub 在一台 Mac 上构建应用(第一次约 40 分钟,之后约 10 分钟:PHP 和各个库会被缓存),然后试运行它们:Mac 应用会运行游戏并保存一张截图,iPhone 应用会被安装到模拟的 iPhone 中、启动并拍照。
- 它会在你的仓库中发布一个 release,包含这些应用和两张截图,并把它们下载到
games/mon-jeu/dist/apple/(截图在check/中:请看一看)。
后续版本:bin/jumphp apple mon-jeu --version 1.1(每次 build 号加一)。在装有 Xcode 的 Mac 上:--local 会在本机构建一切。
不放进 git 的文件(原版游戏的数据,像 playground 的私有文件一样不放进公开仓库):该命令会找到它们,并在你同意之后,把它们放进你仓库的一个草稿 release 中,只有有写入权限的人才能看到;GitHub 的 Mac 会在构建游戏之前把它们放回游戏中。应用本身包含这些文件:因此它们的 release 也是草稿,是否公开由你决定。
没有 Apple 开发者账号(先上手)
应用采用“ad hoc”签名,没有身份:
- Mac:第一次需要右键点击应用 > 打开(macOS 会询问一次)。对你自己、朋友和测试人员来说完全够用。
- iPhone / iPad:iPhone 只会安装为它签名的应用。
.ipa要等到有账号之后(见下文)。在此之前:可以使用模拟器中的应用(在装有 Xcode 的 Mac 上),网页版则可以通过 Safari 安装(分享 > 添加到主屏幕)。
有 Apple 开发者账号(之后)
每位开发者使用自己的 Apple Developer Program 账号(每年 99 美元):应用以他的名义发布,使用他的证书,这些证书存放在他仓库的 secrets 中。它可用于:
- 不用右键就能打开 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 = 摇杆,否则为十字键
手柄(蓝牙、MFi)同样可用。在 Mac 上:键盘、鼠标、手柄,和电脑上一样。
应用内部
- 为 Mac(Apple 芯片和 Intel)和 iPhone 编译的 PHP 8.5,带有 JumPHP 的扩展(SDL 及其图像、声音、字体模块,OpenGL、OpenAL、gd、openssl、mbstring……),以及 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。