在 AppStore 下载程序时,iOS 系统默认只能下载APP的最新版本。
但是,如果手中有 iOS 7 的设备,在下载一个最低支持 iOS 8.0 或者更高版本的 APP 时会发现,AppStore 会下载一个兼容 iOS 7的历史版本,而不会告知APP 不支持当前系统导致下载失败(前提是这个 Apple ID 购买过这个 APP,否则不会下载兼容的历史版本)。
实际上,AppStore 保存着一个 APP 的所有历史版本,我们可以通过越狱后安装相关的工具,在 AppStore 直接下载历史版本。如果不想越狱的话,可以通过对 Windows/Mac 端的抓包工具对 iTunes 进行抓包,修改网络请求来下载软件的历史版本。
在 Windows 端通过 Fiddler 抓包下载历史 APP 版本的文章已经足够多,这里介绍在 Mac 上通过 Charles 来进行抓包下载。
软件
- Charles v4.1.2
- iTunes v12.5.3.17
- iTunes v12.5.1 官方下载
Charles 安装根证书,并且设置始终信任
- Help -> SSL Proxying -> Install Charles Root Certificate (或者保存为.cer 双击安装)
- 在钥匙串中双击证书,打开属性页,设置始终信任
对 iTunes 的下载网络请求设置
- 任意下载或者更新一个 app,确定开始下载后就可以删除下载(这一步只是为了确认网络请求地址)
- 在 Sequence 中找到 p28-buy.itunes.apple.com 的请求,右键菜单中选择Enable SSL Proxying(开启 HTTPS 代理),并设置 Breakpoints(断点)
- 右键 Save Response,可以把所有的 app 版本对应的 id 保存到本地
正式下载
- 开启断点
- 在 iTunes 中选择要下载的程序进行下载或更新
- 开始下载后,等待 Charles 断点
- 在断点窗口,选择 Edit Request,选择 XML Text
- 在 XML 文件的 appExtVrsId 节点替换为要下载的 app 版本的 id
- 关闭断点,点击 Execute 完成下载