Linux 环境下如何挂载未越狱的 iOS 设备

ChangeLog

[2020-02-10-update] 在 Manjaro 上安装有点问题,还没折腾出来。

[2020-03-18-update] Arch 系的看文档好了: Arch_IOS

TL;DR;

核心是两个包:libimobiledevice,用于 Linux 与 IOS 设备通信;ifuse,用于挂载 IOS 设备的文件。

至于下面提到的 ideviceinstaller,则用于查看 IOS 的 app bundleID,即 IOS 设备安装的 app 的标识码。非必要。(如果你记得或通过其它途径能找到对应软件的标志码的话……)

需求

需求:把本地的电子书、电影、音乐等放进 iOS 设备方便使用。若是在 Windows 环境,有各种助手……Linux 咋整呢?

(非越狱前提下:)

限制

挂载 com.apple.Music 等软件的 Documents 目录,以及尝试 --container 挂载时,报错 ERROR: InstallationLookupFailed

有可能是 UIFileSharingEnabled 的问题,但我不确定。

可能的解决方案(我没试过):也许可以先通过助手(或者 libimobiledevice)安装 apple music 等软件的 ipa,然后尝试管理。

步骤

一、Linux 挂载 iOS 设备

执行

1
2
apt-get install libimobiledevice-utils
# sudo pacman -Sy libimobiledevice

装上后,Linux 的机子就可以连接 iOS 设备了。

用数据线连接电脑与 iOS 设备后,在 iOS 端点击信任。之后,(一般来说)文件管理就会自动挂载上 iOS 的存储器。

文件管理器自动挂载上也不过是把设备挂载到 /media 。如果没自动挂载上而有需求,可以手动挂载。

如果使用 ifuse,执行 ifuse <挂载点> 即可。例如:

ifuse /hqweay_phone

不过,存储器里只有图片、视频、以及「通过各种助手安装的软件的文件夹」等……

联系上面提到的 限制

这样已经能读到「通过各种助手安装的软件的文件夹」了。举个例子,如果我们需要把 Linux 电脑上的一本电子书放进 iOS 上的「多看阅读」,就可以先通过「各种助手软件」安装「多看阅读」,然后执行上面步骤,再直接把电子书放进多看阅读的文件夹。

cool!不过我们能不能读取到通过 App Store 安装的软件的文件夹呢?

看下面啦。

二、ifuse

通过 ifuse 可以挂载「通过 App Store 安装的软件的文件夹」到电脑。

Arch 安装

1
sudo pacman -Sy ifuse

手动安装

先下载并安装 ifuse。

1
2
3
// cd 到要安装的目标路径,然后:

git clone https://github.com/libimobiledevice/ifuse.git

编译安装。

1
2
3
4
5
6
7
8
// 将源码在本机编译:

./autogen.sh
./configure
make

// 执行脚本ifuse到系统终端(其实也可以不用,直接去src中运行也可以)
sudo make install

编译途中可能会报错缺少依赖,按报错缺啥安装啥即可……

三、ifuse 使用

各种命令详情见文档。

https://github.com/libimobiledevice/ifuse

我们要干啥?要操作「通过 App Store 安装的软件的文件夹」。

ifuse 在这里起的作用便是把「通过 App Store 安装的软件的文件夹」挂载出来。

整个步骤分三步:一、在电脑上创个空文件夹(挂载点);二、找到要操作的软件的唯一标识号;三、通过标识号把软件的文件夹挂载到挂载点。

创建挂载点

创个空文件夹。例如文件夹名 hqweay_phone

获取 app bundleID

获取软件的唯一标识 app bundleID。

需安装 ideviceinstaller

1
2
yay -Sy ideviceinstaller
# sudo apt-get install ideviceinstaller

执行 ideviceinstaller -l

参数说明:

-l, --list-apps List apps, possible options:
-o list_user - list user apps only (this is the default)
-o list_system - list system apps only
-o list_all - list all types of apps
-o xml - print full output as xml plist

会列出 com.coderforart.iOS.MWeb 这类包名……这就是 app bundleID。

执行挂载

执行 ifuse --documents [app bundleID] [空文件夹]

–documents 挂载 Documents 目录

–container 挂载 sandbox

例如 MWeb

ifuse --documents com.coderforart.iOS.MWeb hqweay_phone/

或多看阅读

ifuse --documents com.duokan.reader hqweay_phone/

kindle

ifuse --documents com.amazon.Lassen hqweay_phone/

挂载上就可以把操作该软件的文件夹了。

注意开发者使用文件夹的规则不同,请确保文件放入的文件夹是软件对应的本地文件存放目录……

卸载

使用完了记得卸载……

fusermount -u [空文件夹]