从搜索到下载:用 IPATool 命令行工具三步拿下 iOS 应用包
【免费下载链接】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 编写的命令行工具,直接对接 App Store 官方协议:搜索 iPhone、iPad、Apple TV、Vision 与 macOS 平台的应用,把.ipa和.pkg应用包下载到本地。适合需要抓取应用包做分析、兼容性测试或归档的开发者与安全研究者。准备工作只有一个:开通双重认证的 Apple ID。
开始前确认三件事
- Go 1.25 以上环境(或直接使用 Releases 的预编译产物)
- 一个能正常登录 App Store 的 Apple ID
- 该 Apple ID 已开启双重认证,否则登录会被卡住
从源码编译到首次登录
先跑通安装和认证,后面所有功能都依赖这次登录。
git clone https://gitcode.com/GitHub_Trending/ip/ipatool cd ipatool go build -o ipatool登录时输入邮箱,密码交互输入,开启双重认证的账号需要再填一次验证码。
./ipatool auth login --email <Apple ID邮箱> ./ipatool auth infoauth info能打印出账号姓名和邮箱,说明认证链路通了。凭据会被写进系统钥匙串,之后每条命令自动携带,不需要反复登录。
核心能力逐个拆
搜索:先拿到应用 ID
./ipatool search "微信" --platform iphone --limit 10- 默认返回 5 条结果,
--limit可调整,visionOS 平台上限 12 - 输出包含应用 ID、名称、开发商,ID 是后续所有命令的入口
--platform支持iphone、ipad、appletv、visionos、macos
下载:一条命令落盘
./ipatool download --app-id <应用ID> --output ./downloads/--output传目录时,工具按"应用+版本"自动生成包名存进去;传完整文件路径则原样保存- 不知道 ID 但知道包名时,用
--bundle-identifier <包名>替代--app-id - 加
--platform macos走 macOS 流程,产出.pkg而不是.ipa
历史版本:老版本也能抓
ipatool list-versions --app-id <应用ID>会返回一串版本标识(external version id)。把它传给download --external-version-id <标识>,就能下载对应旧版本;不传则默认拉最新版。get-version-metadata可以把标识解析回具体版本号和元数据。
购买列表:账号里有什么
ipatool list-purchases --page 1 --max-results 20按购买时间倒序列出当前账号已拥有的应用,做批量下载前用它核对一遍最省事。
内部设计一瞥
整体是清晰的三层结构:cmd解析参数并调度,pkg/appstore编排登录、取许可证、下载这些商店流程,internal/sap负责签名与 macOS 包的封装,底下还有两个公共设施。
- cmd/ — auth、search、download 等全部子命令定义
- pkg/appstore/ — App Store 协议交互与下载逻辑
- internal/sap/ — 签名流程与 macOS
.pkg生成 - pkg/keychain/ — 凭据在系统钥匙串中的存取
- pkg/http/ — HTTP 客户端、Cookie 维持与请求封装
一个完整工作流:归档三个历史版本
场景:某应用要对比三个版本的行为差异,需要把旧版本全部落到本地。先用list-versions拿到标识列表,再写个循环逐版下载,已存在的目录直接跳过。
for vid in <标识1> <标识2> <标识3>; do if [ ! -d "./downloads/$vid" ]; then mkdir -p "./downloads/$vid" ./ipatool download --app-id <应用ID> --external-version-id "$vid" \ --output "./downloads/$vid/" --non-interactive --format json fi done--non-interactive让命令不进交互模式,--format json把结果变成结构化输出,方便脚本判断成败。失败的应用会原样报错,其余版本继续跑,不用整批重来。
踩坑与排错
现象:登录输完密码后要求输入 2FA 验证码。原因:Apple ID 开启了双重认证,Apple 对新设备登录要求人工确认。解法:手动跑时按提示输入手机上的验证码;脚本环境里加--auth-code <验证码>重跑一次。
现象:下载时报错,提示该应用需要先获取许可证。原因:账号下没有这个应用的授权(常见于应用曾从购买列表移除)。解法:先跑purchase --app-id <应用ID> --platform iphone取授权,或在download命令上加--purchase让工具自动补取。
现象:隔了一段时间没登录,命令却报认证失败。原因:凭据里的密码令牌有有效期,过期后请求被拒。解法:重跑auth login。download和list-versions内部带重试,检测到令牌过期会自动重新登录,最多试 3 次,多数情况等一等就好。
现象:--output指了个目录,文件却"消失"了。原因:路径是目录时,包会按工具生成的文件名存进目录里。解法:进目录找文件,或直接传完整文件路径指定落盘位置。
使用边界
IPATool 的定位是帮你拿到自己拥有或有权访问的应用包。使用它受 Apple 服务条款与开发者协议约束,不要用它绕过授权或二次分发付费应用。
适合谁
做 iOS 兼容性测试、应用安全分析、应用归档的人可以试试 IPATool。核心链路就三句:auth login登录,search拿 ID,download拿包。想深入看协议细节,直接读 cmd/ 和 pkg/appstore/ 里的源码。
【免费下载链接】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),仅供参考