【问题标题】:Communicate between finder sync extension and XPC在 finder 同步扩展和 XPC 之间进行通信
【发布时间】:2014-12-13 17:14:19
【问题描述】:

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

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

有没有人遇到过这种情况?按需后台服务是否有更好的方法?是否可以在两个 XPC 服务之间进行通信?

【问题讨论】:

    标签: objective-c cocoa xpc findersync osx-extensions


    【解决方案1】:

    我固执地忽略了utahwithak 的回答,并试图让它正常工作。我最终不得不在 Apple 开发者论坛上问了一个类似的问题,并最终得到了一个明确的答案,说明为什么将 Finder 同步扩展连接到嵌入式 XPC 服务不是一个可行的系统设计。

    基本上:

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

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

    来源:

    【讨论】:

      【解决方案2】:

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

      How should Finder Sync Extension and Main App communicate?

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 您能详细解释一下吗?您是使用单独的应用程序作为 XPC 服务,还是将其捆绑在主应用程序中?我有一个问题,NSXPCConnection 似乎没有从 Finder 插件打开到我的 XPC 服务,该服务捆绑在主应用程序中。
        【解决方案4】:

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

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

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

        希望对你有帮助,

        【讨论】:

        • 共享数据库仍然是 FinderSyncExtension MainApp 通信的推荐方式吗?数据库更新时如何通知 Finder 自己刷新?
        • 我现在强烈推荐 AppleScript。我只是盲目地关注苹果文档,完全忘记了 AppleScript。我正在使用 AppleScript 进行通信。不,您不需要使用共享容器,感谢 AppleScript :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 2018-10-05
        相关资源
        最近更新 更多