Cocos Creator 的 iOS 流程分得很清楚:构建面板生成一个 Xcode 工程(默认在 build/ios/proj/),然后用 Xcode 打开、配签名、Archive 出 IPA。后半段必须在 macOS 上做,这个跑不掉。
但前面的准备工作和后面的上传,其实都不需要 Mac。我这两年的项目都是在 Windows 上开发、构建出工程,签名材料提前在 Windows 上用开心上架(AppUploader)备好,Mac 那边只负责打开 Xcode 点 Archive。
先说结论:哪一步真绕不开 Mac
| 环节 | 我实际怎么做的 |
|---|---|
| 注册 Bundle ID、签发证书、生成描述文件 | Windows 上做完 |
| 构建出 Xcode 工程 | Windows 版编辑器的构建面板就行 |
| 用 Xcode 编译签名成 IPA | 要 macOS |
| 提交 App Store | Windows 上传 |
| 装到 iPhone 测试 | 扫码注册 UDID,再扫码装 |
顺带说明:我用的工具不是 Windows 专用的,网页版换成 macOS 或 Linux 的浏览器一样能开,桌面客户端也有 macOS 版。表里"不需要 Mac"说的是这一步摆脱了 Xcode、钥匙串访问、Transporter 的依赖。
第一步:在构建面板里定好包名
「项目 → 构建发布」,平台选 iOS,「包名(Bundle Identifier)」填反向域名,比如 com.yourcompany.gamename。
Cocos 会把这个包名写进 Info.plist 的 CFBundleIdentifier,跟描述文件绑定的 App ID 对不上就签名失败。改过包名之后建议清理一次再重新构建,不然增量构建可能留着旧值。
同一面板里的屏幕方向、渲染后端、目标版本按项目需要配就行,跟签名无关。
第二步:在 Windows 上签出证书和描述文件
注册 Bundle ID:开心上架的「Bundle ID」页面点「新建 Bundle ID」,Identifier 填第一步的包名。创建后改不了。游戏常用的 Game Center、内购、推送,在这个 Bundle ID 的「权限」页面勾上再保存。
签发证书:「证书」页面点「新建证书」,上架选发布签名证书,真机调试选开发签名证书。绑定 Bundle ID,填名称邮箱,设一个 .p12 保护密码——导入 Mac 钥匙串时要输,服务器不保存,忘了只能吊销重签。
建议勾上「使用开心上架服务同步证书」。我这边打包的 Mac 不在手边,靠云备份直接在那台机器上下载同一张证书,比用 U 盘拷方便。
生成描述文件:「描述文件」页面点「新建描述文件」,上架选 App Store 类型,内测选 Ad Hoc 并勾上测试设备,关联上面的 Bundle ID 和证书,提交后下载 .mobileprovision。
CSR 和私钥都在本机生成后封进 .p12,不用在 Mac 上走「钥匙串访问 → 从证书颁发机构请求证书」那套。
第三步:构建出 Xcode 工程
构建面板点「构建」,Cocos Creator 会在 build/ios/ 下生成完整的原生工程,proj/ 目录里是 .xcodeproj / .xcworkspace。这一步 Windows 上就能完成,产物直接拷到 Mac 或者提交到仓库让 CI 拉都行。
Cocos 的构建是增量的,改过引擎配置或者加了原生模块之后,我一般先清理再构建,免得残留旧产物导致 Xcode 那边报一堆莫名其妙的错。
第四步:在 macOS 上签名出包
先把签名材料装好:
security import dist.p12 -k ~/Library/Keychains/login.keychain-db -P "你的p12密码" -T /usr/bin/codesign
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp AppStore.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/
然后用 Xcode 打开 build/ios/proj/ 里的工程:
- 选中主 target → Signing & Capabilities;
- 关掉 Automatically manage signing;
- Provisioning Profile 选刚拷进去的那份,证书选对应的;
- 确认 General 里的 Bundle Identifier 和描述文件绑定的 App ID 一致;
- Product → Archive → Distribute App。
有个坑要提前说:Cocos Creator 重新生成原生工程时可能会重置部分工程设置,包括你在 Xcode 里手点的签名配置。我后来改成把签名配置放进 xcconfig,或者在 CI 里构建完统一注入,就不用每次重配了。
CI 上把上面两条命令写进脚本,再用 xcodebuild archive 加 xcodebuild -exportArchive 配一份手动签名的 ExportOptions.plist 就行。
第五步:把 IPA 传上去
我一般先在开心上架的「文件&提交」页面把包打开看一眼签名信息——Bundle ID、描述文件类型、证书有效期,确认了再点「提交 App Store」,日志实时滚。
命令行:
appuploader-cli upload -f Game.ipa -u dev@example.com -p abcd-efgh-ijkl-mnop
-p 是 Apple 生成的 App 专用密码(xxxx-xxxx-xxxx-xxxx),不是 Apple ID 登录密码。团队用 API 密钥更合适:
appuploader-cli upload -f Game.ipa --api-key <KeyID> --api-issuer <IssuerID> --private-key Auth_Key.p8
密钥方式只收 .ipa,且 App 要先在 App Store Connect 里建好。这条命令不依赖 macOS。
第六步:发内测包
「设备」页面点「注册设备」,二维码发出去让人扫上报 UDID(一年 100 台,免费账号 3 台)。回描述文件那边点「重建」,生成一份包含这些设备的 Ad Hoc 描述文件。
在 Xcode 里换成这份描述文件,Archive 时导出方式选 Ad Hoc,然后在「文件&提交」页面生成二维码让人扫码装。
Cocos 这条线的分工挺清晰的:Windows 负责开发和构建工程,Mac 负责 Archive,其余都能在 Windows 上闭环。真正需要坐到 Mac 前面的时间,一个版本也就几分钟。
证书、描述文件和上传我用的是开心上架网页版方便。