一条命令,任意系统上都能从 IPA 生成 AppStoreInfo.plist:
1appuploader-cli info -u dev@example.com Payload.ipa -o AppStoreInfo.plist
appuploader-cli 是「开心上架(AppUploader)」自带的命令行工具,
info 命令只在本地读你的包,把苹果上架流程里那份资源描述文件生成出来,
不联网上传任何东西,也不需要 Xcode。
AppStoreInfo.plist 不是你工程里的配置,而是 投递构建时用来描述这个包的一份清单。苹果在这份文件开头就写了它的用途:
This App Store Information can be used with iTMSTransporter and App Store Connect Developer API.
也就是说,当你不是从 Xcode 里点「Distribute App」、而是用 iTMSTransporter 之类的方式把包交给苹果时,通常需要随包附上这份描述。
问题在于,正常情况下这份文件由 Xcode 工具链里的工具生成—— 它只跑在 macOS 上。这就是很多人卡住的地方:包已经在 Windows 上打好签好了,偏偏差这一份清单,为它专门买台 Mac 或者租云 Mac 并不划算。
appuploader-cli info 解决的就是这一步:在 Windows、Linux、macOS 上都能生成,产出的是同一种格式。
先安装「开心上架」,命令行工具会跟着一起装好,不用另外下载:
| 系统 | 位置 |
|---|---|
| Windows | 主程序
AppUploader.exe 同目录下的
appuploader-cli.exe |
| macOS |
AppUploader.app/Contents/Resources/appuploader-cli |
| Linux | 主程序
AppUploader 同目录下的
appuploader-cli |
在这个目录里开终端就能直接用。想在任意目录都能敲,把它加进
PATH:
export PATH="$PATH:/你的安装目录" 加进
~/.zshrc 或
~/.bashrc。验证一下:
1appuploader-cli info --help
最常用的一条:
1appuploader-cli info -u dev@example.com Payload.ipa -o AppStoreInfo.plist
-u 填你的 Apple ID 邮箱;-f Payload.ipa);-o 指定输出文件,
不加
-o 就直接打印到终端,方便接管道。跑完会打印一行结果,包含生成的文件名、大小和包的 Bundle ID:
asset description written to AppStoreInfo.plist (93613 bytes, xml plist, bundle id com.example.app)
顺手看一眼这个 Bundle ID,能马上确认你传的是不是想要的那个包——CI 里搞混构建产物比想象中常见。
支持的输入不止 IPA,
.pkg(macOS 应用)和
.zip 也能分析。
默认输出是 XML 格式的 plist,可读、方便 diff。有的下游工具要求二进制 plist:
1appuploader-cli info -u dev@example.com Payload.ipa --format binary -o AppStoreInfo.plist
--format 只有
xml(默认)和
binary 两个值。
两个典型用法。
一是上传前自查。 生成这一步会真正把包解开、逐层读一遍,包本身有结构性问题在这里就会失败,比等到上传到一半被苹果打回来快得多:
1appuploader-cli info -u "$APPLE_ID" -f build/App.ipa -o build/AppStoreInfo.plist || exit 1
二是配合别的上传工具。 如果你的流水线已经在用 iTMSTransporter 或者自研的投递脚本,只缺这份描述文件,那
info 正好补上这一环,把生成的 plist 交给下游即可。
还有个
--deterministic 开关,会把 UUID、进程号、时间戳这些每次跑都不一样的字段钉死:
1appuploader-cli info -u "$APPLE_ID" --deterministic -f build/App.ipa -o out.plist
用途很具体:想验证"两次构建产出的包是不是完全一致",加上它之后两份 plist 可以直接逐字节比对,否则光时间戳就永远对不上。日常上架不需要加。
最后提一句:这份 plist 描述的是
某一个具体的包,换一个构建就要重新生成,所以别在流水线里缓存它,打完包顺手生成一份最省事。如果你的目的其实只是把包传上去,同一个工具的
upload 命令一条命令就传完了,不需要先生成这份文件。
当初为了这一份几十 KB 的文件差点去租云 Mac,后来发现这条命令就够了。用的是开心上架(AppUploader)自带的命令行工具,它同一套东西还能在 Windows 上签证书、建 Bundle ID、生成描述文件和上传 IPA。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046796/viewspace-3180161/ ,如需转载,请注明出处,否则将追究法律责任。