【问题标题】:Use Crashlytics on macOS daemon在 macOS 守护程序上使用 Crashlytics
【发布时间】:2018-08-17 13:51:56
【问题描述】:

我有一个与 Crashlytics 集成的 macOS 应用程序。如果我作为代理运行它,一切似乎都正常。但是当我将它作为守护进程运行时,崩溃和错误不会显示在 Web 面板上。

我认为问题可能在于 crashlytics 使用的框架不是守护进程安全的。 Apple documentation 关于这个主题说:

如果你的守护进程使用的框架不是守护进程安全的,你可以运行 各种问题。

这真的是问题吗?是否有解决方法让我可以让它工作?

【问题讨论】:

    标签: macos crashlytics google-fabric


    【解决方案1】:

    此处是 Apple 平台上 Crashlytics SDK 的前维护者。但是,我已经有一段时间没有在该组织工作了,所以我的信息可能已经过时了。您绝对应该向他们寻求帮助。不过,我还是会试一试。

    过去有许多其他人要求提供这种功能,据我所知,他们已成功地将 Crashlytics 集成到非 UI 进程中。不过,有一些事情需要注意。我也知道守护进程安全问题,这可能是一个问题。但是,我不确定它会如何表现出来。

    当您说代理与守护程序时,您是在谈论每个进程与每个用户启动的作业,还是其他什么?我可以相当肯定的一件事是,Crashlytics 不支持同时运行具有相同捆绑 ID 的多个进程。如果您的进程可以同时运行多个副本,则您无法执行此操作。即使它有时看起来确实有效,但它不会可靠地工作,充其量可能会导致严重的问题(可能会崩溃)。

    对于正确操作绝对必要的一件事是主运行循环。没有 Crashlytics 肯定无法正常工作。

    Crashlytics 还需要 Info.plist。这实际上可以添加到独立的二进制文件中,但经常让人绊倒。我猜你猜到了这个。

    在 macOS 上,Crashlytics integrates 与 AppKit 一起使用,以改进异常报告。如果我没记错的话,可以完全跳过此集成,如文档中所述。

    Crashlytics 依赖的另一件事是标准用户文件系统主目录。必须存在具有标准内部结构的~\Library 目录。这对于 launchd 守护进程可能有问题,因为它们以 root 身份运行。

    牢记这些事情,我很确定有可能完成这项工作。可能有些事情我不记得了,因为已经有一段时间了。但是,我绝对知道的一件事是这是一个灰色地带。它有效,但不是明确的设计目标。它现在可能不受支持。在发货之前,您绝对应该与他们核实一下。

    【讨论】:

    • 嘿@Matt!关于代理/守护进程,当我尝试作为用户进程运行时,一切似乎都运行良好,但作为通过启动的系统进程它不起作用。我将尝试跳过 AppKit 集成并查看其他要点,但我相信其他一切都可以。感谢您的回复
    • 因此,多考虑这一点,代理和守护进程都可能存在问题。代理在每个用户的基础上运行。因此,这些可能一次运行多个副本。守护进程以 root 身份运行,我不确定 root 是否具有与常规用户相同的用户级目录结构。 Crashlytics 依赖于此。
    • 有道理,我只需要放弃 Crashlytics。联系了他们的支持,得到的答复是:没有对 Daemons 的官方支持。调查Sentry 作为替代方案。但是非常感谢您的出色回答。
    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 2015-12-24
    • 2017-10-20
    • 1970-01-01
    • 2020-07-06
    • 2023-03-24
    • 1970-01-01
    • 2023-02-19
    相关资源
    最近更新 更多