在我的macOS二进制文件中对所有框架运行`strip -S -x`是否有缺点?如果没有,我该如何自动化该过程?

MrM*_*age 9 xcode frameworks strip dylib debug-symbols

我注意到strip -S -x在我的应用程序'Frameworks'文件夹中的二进制文件上运行(删除所有调试和所有本地符号)使它们缩小了约25%,即使我在构建设置中启用了调试符号的剥离.

另请注意,这使得Swift支持库也变得更小,并且看起来没有用于去除它们的构建设置.另外,我甚至不能100%确定我的"剥离调试符号"设置是否正确(即实际上导致调试符号被剥离),因为它nm --debug-syms仍然显示了大量符号,并且strip -S(删除调试符号表)仍然使它们变小.我的条带设置似乎是您在Internet上找到的推荐设置:

  • 部署后处理:是的
  • 复制期间剥离调试符号:否(无论如何都没有效果,因为框架已经在那时签署了代码)
  • 剥离链接产品:是的
  • 条带样式:调试符号

但运行是否有任何不良副作用strip -S -x,例如以后无法表示堆栈跟踪?

此外,如何在构建过程中自动执行此剥离,同时保持最终代码签名不变?似乎添加-Xlinker -x -Xlinker -S到我的"其他链接器标志"将此过程应用于当前项目的二进制文件(包括框架),但不应用于我的依赖项目中的框架(例如CocoaPods).这是特别相关的,因为相应地修改我包含的CocoaPods项目的构建设置并不容易.如上所述,它也与Swift支持库dylibs相关,它们也没有这样的链接器选项,但仍然受益于这种剥离.