怎么用 APICloud 云编译打包 iOS 应用并上架 App Store?

156 阅读5分钟

怎么用 APICloud 云编译打包 iOS 应用并上架 App Store?

APICloud 走的是和 uni-app 类似的路子:你写 HTML/JS/CSS,编译在云端完成,本地不需要 Xcode 也不需要 Mac。控制台里点云编译,选 iOS,等一会儿就能下载 IPA。

卡人的地方在云编译表单上——它要你上传 iOS 私钥证书 .p12 和 描述文件 .mobileprovision,而这两样按 Apple 的官方路径是要在 Mac 上用「钥匙串访问」生成 CSR 再去兑换的。绕了一圈又回到需要 Mac,这跟"云编译不用 Mac"的初衷是矛盾的。

我的做法是用开心上架(AppUploader)在 Windows 上把这两个文件直接签出来,这样整条链路才真的一台 Windows 走到底。

先说结论:哪一步真绕不开 Mac

环节我实际怎么做的
注册 Bundle ID、签发证书、生成描述文件Windows 上做完
编译签名成 IPA云编译,服务端完成
提交 App StoreWindows 上传
装到 iPhone 测试扫码注册 UDID,再扫码装

一整列都不需要 Mac。顺带说明,我用的签证书工具本身也不是 Windows 专属,网页版换成 macOS 或 Linux 的浏览器一样能开,桌面客户端有 macOS 版。

第一步:把三处标识对齐

这是最容易翻车的地方。有三个位置的标识必须完全一致,大小写也算:

  1. 控制台里这个应用配置的 Bundle ID;
  2. Apple 那边注册的 Bundle ID;
  3. 描述文件绑定的 App ID。

对不上的话,轻则云编译直接失败,重则编出来了但装机报「描述文件不匹配」。

注册的地方在开心上架的「Bundle ID」页面,点「新建 Bundle ID」,Identifier 用反向域名,比如 com.yourcompany.appname,只能包含字母、数字、连字符和英文句点。创建后 Identifier 改不了,所以先把应用配置里的值定下来再去注册,别来回改。

如果 App 要用推送、iCloud 这些能力,顺手在这个 Bundle ID 的「权限」页面勾上再保存,不然对应模块在真机上会静默失效。

第二步:签发证书,拿到 .p12 和它的密码

云编译表单里那个「私钥证书」就是含私钥的 .p12 文件,旁边还要填它的密码。

在「证书」页面点「新建证书」。要上架就选发布签名证书;只是想先装到自己手机上看效果,选开发签名证书也行。绑定标识选第一步注册的 Bundle ID,填个名称和邮箱,然后设置 .p12 保护密码。 证书

这个密码就是云编译表单里要填的那个私钥密码,一定记牢。服务器不保存它,也没有找回入口,忘了只能吊销证书重签一张,然后依赖它的描述文件全都要重建。我现在的习惯是直接丢密码管理器。

建议把「使用开心上架服务同步证书」勾上。换电脑或者交接给同事的时候,直接从云端下载同一张证书就行,不用满世界找 .p12 在谁那儿。另外 Apple 对同类型证书一般只给 3 个名额,团队里别几个人各签各的,很快就满。

提交之后 Apple 立刻签发,在列表里下载 .p12。私钥是在你本机生成后直接封进去的,不需要额外用 OpenSSL 转格式。

第三步:生成描述文件

「描述文件」页面点「新建描述文件」。上架选 App Store 类型;要发给同事内测就选 Ad Hoc,并且把测试设备勾上;自己真机调试用开发类型。Bundle ID 选第一步那个,证书选第二步那张。 描述文件

提交后下载 .mobileprovision。到这儿云编译要的三样就齐了:.p12、它的密码、.mobileprovision。

第四步:云编译

在控制台里选中这个应用,进云编译页面:

  1. 平台选 iOS;
  2. 证书部分把上面三样填进去——私钥文件、私钥密码、描述文件;
  3. 编译类型按你的描述文件来选:用 App Store 描述文件就选上架对应的类型,用 Ad Hoc 就选测试对应的类型;
  4. 模块和配置按项目需要勾,提交编译。

编译完成后下载 IPA。

这里最常见的失败是证书和描述文件不配对——描述文件里关联的证书,必须包含你上传的那张 .p12。在开心上架的描述文件详情里能直接看到它关联了哪些证书,对不上就点「重建」重新生成一份。

第五步:把 IPA 提交到 App Store

IPA 下载下来之后,我一般先在开心上架的「文件&提交」页面把它打开看一眼签名信息——Bundle ID 对不对、是不是 App Store 类型的描述文件、证书还有多久过期。确认没问题再点「提交 App Store」,上传日志实时输出。

想写进脚本的话用命令行:

appuploader-cli upload -f MyApp.ipa -u dev@example.com -p abcd-efgh-ijkl-mnop

-p 是 Apple 账号页面生成的 App 专用密码,格式 xxxx-xxxx-xxxx-xxxx,不是登录密码。团队场景更推荐 App Store Connect API 密钥,它属于团队、能单独吊销:

appuploader-cli upload -f MyApp.ipa --api-key <KeyID> --api-issuer <IssuerID> --private-key Auth_Key.p8

密钥方式只收 .ipa,且要求 App 已经在 App Store Connect 里建好。

第六步:先发内测包

上架前一般先出个 Ad Hoc 包。在「设备」页面点「注册设备」,把二维码丢群里让测试的人扫一下,UDID 就自动上报了(一年 100 台名额,免费账号只有 3 台)。

设备齐了之后回描述文件那边点「重建」,它会自动用当前有效的证书和设备重新生成一份,不用从头新建。拿新的描述文件重新云编译一次,再在「文件&提交」页面生成二维码,测试的人扫码就装上了,不用连电脑。

这类云编译方案的价值就在于不用自己维护 Xcode 环境,但它把签名材料的准备甩给了你。这一环用 Windows 上能签证书的工具补上,整条链路才算真正闭环,我用开心上架来实现了这些,网页版打开就能用。如果你正卡在云编译表单那个「上传私钥证书」上,可以照着上面的顺序走一遍。