我已经看到一些应用程序能够在MacOS的Finder中将自己表示为外部磁盘。通常,这些是云存储应用程序,如PCloud Drive和WD Discovery。我想知道他们是怎么做到的。
我意识到云存储可能只是实现一些远程文件系统协议,如Samba或AFP。但我仍然不太明白应用程序是如何将文件系统直接装入Finder的。另外,如果虚拟文件系统不依赖于网络存储,是否有更有效的方法来挂载它?
这是一个相当高级的问题,所以我将给出一个高级的答案。我不知道你列出的具体例子是如何实现的,但这应该不难找到。
据我所知,选项如下:
- 在基本层面上,您可以创建VFS ext。这就是对HFS+, APFS, FAT, SMB, AFP等的支持在macOS中首先实现的方式。在Kernel.framework中,这个头文件主要是
<sys/vnode.h>
,<sys/vnode_if.h>
和<vfs/vfs_support.h>
。这为您提供了最大的功能,但也很困难,并且安装kext的用户体验继续恶化。(除非用户做一些相当复杂的操作,否则它们根本不会在ARM64 mac上加载。) - 有MacFUSE,它为你做了一些繁重的工作。一些许可问题,它反过来通过ext实现,所以用户体验问题也适用于这里。
- 使用
NSFileProvider
。这是为云风格的虚拟文件系统设计的,但在某种程度上也可以用于不同但相关的场景。 - 实现一个网络文件系统服务器,然后使用api挂载。
- 通过另一种方法实现承载常规文件系统的块设备,例如通过DriverKit SCSI控制器驱动程序或通过iSCSI目标。这只有在数据源被合理地表示为块设备时才有意义。