3 条命令下载 App Store 里的 iOS 应用包:ipatool .ipa 下载完整指南
【免费下载链接】ipatoolCommand-line tool that allows you to search for iOS, iPadOS, tvOS, visionOS, and macOS apps on the App Store, and download .ipa or macOS .pkg app packages.项目地址: https://gitcode.com/GitHub_Trending/ip/ipatool
ipatool 是一个 Go 命令行工具,用 Apple ID 认证后即可在 App Store 搜索并下载 iOS、iPadOS、tvOS、visionOS、macOS 五个平台的 .ipa / .pkg 包,适合不想备 Xcode 却要做回归测试、离线分析和版本归档的开发者。线上报了一个兼容性 bug,最新版的设备复现不了,你需要把某个历史版本装到真机上对比,而 App Store 网页端根本查不到旧包下载地址。ipatool 直接走 App Store 私有 API 拿包,不依赖 Xcode、模拟器或越狱设备。
安装并拿到第一个 App Store 会话
本节解决"从零到第一条 .ipa 落盘"的最短路径,前置条件只有一个:一个开通了 App Store 的 Apple ID,系统支持 Windows、Linux、macOS。
# 预期:安装完成,ipatool --version 能打印版本号;源码构建产物是单二进制,无运行时依赖 brew install ipatool # 或从源码构建 git clone https://gitcode.com/GitHub_Trending/ip/ipatool cd ipatool && go build -o ipatool .认证的目的是让工具拿到有效的 App Store 会话凭据,后续所有命令都复用这份凭据。交互模式下auth login只需要-e传邮箱,密码按提示输入;开启 2FA 的账号登录成功后还会再提示输入一次 6 位验证码。
# 预期:输出 success: true,会话与密码默认存入系统钥匙串 ipatool auth login -e "you@example.com" ipatool auth info非交互环境没有提示输入的机会,验证码要用--auth-code显式传入。下面是 macOS 系统设置中获取 2FA 验证码的入口:
拿到 Bundle ID 就能下载。先search按关键词定位应用,--platform支持 iphone、ipad、appletv、visionos、macos 五个取值,-l控制返回条数;下载时加--purchase,账号没有该应用的下载授权时会先自动走一遍授权获取,避免许可报错。
# 预期:search 返回 bundle id 与名称;download 完成后输出 success: true 和 output 路径 ipatool search "WeChat" -l 3 --platform iphone ipatool download -b com.tencent.xin --purchase -o ~/Downloads/wechat.ipa交互模式下下载过程带进度条,几十 MB 量级的包通常在半分钟内完成。下载主流程 负责令牌过期重试与授权检查,auth 命令 负责凭据交互,登录、查找、购买、下载逻辑都封装在 pkg/appstore/ 里。
锁定历史版本并在流水线里跑通
本节解决两个问题:回归测试需要指定旧版本的安装包,以及 CI 流水线不允许任何交互式提示。
list-versions输出一个应用当前全部可下载的 External Version ID,get-version-metadata用它反查显示版本号与发布日期,下载前先核对清楚拿的是哪一版:
# 预期:打印该应用的全部 External Version ID;反查某个 ID 得到版本号与发布日期 ipatool list-versions -b com.tencent.xin ipatool get-version-metadata -b com.tencent.xin --external-version-id <external-id> ipatool download -b com.tencent.xin --external-version-id <external-id> -o ./wechat_old.ipa--external-version-id必须取自list-versions的输出,凭空填写会报版本不存在;不指定时默认下载最新版本。
CI 环境统一加--non-interactive:此时密码、2FA 码、钥匙串口令都必须显式传参,缺任何一项都直接报错而不是挂起等待输入,这正是自动化脚本需要的失败方式。
# 预期:流水线全程无交互阻塞;缺参数时立即报错退出而非等待 ipatool auth login -e "ci@example.com" -p "app-specific-password" --auth-code 123456 --non-interactive ipatool download -b com.example.app --purchase --non-interactive -o ./app.ipa建议使用 Apple ID 里生成的 App 专用密码而不是主账号密码,凭据泄露时影响面更小。把--format json接上定时脚本,可以让list-versions的输出自动触发自家应用每个新版本的归档,逐步积累出 A/B 回归对比的基线包库。
| 命令 | 作用 | 关键参数 |
|---|---|---|
auth login | Apple ID 登录,凭据存入钥匙串 | -e、-p、--auth-code |
search | 按关键词跨平台搜索 | --platform、-l |
list-versions | 列出全部可下载版本 | -b或-i |
get-version-metadata | 按版本 ID 反查版本号与发布日期 | --external-version-id |
download | 下载最新或指定版本安装包 | -b、--external-version-id、--purchase |
⚠️ 修复 3 个高频下载报错
本节把实际使用中最常撞到的三类报错对应到根因和一条修复命令。
password token is expired根因:App Store 会话令牌过期。 修复:多数命令内置自动重新登录重试,偶发一次通常能自行恢复;重试仍失败就执行ipatool auth login刷新凭据。license is required根因:当前账号没有该应用的下载授权。 修复:给下载命令加--purchase,或先单独执行ipatool purchase -b <bundle-id>再下载。password is required when not running in interactive mode根因:开启--non-interactive后没有传密码参数。 修复:给命令补上-p "<password>";使用文件钥匙串后端时还需同时提供--keychain-passphrase "<passphrase>"。
查看项目当前状态
项目处于 v2 阶段,MIT 许可证,命令结构稳定。最新提交 2aaf18b 强化补丁收尾流程的回归测试,近期提交集中在 SINF 签名验证与断点续传等内部模块,属于活跃维护状态。
延伸资源
- 项目文档:README.md
- 许可证:LICENSE
- 下载命令源码:cmd/download.go
【免费下载链接】ipatoolCommand-line tool that allows you to search for iOS, iPadOS, tvOS, visionOS, and macOS apps on the App Store, and download .ipa or macOS .pkg app packages.项目地址: https://gitcode.com/GitHub_Trending/ip/ipatool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考