11

所以这让我发疯了,但我终于发现,当我导出我的应用程序以进行临时部署时,位码编译选项导致我的调试符号文件 (dSYM) 和我的应用程序 UUID 不匹配,这意味着我无法符号化任何崩溃日志。

关闭该选项可以解决此问题,但是有没有办法可以在打开该选项的情况下修复它?我阅读了该选项的提示,它说商店使用这种方法。我现在是否也无法从应用商店读取崩溃日志,还是这只是本地问题?

这是我从这个 Xcode 版本之前的旧版本中得到的:

dwarfdump --uuid app
DD25E6C9-... (armv7)
29F74B2E-... (arm64)

dwarfdump --uuid app.dsym
DD25E6C9... (armv7)
29F74B2E... (arm64)

美好的。现在打开位码:

dwarfdump --uuid app
E7D2BE71-... (armv7)
5C871FD7-... (arm64)

dwarfdump --uuid app.dsym
BC93BCF5-... (armv7)
3312658C... (arm64)

显然它不会有象征意义。我已经在关闭选项的情况下尝试过它,它再次匹配。这是 Xcode 没有为新的位码构建重新生成符号的问题吗?为什么哦为什么这个默认为ON而不警告你你的崩溃日志?

4

1 回答 1

5

启用 bitcode 后,XCode 归档过程会产生: 1. 本机 arm64 或 armv7 代码 2. Bitcode 3. dSYM 文件(匹配本机代码的 UUID)

当您生成临时分发并启用“bitcode compile”选项时,XCode 也会将 Bitcode 重新编译为 Native,这可能并且通常会导致 arm64 和 armv7 部分的 UUID 不同。原始 app.dSYM 没有被触及(因此与新的二进制文件不匹配),而是在同一个 xcarchive 文件夹中生成新的 dSYM,它们的形式为“E2015333-1220-391E-928C-04C32A179EC9.dSYM”并匹配新编译的二进制文件的实际 UUID。

故事并不总是到此结束,这些新的 dSYM 文件可能会被混淆(即有 __hidden#232434 而不是实际的符号名称)。对它们进行去混淆的映射也位于名为“BCSymbolMaps”的文件夹中的 xcarchive 文件夹中。

要对这样的 dSYM 进行去混淆,可以使用以下命令:

dsymutil --symbol-map <bcSymbol-file> <obfuscated-dsym-file>
于 2017-11-23T00:11:05.230 回答