一条命令把 App Store 装进终端:用 ipatool 搜索并下载 iOS 应用 IPA 文件
2026/8/17 22:00:29 网站建设 项目流程

一条命令把 App Store 装进终端:用 ipatool 搜索并下载 iOS 应用 IPA 文件

【免费下载链接】ipatoolCommand-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store项目地址: https://gitcode.com/GitHub_Trending/ip/ipatool

某个周五晚上,你在公司群里看到一条消息:“iOS 客户端有个历史 bug,只有 3.2.1 这个版本能复现,谁手里有这个包的 IPA?”你翻了翻硬盘,没有;问了一圈同事,也没有。App Store 里早就只剩最新版本了,而你想下载旧版本 IPA 的念头,从那天起就挥之不去。

其实这件事,一条命令就能解决。

一句话说清 ipatool 是干什么的

ipatool 是一个跨平台命令行工具,它让你直接通过终端搜索 App Store 上的 iOS 应用,并把应用安装包(也就是 IPA 文件)下载到本地。它把“打开浏览器 → 找下载工具 → 传文件”这一整条麻烦链路,压缩成了几条命令。适合三类人:需要抓取历史版本做回归测试的开发者、做应用分发和自动化打包的测试人员,以及单纯想把自己买过的应用“留一份离线包”的普通用户。

说白了,这就是你终端里的iPhone 应用仓库——搜、买、下、存,一气呵成。

先尝甜头:3 分钟跑通第一条下载命令

别急着啃文档,咱们先来点实际的。假设你已经装好了 ipatool(macOS 上brew install ipatool即可,其他平台下个预编译包解压就能用),接着做三件事:

# 第一步:登录你的 Apple ID(会提示输入密码,首次会要双重认证码) ipatool auth login --email 你的苹果ID@icloud.com # 第二步:用关键词搜一个应用,比如 Telegram ipatool search "telegram" --limit 3 # 第三步:按搜到的 app-id 下载,输出到指定路径 ipatool download --app-id 686449807 --output ~/Downloads/telegram.ipa

看到终端里出现进度条、然后命令行安静地回到提示符时,恭喜你,.ipa文件已经躺在~/Downloads/里了。整个流程从搜到下,用不了 3 分钟。这就是 ipatool 的第一印象:没有图形界面,没有多余动作,命令即结果。

核心能力逐块拆解

用一条命令搜遍整个 App Store

search是 ipatool 的入口,也是大多数人接触到的第一个命令。它背后调用了 Apple 官方的 iTunes Search API,所以搜出来的结果跟你在 App Store 里看到的基本一致。

ipatool search "微信" ipatool search "bilibili" --limit 10 ipatool search "puzzle" --platform ipad

几个常用参数值得记一下:

参数作用默认值
-l, --limit控制返回结果条数5
--platform指定平台:iphoneipadappletv不限
--format json以 JSON 输出,方便脚本解析text

搜索结果里你会看到 app-id、bundle identifier、名称、开发商等信息——这些字段正是后面所有命令的“坐标”,先搜、再按坐标定位,这就是 ipatool 的使用节奏。

登录这关怎么过:双重认证一次搞定

ipatool 的搜索、下载全都需要真实账号身份,所以第一步永远是登录。它把凭据安全地存进 macOS 钥匙串或系统密钥环(pkg/keychain/就是干这个的),下次用的时候自动读取,不用反复输密码。

如果你的 Apple ID 开了双重认证(现在基本都默认开),交互模式下它会直接提示你输入验证码,跟在手机上收一个 6 位数字、敲进去,完事。

图为 macOS 上 Apple ID 双重认证的设置界面,确认开启后,ipatool 登录时会提示你输入设备收到的验证码

非交互环境(比如 CI 服务器)下没法弹提示,那就把密码和验证码都通过参数传进去:

ipatool auth login --email xx@icloud.com --password "你的密码" --auth-code "123456" --non-interactive

这里有个细节值得说:验证码通常在几十秒内就过期,所以自动化场景里建议先拿到码再立刻执行,别把命令写成固定脚本反复跑。登录之后可以用ipatool auth info查看当前账号,不想要了随时ipatool auth revoke一键撤销。

找到应用之后,怎么把 IPA 稳稳拿下来

下载命令是 ipatool 的核心,它支持用app-idbundle identifier两种方式定位应用:

# 用 app-id 下载(数值型,最直接) ipatool download --app-id 686449807 --output ~/Downloads/telegram.ipa # 用 bundle identifier 下载(记忆成本低) ipatool download --bundle-identifier com.tencent.xin --output ~/Downloads/wechat.ipa

完整参数一览:

参数作用说明
-i, --app-id应用数字 ID与 bundle id 二选一
-b, --bundle-identifier应用唯一标识存在时覆盖 app-id
--external-version-id指定外部版本 ID不填默认下载最新版
-o, --output保存路径不填会落到当前目录
--platform目标平台iphone/ipad/appletv
--purchase自动补许可遇到“未购买”错误时很管用

下载时会显示实时进度条和字节数,文件较大时心里有个底。下载完成后工具还会自动做一步Sinf 复制pkg/appstore/appstore_replicate_sinf.go),保证 IPA 的加密签名信息完整,这一步对安装成功率影响很大,属于“它替你做好了、你根本不用管”的贴心设计。

想要指定版本?两个命令配合使用

这是 ipatool 最被低估的能力。download默认只给你最新版,但如果你要的是“某个旧版本”呢?

第一步,先列出这个应用在 App Store 上存续过的所有版本:

ipatool list-versions --app-id 686449807

输出会是一串externalVersionIdentifiers——注意,它不是 3.2.1 这种对外版本号,而是 App Store 内部的版本标识。第二步,用get-version-metadata查某个内部 ID 对应的真实版本:

ipatool get-version-metadata --app-id 686449807 --external-version-id 841234567

确认这个 ID 就是你要的旧版之后,第三步把它喂给 download:

ipatool download --app-id 686449807 --external-version-id 841234567 --output ~/Downloads/telegram-old.ipa

三步下来,“几秒钟锁定目标版本并拿到安装包”就真的实现了。想想开头那个找 3.2.1 的场景,是不是直接泪目。

顺手补一张“下载许可”:purchase 命令

App Store 里的应用,即使免费,也需要你“购买”一次获得许可证才能下载。如果你用download时遇到许可类报错,两个办法:

# 方式一:下载时自动补许可 ipatool download --app-id 686449807 --purchase # 方式二:先单独买(只支持免费应用) ipatool purchase --bundle-identifier com.telegram.messenger

已买过的应用再执行也不会报错,工具会识别出“已经拥有”并跳过。这条命令在批量抓取免费应用、或给测试账号补全“拥有列表”时特别顺手。

端到端实战:从零到拿到目标 IPA 的完整流程

功能讲完,咱们把它们串成一条真正的流水线。假设任务:帮测试团队拿到“哔哩哔哩”某个历史版本,用于兼容性验证。

第 1 步,确认登录。先跑ipatool auth info,如果返回账号信息说明凭据还在;没有就ipatool auth login补一次,顺手处理掉双重认证。

第 2 步,搜出应用的准确身份。哔哩哔哩直接按 bundle id 搜更省事:

ipatool search "bilibili" --limit 3 --format json

拿到 app-id 和 bundle identifier,记录备用。这一步看似多此一举,其实是在给后面所有命令定坐标,值得花这 10 秒钟

第 3 步,列出全部历史版本。

ipatool list-versions --bundle-identifier tv.danmaku.bilianime

或者用 app-id 也行。输出里挑一个可疑的目标(比如按时间顺序推断的旧版本 ID),去第 4 步验证。

第 4 步,核实版本号再动手。get-version-metadata把候选 ID 翻译成看得懂的版本号,避免下错包。这一步就是“差之毫厘,谬以千里”的分水岭。

第 5 步,下载并验证文件。

ipatool download --app-id 1031729434 --external-version-id 目标ID --output /tmp/bili-target.ipa

等进度条走完,ls -lh /tmp/bili-target.ipa看一眼文件大小是否正常,然后丢给测试组。整个流程从零到交付,不打开浏览器、不碰任何第三方下载站,全程终端搞定。

新手最容易踩的坑,和越用越顺手的进阶技巧

坑 1:忘了登录就急着搜应用

searchdownload都需要账号上下文。没登录时命令会直接报错,别慌,ipatool auth login补上再重试即可。记住一个顺序:先 auth,再 search,最后 download,这条链路永远不会出错。

坑 2:把双重认证码写死在脚本里

自动化脚本里带上--auth-code是常规操作,但验证码时效很短,写死等于定时炸弹。进阶做法是:把“获取验证码”和“执行命令”分开成两个流水线步骤,码到手立刻执行,过期就重新获取,配合--non-interactive就能安全地跑在 Jenkins 或 GitHub Actions 上。

坑 3:看到“未购买/需要许可”就以为要付费

多数情况只是你的账号还没有这个免费应用的许可证,--purchase或者先purchase一次就好。免费应用不等于免许可,这是新手最容易误解的点。

坑 4:版本 ID 填了对外版本号

--external-version-id要的是list-versions返回的内部 ID,不是你在 App Store 页面看到的 “4.5.2”。填错会报错或拿到错误版本,务必先用get-version-metadata核实。

进阶 1:让输出变成可解析的结构化数据

给任意命令加上--format json,输出就变成标准 JSON,配合jq可以玩出花:

ipatool search "music" --format json | jq '.[] | {id, name}'

批量筛选、自动记录版本、生成下载清单,都是几行脚本的事。

进阶 2:给自动化环境配密钥环口令

在无桌面环境的服务器上,密钥环可能无法自动解锁,此时用--keychain-passphrase指定口令即可。这是 CI 场景下最常见的隐藏开关,官方文档里甚至没怎么强调。

进阶 3:出问题先开 verbose

--verbose会输出完整的请求过程、错误栈和 Apple 服务返回的元信息(比如错误码2034代表口令过期、9610代表许可缺失)。遇到诡异问题,加个--verbose重跑一遍,答案往往就在那几行日志里。这些错误码在pkg/appstore/constants.go里都列得明明白白。

换个姿势玩 ipatool:生态与更多可能

ipatool 本身是纯 Go 写的(main.go入口,cmd/下是全部子命令),结构干净、单文件分发,这意味着两件事:一是跨平台体验完全一致,Windows 上配 WSL2、macOS、Linux 用起来毫无差异;二是你可以非常轻松地把它嵌进自己的工具链

社区里常见的玩法包括:

  • 定时巡检:写个 cron 任务,定期list-versions对比版本,发现更新就自动下载归档,等于给自己搭了个“应用更新监控”。
  • 批量分发:配合 Shell 脚本批量下载一组应用的 IPA,用于企业内部审核或镜像存档。
  • CI 集成:把auth login --non-interactivedownload --non-interactive串进流水线,新版本一发布,安装包自动到位。
  • 定制编译:想要不带版本号、改输出格式之类的私人定制?go build -o ipatool直接编译一份属于你的版本。

需要自己动手时,克隆仓库用这个地址:

git clone https://gitcode.com/GitHub_Trending/ip/ipatool

回到最开始那个周五的晚上。如果当时有人告诉你,一条命令就能从 App Store 里捞出任意历史版本的 IPA,你大概会怀疑地看对方一眼。而现在,你手里已经有了一台“终端里的 App Store”。

工具的意义从来不在于它多复杂,而在于它把一件原本麻烦的事,变得理所当然。ipatool 就是这样:登录一次,之后的每一次搜索、每一个版本、每一份安装包,都只是一条命令的距离。

现在就去终端里跑一条ipatool search吧——你想要的第一个应用,可能已经在搜索结果里等你了。

【免费下载链接】ipatoolCommand-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store项目地址: https://gitcode.com/GitHub_Trending/ip/ipatool

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询