
ipatool 命令行下载 iOS 应用包十分钟拿到第一个 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如果你只想从 App Store 网页上把某个应用的历史版本抓下来基本干瞪眼——官方网页不提供任何历史版本下载入口。ipatool 解决的就是这个问题它是一个命令行工具能搜索 iOS、iPadOS、tvOS、visionOS、macOS 五个平台的应用并从 App Store 下载对应的 .ipa 或 macOS .pkg 安装包支持按 external version id 指定任意历史版本且所有命令都提供 text / json 两种输出格式。读完这篇教程你会在终端里独立走通登录 → 搜索 → 列版本 → 下载的完整流程。十分钟跑起来从编译安装到拿到第一个 IPA这一节只做一件事让你在终端里拿到第一个 IPA。整个过程分三步——装上二进制、登录 Apple ID、执行一次下载。一条命令装好 ipatool三个平台都支持从源码编译仓库里只有一个入口 main.go依赖由 go.mod 管理编译出来的就是单文件二进制git clone https://gitcode.com/GitHub_Trending/ip/ipatool cd ipatool go build -o ipatool执行完你会得到当前目录下可运行的ipatool可执行文件把它放到 PATH 里Linux/macOS 常用sudo mv ipatool /usr/local/bin/即可。macOS 用户也可以跳过编译直接brew install ipatool。不同平台的几个前置条件装的时候顺手确认一下Linux凭据存储在系统密钥环里Debian/Ubuntu 需要sudo apt-get install libsecret-1-devFedora/RHEL 需要sudo dnf install libsecret-devel。Windows确认装有 Visual C 运行时库并在 PowerShell 里放开脚本执行策略Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。登录 Apple ID 并处理双重验证所有与 App Store 交互的命令都依赖一次有效的登录。下面的命令会用你的 Apple ID 发起登录--email是必填项交互式运行时会提示你输入密码不需要写在命令行里ipatool auth login --email youexample.com如果你的账号开启了双重验证建议开启登录中途会提示enter 2FA code:把 App 上收到的六位验证码贴进去即可整个登录过程首次可能需要几分钟。开启入口在 Apple ID 的安全设置页下面这张图里双重认证开关就是在 CI 或自动化脚本里不能交互输入这时改用显式参数密码用--password传入非交互模式下缺了它命令会直接报错验证码用--auth-code传入ipatool auth login --email youexample.com --password xxxx --auth-code 123456 --non-interactive登录后用下面两条命令随时确认账号状态、或在换设备/出问题时撤销本地凭据撤销后需要重新登录ipatool auth info ipatool auth revoke第一次下载一条命令产出 IPA登录成功后按 Bundle ID 下载最新版本只需要一条命令-o指定落盘路径不带版本号信息时默认拉取最新版ipatool download -b com.tencent.xin -o ~/Downloads/wechat.ipa执行后终端会显示下载进度条非交互模式下退化为日志输出完成后按你给的路径生成本地wechat.ipa这就是你的第一个 IPA。从找到应用到拿到文件一条完整工作流真实场景里你往往不直接知道 Bundle ID而是只知道应用名、或者手里只有一个数字 App ID。把搜索、列版本、下载串起来看流程是这样的。用 search 按关键词定位 Bundle IDsearch接受任意关键词默认返回 5 条结果visionOS 平台上限是 12 条用--limit可以调大其他平台的返回量ipatool search 微信 ipatool search 游戏 --limit 10 ipatool search 视频 --platform ipad执行后每一行结果都带 Bundle ID、应用名、开发者你只需要挑出目标那行拿 Bundle ID 进入下一步。--platform支持iphone、ipad、appletv、visionos、macos五个取值不传时按默认平台搜索。用 list-versions 枚举所有可下载的历史版本拿到 Bundle ID 后下面这条命令会列出该应用全部可下载的历史版本每行附带一个 external version id——这就是后面按版本下载时的锚点ipatool list-versions -b com.tencent.xin如果手里只有数字 App ID网页地址里那种把-b换成-i即可两种方式参数含义一致ipatool list-versions -i 414478124按 Bundle ID 拉取最新版本或指定历史版本下载最新版本时--external-version-id留空即可。要下载 ipatool 指定版本比如 8.0.22把上一步列出来的 external version id 填进去ipatool download -b com.tencent.xin \ --external-version-id 1677862400 \ -o ~/Downloads/wechat_v8.0.22.ipa拿到的是一个可直接用 Xcode、jailbreak 设备或分析工具打开的 .ipa 压缩包。想进一步确认某个版本对应的元数据版本号、发布信息等用get-version-metadata解析ipatool get-version-metadata -b com.tencent.xin --external-version-id 1677862400付费应用先授权再下载付费或曾购买过的应用下载前必须持有 license否则下载请求会被拒绝。两种方式单独调用purchase先拿授权再执行下载或者直接在下载命令上加--purchase工具检测到需要授权时会自动完成购买动作再继续传输免费应用的购买即获取免费授权不会产生扣费ipatool purchase -b com.example.paidapp ipatool download -b com.example.paidapp --purchase -o app.ipa顺带一提list-purchases可以按购买时间倒序列出当前账号名下所有应用支持-p翻页和-l调每页数量默认每页 10 条批量盘点自己买过的应用时会用到。源码里到底干了什么架构不用展开细讲抓住两条主线就够了。第一条是跨平台适配。与 App Store 的全部交互逻辑集中在 pkg/appstore/ 目录cmd/层只负责解析参数和打印结果两层之间靠接口隔离所以单测可以用 mock 的 AppStore 实现直接跑。平台差异则通过 Go 的构建标签文件如library_windows.go与library_unix.go拆分配合runtime.GOOS判断见 pkg/util/machine/、internal/sap/决定运行时行为系统调用统一收敛在 pkg/util/operatingsystem/ 的OperatingSystem接口里这样换一台 Linux 或 Windows 机器核心业务代码一行不改。第二条是凭据存储。登录产出的 cookies 和加密凭据不落明文文件而是交给系统密钥环macOS 走系统钥匙串Linux 依赖 GNOME Keyring / KWallet也就是前文要装 libsecret 的原因Windows 用平台对应的加密存储实现都在 pkg/keychain/ 目录对外只暴露Get/Set/Remove三个方法并支持--keychain-passphrase在无桌面环境下解锁。会话状态目录则遵循XDG_STATE_HOME/XDG_DATA_HOME约定旧版本用户升级时会自动迁移不用手动搬。踩坑与效率技巧一个问题对应一条命令下面每一条都是遇到什么现象 → 跑哪条命令的形式按顺序试一遍基本能覆盖日常问题。登录突然失效、命令报认证错误本地凭据可能已过期。先撤销再重登而不是反复重试同一条命令ipatool auth revoke ipatool auth login --email youexample.com脚本 / CI 里提示需要交互输入所有命令都接受全局参数--non-interactive配合--password、--auth-code显式传参即可无交互运行登录态本身存在密钥环里重跑脚本不需要重复登录。输出要喂给 jq 或程序解析全局参数--format json把任何命令的输出切成 JSONsearch、list-versions、list-purchases都支持ipatool search 工具 --format json换区域或调下载速度通过环境变量IPATOOL_STOREFRONT指定 App Store 区域如美区143441-1,20export IPATOOL_STOREFRONT143441-1,20无桌面的 Linux 服务器上密钥环解锁失败给命令加--keychain-passphrase传入解锁短语例如ipatool list-purchases --keychain-passphrase ...。在 WSL 里跑WSL 里没有密钥环守护进程先手动拉起并导出套接字变量再执行 ipatoolexport DISPLAY:0 eval $(gnome-keyring-daemon --start) export SSH_AUTH_SOCK$(gpgconf --list-dirs agent-ssh-socket)调试请求细节任何命令加--verbose都能拿到带调用栈的详细日志认证失败时优先用它定位是网络问题还是凭据问题。它适合谁⚡ 三类典型角色各说一段最后给一张和其他方案的对比表。iOS 开发者做兼容测试经常需要复现用户反馈的那个旧版本list-versions能枚举完整版本历史--external-version-id能精确拉取任意一版不用翻 Mac 上的 App Store 缓存。安全研究人员批量分析场景下search --format jsonlist-purchases的组合可以脚本化地圈定目标应用清单再循环download落盘全程不碰 GUI。应用版本备份把下载和版本清单写进定时脚本每次运行都按当天日期归档例如#!/bin/bash # 批量下载脚本模板逐个拉取清单里的应用最新版本 APPS( com.tencent.xin com.tencent.mqq ) BACKUP_DIR./app_backups/$(date %Y%m%d) mkdir -p $BACKUP_DIR for app in ${APPS[]}; do ipatool download -b $app --purchase -o $BACKUP_DIR/$app.ipa \ || echo FAILED: $app ipatool list-versions -b $app $BACKUP_DIR/$app.versions.txt done这个批量下载 IPA 的脚本可以挂 cron配合--format json的版本清单输出做增量比对。与另外两条路线相比差异主要看你要不要脚本化和历史版本能力维度官方 App StoremacOS GUIipatoolCLI其他第三方工具可运行平台仅 macOSWindows / Linux / macOS多为单一平台历史版本下载不支持支持按 external version id 精确拉取通常不支持脚本 / CI 集成不可脚本化全命令支持--format json、--non-interactive有限支持凭据安全系统级系统密钥环 2FA参差不齐命令速查命令参数说明auth login-e/--password/--auth-code登录 Apple ID2FA 验证码在交互模式或--auth-code中提供auth info无查看当前已登录账号auth revoke无撤销本地 App Store 凭据search--limit/--platform按关键词搜索默认 5 条可指定平台list-versions-b/-i列出应用全部可下载版本及 external version idget-version-metadata-b/-i/--external-version-id解析单个历史版本的元数据purchase-b/-i/--platform为应用获取或补发licensedownload-b/-i/--external-version-id/-o/--purchase下载 .ipa / .pkg不指定版本时取最新list-purchases-p/-l/--platform分页列出账号已购应用按购买时间倒序全局参数三条所有子命令通用--format text|json、--non-interactive、--verbose。跑完今天的流程后建议顺手执行一次ipatool auth info确认凭据状态正常凭据存在系统密钥环里换机器前记得用auth revoke清理旧设备上的登录态。【免费下载链接】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),仅供参考