想法
最近滴滴在 App Store 上架了「新版Uber」 众所周知,这个版本简直就是老掉牙的 Uber + 滴滴的 UI,解压.ipa 文件,你甚至可以直接发现滴滴的 logo,内部文件结构和滴滴自己的 app 几乎没有差异…… 而大洋彼岸真正的 Uber 公司却是发布了真正的新版 Uber,不仅界面简化美观,同时整合多家互联网公司服务,让你可以在路途看终点附近的餐馆,电影院,甚至直接订票。
我得知 Uber 公司发布更新后,便立即准备升级,然而我却发现 Uber 已经在中国区 App Store 消失,我终于转而在已购项目下载到了更新,很遗憾我却收到了以下提示。
新版 Uber 已经无法在中国使用,但我发现我为了升级这个版本丢掉了Uber的老版本,而我已经没有办法下载老版本了,难道我真的要像现在每一个还在使用老版本Uber的用户一样,收到提示,并升级滴滴版的「新版Uber」吗?
当然不。接下来这篇文章将告诉你如何下载任意版本的任意iOS App,即降级。
请注意,接下来的教程较长,且较为复杂,如果看文章不太清楚,可看视频版本。第一次操作可能需要你十分钟时间,熟悉后就非常轻松了。
准备工作
你所需要的东西非常简单:
*iTunes (什么?你没有?)*Charles Proxy (点击下载)
你下载的 Charles Proxy 为30天试用版本,安装后你将看到如下界面,这是一个10秒的等待系统告诉你你正在使用使试用版本。
另外,边看视频教程边操作可能会更简单更节约时间。
Youtube:https://www.youtube.com/watch?v=XVejjUG9xUo
优酷:http://v.youku.com/v_show/id_XMTgxNTMxMTY0NA==.html
接下来你会收到这样的提示:
请点击 Grant Privilege 并输入管理员密码,这将自动为系统配置代理设置以启用 Charles 服务。
你便可以看到左边开始滚动显示你的网络流量了,先不管它。Charles Proxy 使用Men in the Middle (MitM) 来监视你的HTTPS协议,因此它需要证书。如果你配置过Surge MitM 那你已经很熟悉了,接下来我们需要先处理证书的问题:
注意 这步非常重要 如果你使用 iTunes 12 或以上版本 此步失败将导致 iTunes 不验证 SSL 服务器身份阻止你下载
Windows 通过证书方法请参照英语官网方法https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
在你的顶部 Bar 中找到 Help,SSL Proxying,点击「Install Charles Root CA」(图中「I这里」的位置),这将自动打开 macOS 钥匙串访问,你需要再次输入管理员密码。
双击打开(你的电脑上可能会有红色 X 图标)
将第一项「使用此证书时」改成始终信任,后面的会自动修改,然后关闭小窗口,并再次输入管理员密码保存。
接下来请退出 Charles,我们稍后再打开它来处理。
开始下载
打开 iTunes,在 App Store 中找到你所想要降级的 App,这里以 LoveLive! 学园偶像祭举例。
找到这个界面了吗?很好,现在我们重新打开 Charles,等待10s进入界面之后,点击 iTunes上的下载。
当你看到左边有「p数字-buy.itunes.apple.com」的时候,请前往 iTunes 取消下载,因为你实际上并不需要下载它。
右键点击「p数字-buy.itunes.apple.com」,找到「Enable SSL Proxying」并点击。然后回到 iTunes 刷新界面(可以重新搜索,也可以直接 Cmd+R)再次点击下载,然后再次取消。(听起来很奇怪不是吗😂,不过没有问题)
你惊奇地发现刚才的地址可以展开了,而且可以找到一个叫做 buyProduct 的东西,我们点开它。
在右边两个 XML 中,下边的那个里面找到比较底部的含有一大堆数字的项目「softwareVersionExternalIdentifiers」,这就是每个版本所对应的版本 ID。从小到大为从最旧的版本到最新的版本,也就是说这个App最新版本的ID是「818014617」,1.0版本是「401463784」。
如果你要下载它最早的版本,那么直接使用第一个 Integer 就可以了。但是如果要下载中间的一个版本怎么办呢?你可能需要对照App更新列表来找到你要的版本,并且不断尝试……此问题也困扰了我很久。
好的,现在我们找到了版本 ID,以 1.0 即 401463784 举例。现在我们再次右键「p数字-buy.itunes.apple.com」,在刚刚Enable SSL Proxying 的下方找到 Breakpoint:断点并勾选它。再次返回iTunes刷新并再次点击下载。
Duang!Charles 突然弹了出来!因为你刚刚设置了断点,iTunes 再次请求的时候 Charles 给了你一个暂停时间的功能,这个时候下面的 Cancel 就是忽略,Abort 就是阻止,Execute 就是执行。如果我点击 Abort,你会发现 iTunes 弹出窗口显示下载未完成,未知错误。那是因为你拒绝了它的 buyProduct 下载。
闲话不多说,我们选择顶上「Overview」旁边的「Edit Request」,并在 Cancel Abort 和 Execute 的上方选择 XML Text。
顶部有一个叫做 appExtVrsID 的项目,将它的值直接修改成我们需要的版本 401463784。然后点击底下的 Execute。接下来还会有几次弹窗,不需要做任何操作,直接 Execute 即可。
恭喜!这次下载的版本就是你所需要的老版本。下载完毕后可能还会有几次 Breakpoint,直接 Execute 即可,然后便可以关闭 Charles(如果你之前就关闭了 Charles,不影响)连接上你的 iPhone, iPad 或 iPod touch 将其同步进入设备即可。
脚注:其实并不一定需要用 Charles,任何支持修改 POST 请求 HTTPS 的代理工具,方法肯定也是大同小异的。像 Surge 貌似是只能捕获请求并不能编辑,就不太能完成这个操作。无论如何 Charles 只是其中一种选择。
Enjoy!
(不要尝试了 QQ 1.0 在我们现有的设备上都打不开)
*2016.11.14 更新:感谢各位支持,最近思考了一下能不能直接在 iOS 上完成这个操作,而不需要通过 iTunes 同步,因为本身 Charles 支持接管 iOS 流量,和 Surge 也是很类似的。但是很遗憾,由于 iTunes Store 类软件在 iOS 上用了特殊网络加密,不会由于系统信任证书来信任 Charles 的伪造中间人,而 Surge 采用了 TUN 原理所以强制成功。对于 Charles 的 SSL Proxy 其他 iOS 上的 App 都可以,说明 Apple 别有用意保证用户 App Store 安全。故大家还是需要麻烦一点通过 iTunes 来做这个操作。