在 macOS 守护进程上使用 Crashlytics

Use Crashlytics on macOS daemon

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

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

If your daemon uses frameworks that aren't daemon-safe, you can run into a variety of problems.

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

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

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

当你说代理与守护进程时,你是在谈论每个进程与每个用户启动的作业,还是其他?我可以相当确定的一件事是,Crashlytics 不支持同时具有相同包 ID 运行ning 的多个进程。如果您的进程 运行ning 可以同时存在多个副本,则您无法完成这项工作。即使它有时看起来确实有效,它也不会可靠地工作,最好的情况下,最坏的情况下可能会导致严重的问题(可能崩溃)。

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

Crashlytics 还需要 Info.plist。这实际上可以添加到独立的二进制文件中,但通常会使人感到困惑。我猜你想出了这个。

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

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

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