Linux 上生成 AppStoreInfo.plist,App Store 上架 iOS

在 Linux 服务器上处理 iOS 上传时,很多人会卡在一个奇怪的问题上,IPA 签名完成之后,等待上传的时候,但工具提示缺少 AppStoreInfo.plist。

这个文件容易让人误解。它不是 App 里的资源文件,也不是放进 Payload 里的配置文件。它属于上传阶段的数据,和 IPA 一起被提交给 App Store Connect。

确认 Linux 负责的是上传

在这套流程里 Linux 的作用是接收已经签名完成的 IPA,调用命令行上传工具将包提交到 App Store Connect

IPA 可以来自:Xcode Archive、Fastlane 构建、Flutter / React Native 的 macOS 构建节点、HBuilderX 或云打包服务,Linux 不需要参与 iOS 编译,只处理上传。

AppStoreInfo.plist 为什么会在 Linux 上传时出现

如果使用 Xcode 的图形化上传流程,相关 metadata 会由 Xcode 自动处理,我们很少看到它。

但在 Linux 上,没有 Xcode,也没有 Transporter 图形界面。上传工具如果没有自动生成 metadata,就可能出现Missing AppStoreInfo.plist,或者上传阶段直接失败。

这类问题不代表 IPA 损坏,也不代表证书无效。它说明上传缺少 App Store 所需的描述信息。

不建议手动创建 AppStoreInfo.plist

手动创建 plist 看起来可行,但维护成本很高。因为,metadata 字段会随 Apple 上传接口变化、不同上传方式需要的结构可能不同、手写字段出错后,报错会变得更难排查,如果只是为了上传 IPA,手动维护 plist 并不是稳定方案。

使用 AppUploader CLI 自动生成并上传

在 Linux 上,可以使用 AppUploader(开心上架) 的命令行工具完成上传。

Linux 版本的 appuploader_cli 位于下载包的 runtime 目录中。

进入目录后,可以先赋予执行权限chmod +x appuploader_cli

然后执行上传命令:

复制代码
./appuploader_cli --upload-app \
-f Payload.ipa \
-u user@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios

也可以使用子命令写法:

复制代码
./appuploader_cli upload \
-f Payload.ipa \
-u user@example.com \
-p xxxx-xxxx-xxxx-xxxx \
--type ios

这里的参数含义:

  • -f 指定 IPA 文件路径
  • -u 指定 Apple 开发者账号
  • -p 指定 App 专用密码
  • --type ios 指定上传 iOS 应用

执行上传时,CLI 会自动处理上传 metadata,其中就包括 AppStoreInfo.plist,不需要开发者单独生成。

在 CI 里怎么接入

如果 Linux 节点跑在 Jenkins、GitLab CI 或其他发布系统中,可以把上传命令放进脚本:

复制代码
if [ ! -f build/app.ipa ]; then
  echo "IPA not found"
  exit 1
fi

./appuploader_cli upload \
-f build/app.ipa \
-u "$APPLE_ID" \
-p "$APP_PASSWORD" \
--type ios

这样上传流程就变成了一个自动可以重复使用的步骤了:

  • 构建系统产出 IPA
  • Linux 节点检查文件是否存在
  • AppUploader CLI 上传
  • App Store Connect 接收构建

这个过程中,AppStoreInfo.plist 由上传工具自动生成。

在 Linux 上生成 AppStoreInfo.plist,更准确的说法是,上传时自动生成,而不是手动创建。

只要 IPA 已经签名完成,使用 AppUploader CLI 就可以在 Linux 环境中直接上传到 App Store Connect,并自动完成 metadata 处理。

相关推荐
Lsetea15 分钟前
curl访问HTTPS返回304却没有正文:条件请求、缓存与证书验收排查
linux·http·https·ssl证书·curl
深度学习040741 分钟前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
邪修king1 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
用户337922545682 小时前
Kiora SDK:在 Android 上组织端侧模型、工具与 A2A 协作
android
洞见前行2 小时前
你在 XML 时代学的渲染优化,进了 Compose 大多不再是重点——Recomposition 才是新的战场
android
李纲明2 小时前
微信小程序 web-view 打开空白或提示未配置业务域名:校验文件、HTTPS 与跳转域名排查
前端·微信小程序·https·web-view·小程序开发·业务域名
2501_916008892 小时前
Windows 上写第一个 SwiftUI App,KXBuild 空工程起步,跑到 iPhone 真机
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
ii_best2 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵
hunterandroid2 小时前
OkHttp 源码解析:拦截器链、连接池与缓存策略的设计精髓
android
蒲公英内测分发3 小时前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表