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



我的macOS应用程序直接读取crashlog文件,并在用户允许的情况下将其提交给我的服务器进行分析。这意味着我可以看到在蒙特雷生成的原始.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。

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

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

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

然而,好消息是,有一个解决方案:

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

dwarfdump -u /path/to/executable

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

相关内容

最新更新