11

我正在为 OS X 开发 Finder 同步扩展,并希望使用后台 XPC 服务。

我可以在主应用程序中启动并让它启动 XPC 并正确运行,但是当我尝试从 Finder Sync 访问它时没有任何反应。finder 同步和 XPC 都是它们自己的捆绑包,所以这可能就是原因。我想要的是 finder 同步与 XPC 讨论文件的状态,主应用程序与 finder 同步和 XPC 讨论要观看的文件夹列表。

有没有人有这方面的运气?按需后台服务有更好的方法吗?是否可以在两个 XPC 服务之间进行通信?

4

4 回答 4

5

与一些 Apple 工程师合作后,他们意识到这是一个问题,并建议使用 LoginItem,直到找到更好的解决方案。

所以,它是一种 XPC 服务,只是一个不断运行的服务。XPC 通信可用于扩展和主机应用程序。

它有效,尽管它不是最理想的解决方案。我推荐处理 XPC 登录项的苹果示例项目,作为如何使其工作的示例。

于 2014-11-07T18:01:09.497 回答
2

我通过实现 MainApp <-> FinderSyncExtension 通信CFMessagePorts。有关详细信息,请参阅我的问题和答案:

Finder Sync Extension 和 Main App 应该如何通信?

于 2016-12-15T14:02:02.887 回答
1

您不能直接在容器应用程序和扩展之间进行通信,但您可以使用共享资源间接地进行通信。我做了你所做的完全不正确的事情。我希望您将文件状态存储在数据库中,如果不存储,然后在容器应用程序和扩展之间共享数据库。我知道,您为什么要使用 Apple 的 FinderSync Doc 中的 XPCService。(其实是出于性能原因,为扩展创建一个NSXPCService,并从XPCService中访问共享数据库)

有关共享数据库的更多信息:

http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8

希望这对你有帮助,

于 2014-11-06T17:18:58.243 回答
1

我固执地忽略了 utahwithak的回答,并试图让它发挥作用。我最终不得不在 Apple Developer Forums 上问一个类似的问题,并最终得到了一个明确的答案,说明为什么将 Finder Sync Extension 连接到嵌入式 XPC 服务不是一个可行的系统设计。

本质上:

  • Finder Sync Extension 的行为本质上类似于第三方应用程序,因为它与主机应用程序的范围不同,无法与嵌入式 XPC 服务建立 XPC 连接。
  • utahwithak的回答是正确的,为了让 Finder Sync Extension 与 XPC 服务通信,它需要是 XPC 登录项。但是,对此有一些警告:

    • 这似乎是一个偶然的功能。不确定它是否最终可能会被修复/删除
    • 即使不需要,XPC 也必须始终运行,因为它是一个登录项
    • 如果它是一个登录项,用户将需要明确选择加入此功能并能够选择退出。

资源:

于 2019-01-09T17:27:03.423 回答