【问题标题】:How to identify an app's version in an .ips crash report if app_version is empty (macOS Monterey)?如果 app_version 为空(macOS Monterey),如何在 .ips 崩溃报告中识别应用程序的版本?
【发布时间】:2022-01-04 19:39:11
【问题描述】:

如果用户允许,我的 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我得到空值。

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

【问题讨论】:

  • 我能补充的是,我看到了同样的东西 - is_first_party:1 的条目没有空的 app_version 和 build_version

标签: macos crash-reports


【解决方案1】:

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

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

不过,好消息是有一种变通方法:

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

dwarfdump -u /path/to/executable

这将显示应用支持的每个拱门的 UUID。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2022-12-12
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多