对于发布版本,iOS 中正确的"Strip Debug Symbols"设置是什么?



我在iOS上收到了一堆我的(主要是c++)应用程序的崩溃日志。我的问题是,我似乎永远都无法正确地象征这些事故报告。

剥离iOS上发布的调试符号的"正确"设置是什么?我知道你想去掉调试符号,这样应用程序的下载量就不会大到离谱。

但问题是,这似乎使坠机报告几乎无法阅读。

xcode档案中的dSYM文件是否会被用户发送并最终下载?

或者它只是为了将来的象征目的而保留的东西(在我自己的机器上,在xcode上本地完成)?

或者它只是为了将来的象征目的而保留的东西(在我自己的机器上,在Xcode上本地完成)?

这个。您的"发布"配置(或用于分发的任何配置)应具有以下设置:

默认隐藏的符号:是

Xcode仍然会生成一个dSYM文件夹,您将使用它来象征崩溃日志。有3种方法可以处理符号化:

  1. 使用Xcode。为此,无论何时发布,都需要使用产品->归档功能。创建档案后,您可以选择"导出",然后选择"保存以进行iOS应用商店部署"。之后,您可以将崩溃日志拖动到"设备日志"窗口的左侧,Xcode将为您象征它们。

  2. 使用位于Xcode.app文件夹中的symbolicalcrash工具手动进行符号化。如果您已经向用户发布了代码,但没有Xcode存档,这将非常有用。您需要确保崩溃日志与二进制和dSYM匹配,否则它将不起作用。

  3. 使用第三方工具收集故障报告并为您进行符号化处理。示例包括Crashlytics、Bugsense或HockeyApp。

如果你想知道它的正确设置,你所要做的就是:

在Xcode中从头开始重新创建相同的精确目标类型。我的意思是,如果你想知道应用程序的正确设置,那么从头开始重新创建一个应用程序,然后去检查它的设置。如果你想知道一个框架的默认设置,那么从头开始重新创建动态框架并检查它的设置。

注意:应用程序、框架、静态库和其他东西的默认设置是不同的。此外,Release与Debug的默认值也不同。

为什么应用程序和框架不同

因为框架是依赖关系,而不是最终产品。这通常意味着应用程序需要不同的编译、链接、从另一个依赖项或主应用程序本身剥离设置。

为什么调试与发布不同

使用Debug,目标是:

  • 快速构建。这意味着:
  • 不要为其他架构构建
  • 不要创建单独的dSYM
  • 能够调试

对于Release构建,目标是:

  • 使用大多数优化构建。这通常会降低速度
  • 验证该构建是否适用于其他体系结构(arm64与英特尔)。这意味着要花更多的时间来构建东西
  • 提取dSYM(调试符号)以节省空间
  • 不需要调试,只需要在需要时象征性地显示崩溃报告即可

最新更新