Objective c OS X FinderSync';失败';用于/卷
我正在创建一个简单的OS X,为所有文件的控件/右键单击菜单添加一个菜单项:Objective c OS X FinderSync';失败';用于/卷,objective-c,operating-system,findersync,Objective C,Operating System,Findersync,我正在创建一个简单的OS X,为所有文件的控件/右键单击菜单添加一个菜单项: [FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]]; 它对所有文件都很有效(出现菜单项等),除了/Volumes中的那些文件,奇怪的是,如果我在/Volumes中手动创建目录并在那里添加一些文件,FinderSync的菜单项会在我右键单击时出现。但是,
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]];
它对所有文件都很有效(出现菜单项等),除了/Volumes
中的那些文件,奇怪的是,如果我在/Volumes
中手动创建目录并在那里添加一些文件,FinderSync的菜单项会在我右键单击时出现。但是,对于任何已装入卷中的任何文件(即来自已装入的.dmg的文件),它将失败:不显示任何菜单项
直接在目录URL
中指定已装入的卷同样会失败:
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/Volumes/SomeMountedDMG"]];
它似乎有类似的问题,所以这可能是一个已知的错误/限制 Finder Sync扩展名监视的文件夹集不跨越文件系统边界。(尽管苹果的文档中没有明确提到这一点,但这一点可以通过经验加以验证,并且在macOS 10.13.3中仍然是正确的) 由于预期的用例是监视由Dropbox等同步实用程序维护的特定文件夹,因此苹果可能不认为这是一个限制。但是,许多开发人员将Finder Sync扩展作为一种向Finder中的顶级上下文菜单添加任意项的方式来实现(而不必被限制在“服务”子菜单中),即使这种用法是: 确保Finder Sync扩展点适合 您计划提供的功能。最佳查找同步扩展 支持将本地文件夹的内容与远程文件夹同步的应用程序 数据源。Finder Sync不打算用作 修改Finder的用户界面 要绕过此限制并使扩展的菜单项可用于Finder中的任何可见项,必须执行以下操作:
FIFinderSyncController
对象的directoryURL
属性
结果是:
import FinderSync
let finderSync = FIFinderSyncController.default()
if let mountedVolumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil,
options: .skipHiddenVolumes) {
finderSync.directoryURLs = Set<URL>(mountedVolumes)
}
(卸载和重命名通知的处理留作练习
供读者参考。)如果你找到了解决办法,你可以回答自己的问题。这将帮助其他人解决同样的问题。仍然没有解决方案…抱歉:(will ping Apple!它只是安装了DMG还是只读安装的卷?我刚刚测试了一个可锁定的USB驱动器,当USB驱动器处于锁定模式和解锁模式时,查找器选项有很大不同。同样的问题,你是否打开了Apple的错误?
let notificationCenter = NSWorkspace.shared.notificationCenter
notificationCenter.addObserver(forName: NSWorkspace.didMountNotification, object: nil, queue: .main) {
(notification) in
if let volumeURL = notification.userInfo?[NSWorkspace.volumeURLUserInfoKey] as? URL {
finderSync.directoryURLs.insert(volumeURL)
}
}