如果你的构建流水线跑在没有 Mac 的机器上(例如 Windows/Linux CI Runner),或者只是想把 IPA 上传这一步从"手动点按钮"变成"一条命令",appuploader-cli 就是为这个场景做的:它是「开心上架(AppUploader)」随主程序分发的命令行工具,能力上等同于网页版「文件&提交」页面里的「提交 App Store」按钮,但不依赖 Xcode,也不依赖 macOS。
前置条件
使用 upload / info 命令的 Apple ID,需要先在 appuploader.net 完成授权(即「开心上架授权」)。未授权或授权过期会收到 license failed / license expired 提示。授权状态可以在「账号概览」中查看和激活。
第一步:找到可执行文件
appuploader-cli 随主程序一起打包,位于安装目录下的 runtime/ 目录中:
- macOS:
runtime/darwin/appuploader-cli - Windows:
runtime/windows/appuploader-cli.exe
进入该目录即可直接运行,或者把这个目录加入 CI Runner 的 PATH 环境变量,方便在脚本里直接调用。
同目录下还有一个
appuploader-adi,用途不同(内部用途),不要和appuploader-cli混淆。
第二步:上传 IPA/PKG
1appuploader upload -f <IPA/PKG 路径> -u <Apple ID> -p <App 专用密码> [--type ios]
| 参数 | 说明 |
|---|---|
-f, --file |
要上传的 IPA / PKG 文件路径(必填) |
-u, --username |
Apple ID 邮箱(必填) |
-p, --password |
App 专用密码,格式 xxxx-xxxx-xxxx-xxxx(必填,不是登录密码) |
--type |
包类型:ios / osx / appletvos / xros,默认 ios |
示例:
1appuploader upload -f Payload.ipa -u dev@example.com -p abcd-efgh-ijkl-mnop
上传过程会实时打印进度和结果日志,失败时日志会带上具体原因(如包重复、版本号冲突、签名不匹配等),方便在 CI 日志里直接定位问题。
第三步(可选):本地生成 App Store 资源描述文件
如果只想在上传前先本地校验包内容,或者需要一份 AppStoreInfo.plist 给其他上传工具用,可以用 info 命令,它只做本地分析,不会真正上传:
1appuploader info -u <Apple ID> <文件路径> [-o 输出文件] [--format xml|binary]
--deterministic 参数可以固定 UUID、进程号、时间戳等本会变化的字段,便于在 CI 里逐字节比对输出结果,适合写自动化测试。
接入 CI/CD 流水线的思路
无论是 Jenkins、GitHub Actions 还是其他 CI 系统,接入方式都一样:在构建产出 IPA 之后,加一步执行 appuploader upload 命令,把 Apple ID 和 App 专用密码通过流水线的密钥/环境变量机制注入,避免明文写在脚本里。因为 appuploader-cli 本身不依赖 macOS,你的 CI Runner 也不需要是 Mac 系统。
常见问题速查
license failed/license expired:所用 Apple ID 未在 appuploader.net 完成授权或授权已过期,前往「账号概览」激活或续期。- App 专用密码填错:
-p需要的是 Apple 生成的xxxx-xxxx-xxxx-xxxx专用密码,不是 Apple ID 登录密码。 - 想用图形界面:
upload对应网页版「文件&提交」页面的「提交 App Store」按钮;info命令目前仅能通过命令行使用。
前往 https://appuploader.net 获取 appuploader-cli,把 IPA 上传接入你的自动化流水线。