如果 app_version 为空,如何在 .ips 崩溃报告中识别应用程序的版本 (macOS Monterey)?

How to identify an app's version in an .ips crash report if app_version is empty (macOS Monterey)?

如果用户允许,我的 macOS 应用程序直接读取崩溃日志文件并将它们提交到我的服务器进行分析。这意味着我可以看到在 Monterey 上生成的原始 .ips 文件。

现在,这些文件似乎包含两个 JSON 格式的记录,第一个详细说明应用程序的属性。这是为我自己的应用报告的示例:

{
    "app_name":"Find Any File",
    "timestamp":"2022-01-02 10:12:36.00 -0500",
    "app_version":"",
    "slice_uuid":"a15335de-4432-3b53-bcdf-381424a7a330",
    "build_version":"",
    "platform":1,
    "share_with_app_devs":0,
    "is_first_party":1,
    "bug_type":"309",
    "os_version":"macOS 12.1 (21C52)",
    "incident_id":"132818BA-3DBA-4B15-86CE-307BE961E7DC",
    "name":"Find Any File"
}

这里的问题是有时,就像在这个例子中,app_versionbuild_version 值都是空的。这让我很难确定我的应用程序版本导致崩溃。

我有 11 个 .ips 崩溃报告,当我将具有有效版本信息的崩溃报告与缺少它们的崩溃报告进行比较时,我发现的唯一一致性是每当我获得有效版本时 is_first_party 的值都是 0 , 和 1 每当我得到空值时。

任何人都可以解释为什么会发生这种情况以及我如何才能在所有情况下都做到这一点?

我也在 Apple 的开发者论坛上发布了这个问题:https://developer.apple.com/forums/thread/697964

这可能是 Monterey 中的错误,或者是由于启动服务数据库有些损坏。要判断是否是后者,我需要转储受影响用户的 LaunchDB,然后对其进行分析以查看是否存在缺少我的应用程序版本信息的条目。

不过,好消息是有一个解决方法:

始终提供“slice_uuid”,即使版本为空。然后可以使用此命令将该 UUID 与我发布的可执行文件相匹配:

dwarfdump -u /path/to/executable

这将显示应用程序支持的每个架构的 UUID。