iOS: symbolicatecrash 被卡住了

iOS: symbolicatecrash is stuck

symbolicatecrash 卡住了。

我试图 运行 像这样:

symbolicatecrash -v crash.txt MYAPP

执行永远不会结束。它过去曾经工作,但现在(Xcode 7 和 8)它被卡住了。

请问有解决办法吗?

解决方法如下:

深入的细节出现在这里:iOS9: duplicated lines in crash reports are causing symbolicatecrash to get stuck

快速解决方案是编辑此 perl 脚本(Xcode 8 中的新位置!):

/Applications/Xcode.app//Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

现在搜索 defined($images{$bundlename}) 并在其后添加 next;,如下所示:

        if ( defined($images{$bundlename}) ) {
            next;

就这些了!

一些非常有用的符号提示:

对于符号化,您需要 3 个文件:

  1. 带有崩溃报告的文本文件:以 Incident Identifier: 开头,以 0x1974d0000 - 0x1974f3fff libxpc.dylib arm64 <ad580443238d39978d09004c210d0c18> /usr/lib/system/libxpc.dylib

  2. 结尾
  3. 应用程序文件夹,名为 MYAPP.app(Finder 隐藏了 .app 扩展名)。如果你有应用程序的 IPA,解压它,它会希望 Payload 文件夹。

  4. 编译时Xcode生成的dSYM文件夹。

您应该将 dSYM 文件夹重命名为 MYAPP.app.dSYM,并将所有三个文件放在同一文件夹中。

三个必须有相同的UUID。要验证您是否可以使用以下命令(我通过 运行 brew install gnu-sed 得到 gsed):

应用的 UUID:
dwarfdump --uuid MYAPP.app/MYAPP

符号的 UUID:
dwarfdump --uuid MYAPP.app.dSYM

UUID od 崩溃:
cat crash.txt | grep -A 1 "Binary Images:" | gsed -r -n -e 's_.*<([0-9a-z]{8})([0-9a-z]{4})([0-9a-z]{4})([0-9a-z]{4})([0-9a-z]{12}).*_----_p' | awk '{print toupper([=20=])}'

现在,如果它们都匹配相同的 UUID,您可以:

symbolicatecrash -v crash.txt MYAPP