怎么在 Windows 上用 Adobe AIR 打包 iOS 应用并上架 App Store?
我做 AIR 项目有几年了,一开始也以为 iOS 这条线非得配台 Mac 不可。真折腾下来才发现,AIR 大概是所有跨平台方案里最特殊的一个——HARMAN 维护的 AIR SDK 自带的 ADT 命令行工具,在 Windows 上就能把 IPA 打出来,AOT 编译、代码签名、封包全在本机完成,Xcode 一次都不用开。
真正卡住我的只有一件事:ADT 要一张含私钥的 .p12 和一份 .mobileprovision,而这两样按官方路径得在 Mac 上用「钥匙串访问」生成 CSR、再去开发者网站换。我在 Windows 上试过用 OpenSSL 手搓那一套,能成,但参数一错就得从头来。后来改用开心上架(AppUploader)在 Windows 上直接签发,这一步才算彻底不挡路了。
下面是我现在实际在用的流程。
先说结论:哪一步真绕不开 Mac
| 环节 | 我实际怎么做的 |
|---|---|
| 注册 Bundle ID、签发证书、生成描述文件 | Windows 上做完,不碰 Mac |
| 编译签名、打包成 IPA | ADT 在 Windows 上直接出包 |
| 提交 App Store | Windows 上传,不用 Transporter |
| 装到 iPhone 测试 | 扫码注册 UDID,再扫码装 |
顺带说一句,这工具本身不是只能在 Windows 上跑。网页版任何系统的浏览器都能打开,桌面客户端也有 macOS 版。我同事用 Mac,他一样拿它签证书——省掉的是钥匙串和 Transporter 那套操作,不是省一台机器。
第一步:先把 Bundle ID 定下来
AIR 的应用标识写在描述文件 *-app.xml 的 <id> 节点里:
<id>com.yourcompany.appname</id>
我建议先把这个值想清楚再去注册,因为 Apple 那边的 Bundle ID 创建之后是改不了的。我第一次图省事随手填了个名字,后来想改,只能重新建一个,原来那个还删不掉(有依赖的时候 Apple 不让删)。
注册的地方在开心上架的「Bundle ID」页面,点「新建 Bundle ID」,Identifier 填反向域名,只能用字母、数字、连字符和英文句点。要是应用会用到推送、App Groups 这些能力,顺手在这个 Bundle ID 的「权限」页面勾上再保存。
第二步:签发证书,拿到 .p12
ADT 要的是 PKCS#12 格式的密钥库,也就是含私钥的 .p12。
在「证书」页面点「新建证书」,上架的话类型选发布签名证书,只想先真机跑起来看看就选开发签名证书。绑定标识选刚才那个 Bundle ID,填个好认的名称和邮箱,然后设置 .p12 保护密码。
这个密码很关键:它就是后面 ADT 命令里 -storepass 要填的值,而且服务器不保存它,忘了就只能吊销证书重签一张。我现在的习惯是直接丢进密码管理器。
还有个选项叫「使用开心上架服务同步证书」,勾上之后换台电脑能重新下载同一张证书。我当初没勾,后来换机器时发现 .p12 只在旧电脑上,白折腾半天。同类型证书 Apple 一般只给 3 个名额,别乱签着玩。
提交之后 Apple 立刻签发,在列表里下载 .p12 就行。私钥是在本机生成后直接封进去的,不用再拿 OpenSSL 转一道。
第三步:生成描述文件
「描述文件」页面点「新建描述文件」。上架用 App Store 类型,发给测试同事用 Ad Hoc,自己真机调试用开发类型。关联的 Bundle ID 选第一步那个,证书选第二步那张。
Ad Hoc 和开发类型还要勾测试设备。没设备的话直接点「注册设备」,让对方用手机扫个码就把 UDID 报上来了,不用连数据线,也不用装 iTunes。
提交后下载 .mobileprovision,我一般和 .p12 一起放在工程下的 cert/ 目录里。
第四步:用 ADT 打包
AIR SDK 解压后 bin/adt.bat 就是打包工具,本机要有 JRE。上架包的命令是这样:
adt -package -target ipa-app-store ^
-provisioning-profile cert\AppStore.mobileprovision ^
-storetype pkcs12 -keystore cert\dist.p12 -storepass 你的p12密码 ^
MyApp.ipa MyApp-app.xml MyApp.swf assets
-target 这个参数决定了包的用途,我常用的几个:
ipa-app-store——提交 App Store 用,配 App Store 类型描述文件;ipa-ad-hoc——发给已注册 UDID 的设备,配 Ad Hoc 描述文件;ipa-test/ipa-debug——快速出包做真机调试,配开发类型描述文件;ipa-test-interpreter/ipa-debug-interpreter——解释器模式,打包快但跑得慢,只适合开发期反复验证。
有个地方要提醒一下:ipa-test 和 ipa-debug 打出来的包是不能上架的,带调试信息、签名类型也不对。我早期传上去被拒过一次才反应过来。
另外 ipa-app-store 走的是完整 AOT 编译,我这台机器上中等规模的工程要跑十几分钟,第一次遇到别以为卡死了。HARMAN 的 AIR SDK 分不同授权层级,免费层对启动画面之类有额外限制,具体看官方发行说明。
第五步:把 IPA 传上去
打完包我一般先在开心上架的「文件&提交」页面把 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 那种格式),不是 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 里建好了。
第六步:先装到手机上跑一遍
上架前我习惯先出个 ipa-ad-hoc 包发给测试。流程就是在「设备」页面点「注册设备」,让人扫码上报 UDID(一年 100 台名额,免费账号只有 3 台),然后回描述文件那边点「重建」把新设备包进去——不用重走一遍新建流程,重建会自动用当前有效的证书和设备重新生成。
拿新描述文件重新 adt -package -target ipa-ad-hoc 打一次,再在「文件&提交」里生成二维码,测试的人扫一下就装上了,不用连电脑。
写在最后
AIR 这条路真正的好处是编译签名这一步就在本机,不用等云端排队,也不用求人借 Mac。我现在整条链路从改代码到提交 App Store 都在同一台 Windows 上完成,中间不切环境。
证书和描述文件那部分我用的是开心上架,网页版直接能开,不装东西也行。如果你也在 Windows 上做 AIR,卡在 .p12 这一步的话可以试试。