怎么用 Defold 打包 iOS 游戏并上架 App Store?
Defold 的构建走云端构建服务器,本地不用装 Xcode 就能把带原生扩展的工程编译出来,这点比大多数引擎友好。但 iOS 出包这一步有个前提要先讲清楚:按官方手册的说法,iOS 的 bundle 只在 Mac 版编辑器里提供。我在 Windows 版编辑器里翻遍菜单也没找到 iOS Application 那一项,后来查文档才知道不是我的问题。
所以出包还是得在 macOS 上做(或者在 macOS 环境里用 bob.jar 跑命令行)。Bundle 对话框会让你选两样东西:代码签名身份和描述文件。这两样我在 Windows 上用开心上架(AppUploader)签好,拷到 Mac 上直接用,最后把 IPA 传上去也不用回 Mac。
哪些步骤需要 Mac
| 环节 | 我实际怎么做的 |
|---|---|
| 注册 Bundle ID、签发证书、生成描述文件 | Windows 上做完 |
| Bundle 出 IPA | 要 macOS——Mac 版编辑器或 bob.jar |
| 提交 App Store | Windows 上传 |
| 装到 iPhone 测试 | 扫码注册 UDID,再扫码装 |
顺带说明:我用的工具不是 Windows 专用的,网页版换成 macOS 或 Linux 的浏览器一样能开,桌面客户端也有 macOS 版。表里"不需要 Mac"说的是这一步摆脱了 Xcode、钥匙串访问、Transporter 的依赖。
第一步:在 game.project 里定好 Bundle Identifier
打开 game.project,iOS 分组里的 Bundle Identifier 填反向域名,比如 com.yourcompany.gamename。同一分组里还有 Bundle Name、Bundle Version、Info.plist 路径这些,按需要配。
这个值后面要和 Apple 注册的 Bundle ID、描述文件绑定的 App ID 完全一致。三处对不上会报 Invalid provisioning profile,这是 Defold 论坛里出现频率最高的问题之一。
第二步:在 Windows 上签出证书和描述文件
注册 Bundle ID:开心上架的「Bundle ID」页面点「新建 Bundle ID」,Identifier 填 game.project 里那个值。创建后改不了。要用 Game Center、内购、推送的,在「权限」页面勾上再保存。
签发证书:「证书」页面点「新建证书」,上架选发布签名证书,真机测试选开发签名证书。绑定上面的 Bundle ID,填名称邮箱,设一个 .p12 保护密码——导入 Mac 钥匙串时要输,服务器不保存,忘了只能吊销重签。
建议勾上「使用开心上架服务同步证书」。打包用的那台 Mac 直接登录下载同一张证书就行,不用拿 U 盘拷。
生成描述文件:「描述文件」页面点「新建描述文件」,上架选 App Store 类型,内测选 Ad Hoc 并勾上测试设备,关联上面的 Bundle ID 和证书,提交后下载 .mobileprovision。
私钥和 CSR 都在本机生成后封进 .p12,不用在 Mac 上走一遍申请证书的流程。
第三步:在 Mac 上导入证书,然后 Bundle
先把 .p12 导进钥匙串,双击导入也行,命令行也行:
security import dist.p12 -k ~/Library/Keychains/login.keychain-db -P "你的p12密码" -T /usr/bin/codesign
然后在 Mac 版 Defold 编辑器里:
- 菜单 Project → Bundle → iOS Application...;
- Code signing identity:选刚导入的那张证书——这个下拉框的内容是从钥匙串读的,如果是空的,说明
.p12没导进去,或者你导入的是不含私钥的.cer(从 Apple 网站直接下的那个不含私钥,开心上架下载的.p12是完整的); - Mobile provisioning file:浏览选中第二步下载的
.mobileprovision; - Architectures:真机出包勾
arm64-ios,模拟器才需要x86_64-ios; - Variant:上架选 Release;
- 保持「Sign application」勾着,点 Create Bundle。
命令行方式(同样要在 macOS 上跑)用 bob.jar 的 bundle 任务,通过 --identity 和 --mobileprovisioning 传同样这两样东西,适合接 CI。
要是碰上 Invalid provisioning profile,我一般在开心上架的「文件&提交」页面把 .mobileprovision 打开看一眼——它绑定的 App ID、关联的证书、有效期都列在那儿,对照一下就知道是哪儿不匹配了。
第四步:把 IPA 传上去
到这一步就不需要 Mac 了。我一般先看一眼签名信息再点「提交 App Store」,日志实时滚。
命令行版本,Windows/Linux 的 Runner 也能跑:
appuploader-cli upload -f Game.ipa -u dev@example.com -p abcd-efgh-ijkl-mnop
-p 是 Apple 生成的 App 专用密码(xxxx-xxxx-xxxx-xxxx),不是登录密码。用 API 密钥也行:
appuploader-cli upload -f Game.ipa --api-key <KeyID> --api-issuer <IssuerID> --private-key Auth_Key.p8
密钥方式只收 .ipa,且 App 要先在 App Store Connect 里建好。
第五步:发内测包
「设备」页面点「注册设备」,二维码发出去让人扫上报 UDID(一年 100 台,免费账号 3 台)。回描述文件那边点「重建」,把新设备包进一份 Ad Hoc 描述文件——新增设备之后必须重建再重新打包,不然那台设备装不上。
Bundle 时换成这份描述文件重新出包,然后在「文件&提交」页面生成二维码让人扫码装。
写在最后
Defold 的 iOS bundle 确实只能在 Mac 版编辑器上做,这点文档写得很明确,别在 Windows 上白找。但证书、描述文件、上传、装机这几块都能留在 Windows 上,Mac 那边只是点几下的事。
我用的是开心上架网页版,打开就能用,查描述文件详情排 Invalid provisioning profile 也挺方便。


浙公网安备 33010602011771号