嘘🤫全平台 App 发版 10 分钟收工,老板以为我还在忙

0 阅读6分钟

本文是「摸鱼指南 · 告别手动发版」系列第 1 篇。

系列目录:

  • 第 1 篇:总览(本文)
  • 第 2 篇:VSCode 插件实战
  • 第 3 篇:CLI 实战与 CI/CD
  • 第 4 篇:8 平台 API 踩坑

嘘🤫跟你说个事,别声张

上个月发版日,我和隔壁工位同时开始发版。

产品经理丢来一句:"测试过了,今天发。"

我打开电脑,8 个应用商店排着队等我伺候——

华为:登我后台!传 APK!填更新说明!

小米:该我了!OPPO:下一个我!vivo:别忘了我!

应用宝:我也要——App Store:IPA 呢?鸿蒙:我也要传!蒲公英:测试催链接了!

"这种场面我还是可以控制的。"

然后——华为上传失败了,重来。小米密码忘了,等验证码。OPPO 版本号重复,重新打包。iOS 的 Transporter 卡在 80% 不动。

2 小时后,我终于把链接发群里。回头一看——隔壁已经在刷手机了。

"你传完了?""早传完了,10 分钟的事。"

他打开 VSCode,勾了 8 个平台,点了"开始",去接了杯水。回来的时候全传完了,链接自动汇总好了。

不是他比我快,是他根本没在手动做这件事。


痛在哪

每次发版你在重复的动作:登录后台 → 找应用 → 传包 → 填说明 → 等进度 → 复制链接 → 汇总发群。7 步,0 技术含量,×8 个平台。

再想想密码管理——华为的上次改过、小米的存在哪个备忘录、OPPO 要手机验证码但手机不在手边、App Store 的专用密码过期了吗……

8 套账号,每套都可能忘密码,每套登录方式都不一样。没有任何技术含量,却每次消耗你 2 小时。


一个被忽略的事实

你用 Flutter,同事用 React Native,隔壁组写原生。框架不同,但有一件事完全一样:上传到应用商店的痛苦。

打包是框架的事——flutter build./gradlew assembleReleasexcodebuild,各管各的。

但上传?不管 APK 是 Flutter 编译的还是 Kotlin 写的,传到华为商店登的是同一个后台,填的是同一份字段,等的是同一根进度条。

打包和上传是两件事。打包跟框架绑定,上传跟框架无关。有包就能传,不问你用什么写的。


我们做了什么

对接了 8 个应用商店的 API,把认证、上传、提审全部封装了。不吹,直接看验证状态:

平台认证方式状态
蒲公英API Key✅ 已验证
华为 AppGalleryOAuth2✅ 已验证
小米应用商店RSA 公钥签名✅ 已验证
OPPO 应用商店HMAC-SHA256✅ 已验证
vivo 应用商店HMAC + MD5✅ 已验证
腾讯应用宝HMAC-SHA256✅ 已验证
App StoreTransporter + Apple ID✅ 已验证
鸿蒙应用市场OAuth2✅ 已验证

OAuth2、RSA、HMAC-SHA256……你不需要知道这些。填一次密钥,剩下的全部由工具处理。


三种发布模式

模式做什么谁用
全量流水线编译 + 上传一气呵成Flutter 开发者
仅构建只编译出安装包,不上传先验证构建
仅上传有安装包就能传所有 App 开发者

不是 Flutter 开发者?没关系,"仅上传"就是为你设计的。React Native 编译完拿到 APK,选文件直接传。原生、鸿蒙同理。

mode-switching.gif

上传之外

密钥管理:配一次,下次自动加载,存在本地不上传。每个平台旁有帮助按钮,告诉你密钥在哪申请。

失败重试:8 个平台同时传,某一个失败不影响其他 7 个,点一下只重传那一个。网络超时自动重试,认证错误不浪费时间。

安装包自动识别:选了 APK 自动解析包名版本号,IPA 自动解析 Info.plist,HAP 自动读 module.json。不用手动填。

结果汇总:上传完成后所有链接一键复制,蒲公英自动生成二维码,丢群里收工。


上传后各平台会怎样

平台上传后你还需要做什么
蒲公英直接可下载,生成二维码分享链接即可
华为/鸿蒙默认存草稿(可配自动提审)后台确认后提审,或配置 submit
小米直接提交审核确认包没问题再传(无草稿)
应用宝直接提交审核确认包没问题再传(无草稿)
OPPO/vivo包和版本信息已提交建议去后台确认后提审
App StoreIPA 传到 Connect去后台选版本、填信息、提审

注意:小米和应用宝上传即提审,这是平台 API 决定的。华为/鸿蒙最灵活,可配 draftsubmit


手动 vs 自动

手动发版自动发版
耗时2+ 小时10-15 分钟
密钥到处找,经常忘配一次,自动加载
上传逐个登录、拖文件、等进度8 平台并行,一键完成
失败全部重来单个重试
链接逐个复制汇总一键复制全部
适用所有 App 开发者,不限框架

开始使用

VSCode 插件(推荐):扩展市场搜索 "Flu CLI" → 安装 → 右键项目 → Flu: 发布中心

VSCode 插件入口转存失败,建议直接上传图片文件

CLI 命令行

npm install -g @huoye/app-ship
app-ship init # 生成配置文件
app-ship upload -c app-ship.yaml -f app-release.apk

npm 库


import { createUploadManager } from '@huoye/app-ship'
const manager = createUploadManager({ maxConcurrent: 3 })
await manager.uploadToMultiplePlatforms('./app.apk', config, metadata)

三种方式,底层同一套引擎,上传能力完全一致。


这个系列会讲什么

篇章内容适合谁
第 2 篇VSCode 发布中心完整操作教程喜欢可视化界面的开发者
第 3 篇app-ship CLI 从安装到 CI/CD 集成命令行爱好者 / DevOps
第 4 篇对接 8 个应用商店 API 的踩坑实录技术人(干货向,建议收藏)

发版这件事,不该消耗你的脑力,它只该消耗带宽。


觉得有用?

  • 👍 点赞 — 让更多被发版折磨的人看到

  • 收藏 — 下个发版日翻出来用

  • 💬 评论 — 你被哪个商店折磨得最惨?

关注公众号「火叶」,第一时间获取系列更新与 API 踩坑干货。


「摸鱼指南 · 告别手动发版」 · 第 1 篇

官方文档 · 源码仓库