我的用例:我有一个用于同步文件的“MainApp”。我希望“MainApp”处理所有有关同步的服务器调用和其他 REST API 调用,例如文档共享等。
另一方面,我会有一个 Finder 同步扩展,它会显示同步状态图标覆盖。它还将有一个文件上下文菜单项“共享”,它将显示一个共享对话框,用户可以在其中选择与谁共享文件。
问题:
FinderSyncExtension 和 MainApp 应该如何通信?是否应该使用 XCP,如果是,是否可以使用两种方式进行通信?例如 MainApp 通知 Finder 它应该刷新,因为一些文件已经同步,Finder 通知 MainApp 它应该执行“共享”操作。
谁应该展示“分享”对话框?单击 FinderSyncExtension 的“共享”菜单项时,应显示共享表单。这应该由 finder 扩展程序或 MainApp 显示(假设 FinderExtension 通知它单击了“共享”项)。
如果 Finder 扩展应该呈现表单,那么 FinderExtension 还应该从服务器检索数据(例如用于共享的联系人和组),我不确定 Finder 扩展是否应该对服务器执行任何网络调用。
研究这个话题,我发现了几种方法:
- FinderSyncExtension 和 MainApp 不直接通信。相反,FinderExtension 从数据库中读取数据以正确显示徽章。在这种情况下,尚不清楚 FinderExtension 在同步完成时应该如何更新,或者它应该如何通知 MainApp 执行某些操作。
- XPC 通讯。我猜 FinderExtension 可以发起对 MainApp 的调用,但预期的方向相反吗?
- macOS 进程之间是否存在某种 NotificationCenter?我尝试使用
NSWorkspace.sharedWorkspace.notificationCenter
并使用,NSDistributedNotificationCenter.defaultCenter
但它们似乎没有在 MainApp 中传递通知。 - 像 Seafile 项目中的 mach_ports?