This post was updated 2770 days ago and some of the ideas may be out of date.

一、前言:

从 iOS 系统升级的方面看,苹果是只能升级不能降级的。在 APP 升级方面也是如此,AppStore 上永远都是显示最新版本的 APP,想下载旧版本,没门!但是有时候因为某些原因我们想下载旧版的 APP,我们应该如果实现呢?去网盘上找脱壳版?NO、NO、NO太不安全了,还是下载 APPStore 上的正版比较好!

二、操作步骤

2.1 准备工具

1.Charles (传送门 -> 点我下载

2.iTunes (这个你电脑上一定有)

2.2 调试 Charles 的证书

因为苹果的 APPStore 下载是要通过 https 进行的,所以我们要安装一下 Charles 的 SSL 证书。

Help -> SSL Proxying -> Install Charles Root Certificate

如图:

安装完成一定要到钥匙串里面去信任一下。
Launchpad -> 其他 -> 钥匙串访问 -> Charles Proxy Custom Root Certificate

双击打开如图:

将使用此证书时设置为“始终信任”

2.3 下载实战

我们以下载旧版本的 QQ 为例,打开 iTunes,在 AppStore 中找到 QQ。

如图:

打开 Charles,点击下载 QQ ,我们看 Charles 中 https://xxx-buy.itunes.apple.com 的抓包数据。

如图:

我们在这个包的返回值中找到 key 值为 softwareVersionExternalIdentifiers 的字段

如图:

这一大串数字是什么呢?这个就是版本的标识。

假如我现在想下载6.6.9版本的 QQ 我可以这样操作。

打开手机上的 AppStore 查看一下 QQ 的版本记录。

如图:

我们看到6.6.9是第四个,我们在抓包的 softwareVersionExternalIdentifiers 参数中找到倒数第四个值821341311,这个就是我们要找到的版本标识。

我们把刚才的关键地址打上断点

如图:

把资料库中刚才下载的 QQ 删除掉

如图:

再次点击下载 QQ, 此时 Charles 会断点。我们把 Edit Request 中的 appExtVrsId 改为 刚才的值821341311,点击Execute,再次点击Execute,直到断点结束。

如图:

下载完毕后,我们去资料库中查看 QQ 。

尴尬了,这个版本是6.7版本的。我们在看看倒数第三个和倒数第五个分别是哪两个版本,我们一探究竟。倒数第三个是6.7.0版本,倒数第五个还是6.7版本,我再往前找,倒数第六个。

原来倒数第六个才是6.6.9版本

如图:

也就是6.7这个版本并没有出现在 APPStore 上面。至于为什么,就要问腾讯了。

我们可以通过 iTunes 或者iFunBox把这个6.6.9安装到手机上了。

三、总结:

可见版本标识并不是特别准确,我们想找到对应版本还是要费点功夫的。苹果的这一升级特性有利于维持苹果生态的技术革新,我是比较赞同的。如果每个人都去降级系统,降级软件。那么就会产生碎片化,我想我们程序员也是不希望看到的。?