我一直在关注 DropBox Mac客户端,我正在研究为不同的服务实现类似的界面.
他们究竟如何与finder这样接口?我非常怀疑文件夹中表示的这些对象是每次加载时下载的实际文档吗?他们必须根据需要动态下载.那么如何在没有实际文件系统对象的情况下在finder中显示这些项?
有谁知道在Mac OS X中如何实现这一目标?
或任何指向Apple API或其他与finder类似集成的开源项目的指针?
Dropbox不支持MacFUSE或WebDAV,尽管这些可能是您尝试完成的完美解决方案.
如果它是由那些东西驱动的,那么当你没有连接时它就不会工作,因为它们都依赖服务器来存储实际信息而Dropbox却没有.如果我退出Dropbox(通过菜单项完成)并断开网络连接,我仍然可以使用这些文件.那是因为文件实际存储在我的硬盘上.
这也意味着文件不需要"在每次加载时下载",因为它们实际上存储在我的机器上.相反,只通过线路发送增量,Dropbox应用程序(在后台运行)适当地修补文件.另一方面,Dropbox应用程序监视Dropbox文件夹中的文件,当它们发生更改时,它会将相应的增量发送到服务器,服务器将它们传播到任何其他客户端.
这种设置有一些明显的优势:它在离线时工作,速度提高了一个数量级,并且对其他应用程序是透明的,因为它们只是看到磁盘上的文件.但是,我不知道它如何处理合并冲突(这可能很容易在一个或多个客户端脱机时出现),如果服务器是唯一的副本并且每个编辑都更改了中央副本,则这不是问题.
Dropbox真正让人眼前一亮的是,他们还有一个额外的技巧,用它们当前的同步状态标记Dropbox文件夹中的项目.但这不是你在这里问的问题.
至于手头的问题,你一定要看看MacFUSE和WebDAV,这可能是你问题的完美解决方案.但Dropbox的处理方式,后台应用程序更改磁盘上的实际文件,可能是一个更好的权衡.
Dropbox可能使用FSEvents来监视文件系统的更改.这是一个很棒的API,甚至可以捆绑您的应用未运行时发生的更改.它与Spotlight使用的API相同.菜单栏应用程序可能会进行实际观察(例如,重新启动它可以修复挂起的上传内容).
他们没有办法使用MacFUSE,因为这需要安装MacFUSE内核扩展以使Dropbox工作,而且由于我绝对没有安装它,我非常怀疑他们是否正在使用它.
两个建议:
MACFUSE
WebDAV的
前者将允许您编写一个显示为文件系统的应用程序并执行所有正确的操作; 后者将允许您移动服务器端的所有内容,并让用户将您的服务作为文件共享安装.