My macOS app reads the crashlog files directly and submits them to my server for analysis if the user allows it. Which means I get to see the original .ips files generated on Monterey.
Now, these files appear to contain two JSON-formated records, the first detailing the app's properties. Here's an example of that as reported for my own app:
{
"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"
}
The problem for me here is that sometimes, like in this example, both the app_version and the build_version values are empty. That makes it difficult for me to figure out which version of my app caused the crash.
I have 11 .ips crash reports, and when I compare the ones with valid version information against those missing them, the only consistency I find is that the value for is_first_party is 0 whenever I get valid versions, and 1 whenever I get empty values.
Can anyone explain why this happens and how I can make this work in all cases?
CodePudding user response:
I've also posted the question in Apple's developer forum: https://developer.apple.com/forums/thread/697964
It's possibly a bug in Monterey, or due to a somewhat damaged Launch Services Database. To tell whether it's the latter, I'd need to a dump of an affected user's LaunchDB and then analyse it to see if there are entries with missing version info for my app in there.
The good news, however, is that there's a work-around:
The "slice_uuid" is always provided, even if the versions are empty. That UUID can then be matched with the executables I've released, by using this command:
dwarfdump -u /path/to/executable
That'll show the UUID(s) for each arch the app supports.
