我正在创建一个简单的OS FinderSync,它为所有文件添加一个菜单项到控件/右键单击菜单:
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]];它工作得很好(菜单项出现,等等)对于所有文件,( /Volumes中的文件除外),奇怪的是,如果我在/Volumes中手动创建一个目录并在那里添加一些文件,当我右键单击时,FinderSync的菜单项就会出现。但是,对于任何挂载卷(即从挂载的.dmg)中的任何文件,它都会失败:没有出现菜单项。
在directoryURLs中直接指定挂载卷类似地失败:
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/Volumes/SomeMountedDMG"]];其他似乎也有类似的问题,所以这可能是已知的bug/限制?
发布于 2018-02-22 20:18:03
由Finder扩展名监视的文件夹的子文件夹集不跨越文件系统边界。虽然在苹果的文档中没有明确提到这一点,但它可以通过经验进行验证(并且在macOS 10.13.3中仍然是正确的)。
由于这些扩展的预期用例是监视Finder何时显示由Dropbox等同步实用程序维护的特定文件夹,因此Apple可能不会将此行为视为限制。然而,许多开发人员将Finder扩展实现为将任意项添加到Finder中的顶级上下文菜单(而不被限制显示在“服务”子菜单中),即使这种用法是苹果明显气馁。
确保Finder扩展点适合您计划提供的功能。最佳搜索同步扩展支持将本地文件夹的内容与远程数据源同步的应用程序。Finder Sync并不打算作为修改Finder用户界面的通用工具。
要解决此限制,并使扩展的菜单项在查找程序中可见,必须执行以下操作:
directoryURLs属性初始化为结果:导入FinderSync let finderSync = FIFinderSyncController.default()如果让mountedVolumes =FIFinderSyncController.default 0,选项:.skipHiddenVolumes) { finderSync.directoryURLs = Set(mountedVolumes) }directoryURLs:let notificationCenter = NSWorkspace.shared.notificationCenter notificationCenter.addObserver(forName: NSWorkspace.didMountNotification,object: nil,queue:.main) {(通知) in if let volumeURL =NSWorkspace.shared.notificationCenter as?URL { finderSync.directoryURLs.insert(volumeURL) }}
(将处理卸载和重命名通知留作读者练习。)https://stackoverflow.com/questions/38473610
复制相似问题