2018-06-08

拯救强迫症:去掉 iOS 10 和以上系统中某个旧版本应用在 App Store 中的更新提示

有时出于某些原因,对于某个 App 我们会希望使用旧版本,有可能是新版本缺失了某些功能,或者新版本添加了太多无用的元素(bugs = features)等等。比如这个《电话号码归属地助手专业版》,3.9.3 之后半年的时间发布的 5 个新版本至今都是无法使用的…

Hahaha?

图片来源

但是安装旧版本后,App Store 会一直有提示更新,一不小心就(被)更新到新版本了,怎么解决这个问题呢?

如何从 App Store 上下载旧版本的 App,已经有不少说明了,主要原理是通过抓包工具比如 Charles 修改请求,下载到相应旧版本,详细可以参考:获取旧版本 app 应用

在 iOS 10 之前,我们只需要删除某个旧版 App 的 iTunesMetadata.plist 文件,App Store 即不会显示更新了。但是在 iOS 10 之后,这个方法似乎失效了:通过修改 iTunesMetadata.plist 里版本号欺骗 App Store 不好用了,在删除后,相关 App 的更新提示还在,而且还可以正常更新。

在了解了 iOS 上 installed 进程的工作原理后,找到答案。其实如果能 SSH 进入手机,只需要在删除相应 App 的 iTunesMetadata.plist 后运行 uicache 命令清空界面缓存,然后重启手机,App Store 就不会提示这些 App 更新了。

在 iOS 10 及以后版本 iOS iTunesMetadata.plist 储存目录: /private/var/containers/Bundle/Application/ 可以在终端执行 find 命令查找相应应用的目录。

uicache 的源码在 Saurik 的 repo 上可以看到: https://git.saurik.com/uikittools.git/blob/HEAD:/uicache.mm

另外,如果禁用了 iOS 天气的定位功能,iOS 天气的 Today Widget 默认是显示“天气”应用中的第一个位置的天气。在手动更新设置后,Today Widget 并不会随之更新,此时也可以使用 uicache 命令来解决。


(End)


本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议
This article is licensed under Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)

沪ICP备15044284号-1