首页 > 解决方案 > 在 macOS 守护程序上使用 Crashlytics

问题描述

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

我在想问题可能是 crashlytics 使用了一个不是守护进程安全的框架。 有关该主题的Apple 文档说:

如果您的守护程序使用的框架不是守护程序安全的,您可能会遇到各种问题。

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

标签: macoscrashlyticsgoogle-fabric

解决方案


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

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

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

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

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

在 macOS 上,Crashlytics与 AppKit 进行了一些集成,以改进异常报告。如果我没记错的话,可以完全跳过这个集成,如文档中所述。

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

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


推荐阅读