苹果手机上下载的文件在哪里?

Finding your files in IOS

(图文无关)

昨天在微信收到一个大文件,73M,突然意识到,微信升级,终于冲过了30M的文件传输限制。接下来的问题,这是一个开发工程文件,要在电脑开发环境使用,怎么把这个文件传输到电脑?
正常的方式是在电脑登陆电脑版微信,然后手机上转发到“文件传输助手”,电脑上就可以收到,然后重新下载。——不过这里有两个小障碍,如果这时候没有外网怎么办?如果网速很慢怎么办?如果是规范的文件,比如视频,比如图片,还可以用苹果的airdrop技术快速的传出来,对了,IOS11的airdrop已经有了中文名,叫“隔空投送”。如果是非规范的文件,比如是压缩包,那就只能借助第三方的一些程序,比如某些云端存储的苹果手机app,能支持iTunes传输就更好了,从而转折一下传输到电脑。

对我还有一个更简便的办法,因为我有一部越狱的苹果手机。这种手机现在已经很稀少了,所以下面的内容仅供参考,可能并没有太多应用价值。
首先在手机WIFI设置中查看一下手机的IP地址,其实连WIFI都没有也没关系,苹果手机自己就可以把自己当做WIFI热点。假设查到的手机地址是192.168.1.100,使用ssh链接到手机:

ssh root@192.168.1.100

输入密码登陆手机,随后,你就到了苹果手机里面了。现在的手机,完全相当于一台完整的电脑,特别是存储大点,128G/256G手机也不少见,比一般的电脑都不小,从哪着手呢?这需要先知道ios的存储结构是什么样的,在早几年其实已经有不少文章对ios存储结构做了详细介绍,但是由于越狱的艰难,很多ios底层开发团队都转行了,苹果又在逐次的更新中启用了全新的”沙盒“机制,现在的结构跟以前已经有了比较大的改变。先介绍几个常用的路径:

#系统应用文件夹,比如内置的浏览器、电话应用、联系等,这个路径跟macos是完全相同的:
/Applications

#用户安装的应用程序,甭管正常的AppStore下载、企业自主分发的应用还是开发版测试应用,都在这个文件夹:
/var/containers/Bundle/Application/

#用户应用产生的数据:
/var/mobile/Containers/

找微信下载的文件,当然到应用数据的存储目录中,所以:

cd /var/mobile/Containers/Data/
find . -size +70M -name "*zip"

这里说明一下,不要试图去按照微信中的文件名去寻找,那个只是显示用的,微信app一定是使用了自己的命名管理规则,我们基本只能确定文件的后缀应当不会被微信改变,此外作为一个不多见的大文件,指定查找的文件容量是一个好主意,当然还有文件的时间,不过find命令的时间查询还是有点难用,所以这里就使用上面一条指令来检索,很快就得到了结果:

./Application/46ADA490-A400-4966-8480-DF482EC482FF/Documents/0ba80ec6ed9e53b1800ee68d83f12815/OpenData/e8d27f2e74e87b59dcdde38fe8d7f2f2/437.zip

并且只搜索到这一个文件,接下来拷贝出来就好了,比如:

scp ./Application/46ADA490-A400-4966-8480-DF482EC482FF/Documents/0ba80ec6ed9e53b1800ee68d83f12815/OpenData/e8d27f2e74e87b59dcdde38fe8d7f2f2/437.zip andrew@192.168.1.103:~/

这里192.168.1.103是我桌面电脑的IP地址。局域网的拷贝也是一闪即至,文件转移到电脑上完成。上面的搜索结果中,还透露出来IOS沙盒机制的很多信息,这里就不多说了。