Cocos2d-x 是纯代码向的引擎,C++ / Lua / JS 都能写,工程结构里
proj.ios_mac/ 下就是一个现成的 Xcode 工程。所以它的 iOS 流程比带编辑器的引擎更直接:不需要"发布"或"构建原生工程"这一步,直接用 Xcode 打开那个工程就能编。
代价是
这一步必须在 macOS 上做,
cocos compile -p ios 底层调的也是 Xcode 的工具链。不过签名材料的准备和最后的上传都不用 Mac,我这边是用开心上架(AppUploader)在 Windows 上处理的。
| 环节 | 我实际怎么做的 |
|---|---|
| 注册 Bundle ID、签发证书、生成描述文件 | Windows 上做完 |
| 写代码、跑 Win32 目标调试逻辑 | Windows |
| 编译签名成 IPA | 要 macOS |
| 提交 App Store | Windows 上传 |
| 装到 iPhone 测试 | 扫码注册 UDID,再扫码装 |
说明一下:我用的签证书工具本身在 macOS 上也能用(网页版不挑系统,桌面客户端有 macOS 版)。表里"不需要 Mac"是指这一步不再需要 Xcode、钥匙串访问或 Transporter。
Cocos2d-x 的 iOS 标识就在
proj.ios_mac/ios/Info.plist 的
CFBundleIdentifier 里,或者在 Xcode 工程的 target 设置里改。定成反向域名,比如
com.yourcompany.gamename。
因为这个工程是随模板生成的,很多人一直沿用
org.cocos2dx.hellocpp 这种默认值,直到打包才发现要改。建议一开工就改掉,顺手把
CFBundleShortVersionString 和
CFBundleVersion 也理一下——build number 每次上传都得比上次大。
注册 Bundle ID:开心上架的「Bundle ID」页面点「新建 Bundle ID」,Identifier 填上一步那个值。 创建后改不了。游戏要用 Game Center、内购、推送的,在这个 Bundlfth ke ID 的「权限」页面勾上再保存。
签发证书:「证书」页面点「新建证书」,上架选发布签名证书,真机调试选开发签名证书。绑定上面的 Bundle ID,填名称邮箱,设一个
.p12 保护密码——导入 Mac 钥匙串时要输,服务器不保存它,忘了只能吊销重签。

建议勾上「使用开心上架服务同步证书」。团队里写代码的人和管发版的人常常不是同一个,云备份能省掉互相传
.p12 的麻烦,也不用担心传丢或者传给错的人。
生成描述文件:「描述文件」页面点「新建描述文件」,上架选 App Store 类型,内测选 Ad Hoc 并勾上测试设备,关联上面的 Bundle ID 和证书,提交后下载
.mobileprovision。
私钥和 CSR 都在本机生成后封进
.p12,不用在 Mac 上走一遍申请证书的流程。

1security import dist.p12 -k ~/Library/Keychains/login.keychain-db -P "你的p12密码" -T /usr/bin/codesign23mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles4cp AppStore.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/
用 Xcode 打开
proj.ios_mac/项目名.xcodeproj:
命令行方式是
cocos compile -p ios -m release,配合
xcodebuild archive 加
xcodebuild -exportArchive 出包,
ExportOptions.plist 里用手动签名指定描述文件的
名称(就是你在开心上架创建时填的那个名字,不是文件名也不是 UUID)。
有一点提醒:Cocos2d-x 的 Xcode 工程是随模板生成后由你自己维护的,升级引擎版本时经常要手动合并工程文件的改动。签名配置写在工程里的话,合并时容易被冲掉,稳妥做法是放进
xcconfig 或者统一交给命令行的
ExportOptions.plist 管。
拿到 IPA 就跟 Mac 无关了。我一般先在开心上架的「文件&提交」页面把包打开看一眼签名信息——Bundle ID、描述文件类型、证书有效期,确认了再点「提交 App Store」,日志实时滚。
命令行版本,Windows/Linux 的 Runner 也能跑:
1appuploader-cli upload -f Game.ipa -u dev@example.com -p abcd-efgh-ijkl-mnop
-p 是 Apple 生成的 App 专用密码(
xxxx-xxxx-xxxx-xxxx),不是 Apple ID 登录密码。团队用 API 密钥更合适:
1appuploader-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 描述文件。
在 Xcode 里换成这份描述文件,Archive 时导出方式选 Ad Hoc,然后在「文件&提交」页面生成二维码让人扫码装。
Cocos2d-x 因为工程结构直白,iOS 这条线其实比带编辑器的引擎更好控——没有"重新生成原生工程"这个环节,你在 Xcode 里配的东西不会莫名其妙被覆盖。剩下要操心的就是证书别过期、描述文件别忘了重建。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047460/viewspace-3181335/ ,如需转载,请注明出处,否则将追究法律责任。