没有 Mac 怎么用 B4i 开发并打包 iOS 应用程序,Hosted Mac Builder 与签名材料

166 阅读5分钟

没有 Mac 怎么用 B4i 开发并打包 iOS 应用程序?

B4i 是 B4X 这套工具链里做 iOS 的那个,用类 VB 的语法写原生 iOS 应用。它在"没有 Mac"这件事上有个别家很少见的设计:官方提供 Hosted Mac Builder,编译发生在他们托管的 Mac 上,你在 Windows 上按 F5 就能出包。也就是说不用自己买 Mac、也不用配 Mac 虚拟机。

但托管构建不是免费午餐——它编译可以,签名用的证书和描述文件还得你自己提供,放在 Windows 上工程的 Keys 文件夹里。这两个文件按官方路径要在 Mac 上用「钥匙串访问」生成 CSR 再去换,等于绕了一圈又回到需要 Mac。我是用开心上架(AppUploader)在 Windows 上直接签的,这才算真正闭环。

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

环节我实际怎么做的
注册 Bundle ID、签发证书、生成描述文件Windows 上做完
写代码、IDE 操作Windows,B4i IDE 本来就是 Windows 的
编译签名成 IPAHosted Mac Builder 在托管的 Mac 上完成
提交 App StoreWindows 上传
装到 iPhone 测试扫码注册 UDID,再扫码装

一整列都不需要自己的 Mac,这在跨平台工具里算少见的。顺带说明,我用的签证书工具本身也不是 Windows 专属,网页版换成 macOS 或 Linux 的浏览器一样能开,桌面客户端有 macOS 版——只是我这边确实没 Mac。

第一步:先把 Bundle Identifier 定下来

B4i 工程的 #ApplicationLabel 和包标识在项目属性里配置,标识用反向域名,比如 com.yourcompany.appname。

这个值要和 Apple 注册的 Bundle ID、描述文件绑定的 App ID 完全一致。B4i 这边还有个额外要求:Windows 上 Keys 文件夹里的描述文件,必须和构建服务器那边匹配的是同一份,不一致的话编译会报找不到 provisioning file,而且错误信息挺含糊的,不看仔细容易往别的方向排查。

第二步:在 Windows 上签出证书和描述文件

注册 Bundle ID:开心上架的「Bundle ID」页面点「新建 Bundle ID」,Identifier 填上一步那个字符串。创建后改不了。要用推送这些能力的,在这个 Bundle ID 的「权限」页面勾上再保存。 bid

签发证书:「证书」页面点「新建证书」,上架选发布签名证书,真机调试选开发签名证书。绑定上面的 Bundle ID,填名称邮箱,设一个 .p12 保护密码——服务器不保存它,忘了只能吊销重签。顺手勾上「使用开心上架服务同步证书」,换电脑的时候能重新下载同一张。

提交后 Apple 立刻签发,下载 .p12。私钥是在你本机生成后直接封进去的,不用开 Mac 的钥匙串,也不用手敲 OpenSSL。

生成描述文件:「描述文件」页面点「新建描述文件」,上架选 App Store 类型,内测选 Ad Hoc 并勾上测试设备,真机调试选开发类型。关联上面的 Bundle ID 和证书,提交后下载 .mobileprovision。

第三步:把文件放进 B4i 的 Keys 文件夹

B4i 是从工程的 Keys 文件夹读签名材料的,把上一步下载的证书和描述文件放进去。具体需要哪几个文件、文件名怎么定,以你这个 B4i 版本的官方说明为准——不同版本对 .p12 和 .cer 的要求有过调整。

我的经验是:每次换了描述文件,Keys 文件夹里的旧文件要清干净。留着旧的很容易出现"明明换了 profile 但编译还在用老的"这种情况,排查半天最后发现是文件夹里堆了两份。

第四步:用 Hosted Mac Builder 编译

在 B4i 的 Tools → Build Server 设置里选官方的 Hosted Mac Builder(需要按官方要求完成账号相关的准备),然后正常按 F5 编译就行。工程会传到托管的 Mac 上,在那边用你提供的证书和描述文件签名,产出 IPA 再传回来。

如果你手上正好有台 Mac,也可以装本地 Builder,配置方式类似,区别只是构建服务器指向自己那台机器。托管的好处是不用维护 Xcode 版本,坏处是大工程传输受网络影响。

第五步:把 IPA 提交到 App Store

拿到 IPA 之后我一般先在开心上架的「文件&提交」页面把它打开看一眼签名信息——Bundle ID、描述文件类型、证书有效期,确认没问题再点「提交 App Store」,上传日志实时滚,失败原因直接写在里面。

想写进脚本就用命令行,在 Windows 上直接跑:

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

-p 是 Apple 生成的 App 专用密码(xxxx-xxxx-xxxx-xxxx),不是 Apple ID 登录密码。也可以用 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 里建好。

第六步:装到真机上测

「设备」页面点「注册设备」,二维码发出去让人扫,UDID 就自动上报了(一年 100 台名额,免费账号只有 3 台)。回描述文件那边点「重建」,把新设备包进一份 Ad Hoc 描述文件。

新的 .mobileprovision 换进 Keys 文件夹(记得清掉旧的),重新编译一次,然后在「文件&提交」页面生成二维码让人扫码无线安装。

写在最后

B4i 这条路的价值就在于 Hosted Mac Builder——它把"必须有台 Mac"这个门槛真正拆掉了,而不是换个说法让你去借。剩下的证书那一环,用 Windows 上能签证书的工具补上,整条链路就一台 Windows 走到底了。

我用的是开心上架,网页版打开就能用。如果你正因为没有 Mac 而在 B4i 的 Keys 文件夹这一步卡住,可以照着上面走一遍。