问题
当我在 Xcode 中反复构建发布时,生成的 dSYM 完全为空,因此调试器无法显示任何内容。
我已经能够在Xcode 11.3.1中用一个最小的项目重现这一点,如下所示:
- 文件 -> 新项目(macOS、App、Objective-C)
- 在目标的构建设置中:
- 设置
DEPLOYMENT_POSTPROCESSING
为Release
_YES
- 设置
- 产品 -> 方案 -> 编辑方案
- 设置
Build Configuration
为Release
- 设置
- 产品 -> 构建
- 更改未编译成二进制文件的文件(例如更改版权声明
Info.plist
- 产品 -> 构建
现在在GenerateDSYMFile步骤的构建日志中有一个警告
warning: no debug symbols in executable (-arch x86_64)
如果生成的应用程序运行,将没有调试信息(您不能在 Xcode 中设置断点,如果您手动中断堆栈帧将只是___lldb_unnamed_symbol
,...)
到目前为止我发现了什么
Xcode 构建过程的相关部分似乎是:
- 链接目标文件以形成二进制文件(仅当其中至少一个已更改时)
- 从二进制生成 dSYM 文件(如果输出中的任何内容发生了变化)
- 剥离二进制文件,即删除调试符号(如果输出中的任何内容发生了变化)
所以 1) 在重复构建中被跳过,因为源(以及目标文件)没有改变。2) 被执行,因为Info.plist
已更改,但它对已被先前构建剥离的二进制文件进行操作。因此,dSYM 为空。
看起来 2) 只应在与 1) 相同的条件下重新运行,但这些依赖项似乎在 Xcode 中是硬连线的......
有没有办法解决这个问题?