写这个答案既是为了社区,也是为了我自己。
如果存在象征崩溃报告的问题,可以通过以下方式解决:
新建一个文件夹,复制Foo.app
and Foo.app.dSYM
从相应的.xcarchive
进入文件夹。同时复制.crash
报告到文件夹中。
在 TextEdit 或其他地方打开崩溃报告,转到Binary Images:
部分,然后复制其中的第一个地址(例如0xd7000
).
-
cd
进入文件夹。现在您可以运行以下命令:
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb
这将表示地址处的符号0x0033f9bb
。请确保选择正确的值-arch
选项(可以从第一行获得Binary Images:
部分,或从Hardware Model:
在崩溃报告和应用程序支持的拱门中)。
您还可以将崩溃报告中的必要地址(例如线程调用堆栈)直接复制到文本文件中(在 TextEdit 中,按住 Option 并选择必要的文本块,或复制并剪切),以获得如下内容:
0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3
现在您可以将其保存到文本文件中,例如addr.txt
,然后运行以下命令:
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
这将同时为所有地址提供一个很好的符号。
P.S.
在执行上述操作之前,值得检查所有内容是否设置正确(如atos
会很高兴地报告基本上任何提供的地址的内容)。
要进行检查,请打开崩溃报告,然后转到调用堆栈的末尾Thread 0
。倒数第一行列出您的应用程序(通常是第二行),例如:
34 Foo 0x0033f9bb 0xd7000 + 2525627
应该是main()
称呼。表示地址(0x0033f9bb
在这种情况下)如上所述应该确认这确实是main()
而不是某种随机方法或函数。
如果地址不是main()
,检查您的加载地址(-l
选项)和拱形(-arch
选项)。
P.P.S.
如果上述方法由于以下原因不起作用bitcode,从 iTunes Connect 下载适合您构建的 dSYM,从 dSYM 中提取可执行二进制文件(Finder > 显示包内容),将其复制到目录中并使用它(即Foo
) 作为参数atos
,而不是Foo.app/Foo
.