Xcode 从dSYM中排除特定符号

Xcode 从dSYM中排除特定符号,xcode,symbols,llvm-clang,dwarf,dsym,Xcode,Symbols,Llvm Clang,Dwarf,Dsym,我正在构建一个iOS项目,其中包含一个子项目,我希望将其符号从产品的.dSYM DWARF文件中排除 目前的情况是,静态库子项目包含有价值的专有代码,我不希望攻击者能够对这些代码进行符号化,即使他们使用dSYM文件对整个应用程序的崩溃报告进行重新符号化。该子项目涵盖了一个非常特定的领域,并且经过了良好的独立测试,因此我不担心无法对代码中的堆栈跟踪进行重新符号化。但是,我确实需要能够对应用程序其余部分的崩溃报告重新进行符号化,因此我需要一个dSYM,因为无法使用应用程序分发符号 我已经设法确保所有

我正在构建一个iOS项目,其中包含一个子项目,我希望将其符号从产品的.dSYM DWARF文件中排除

目前的情况是,静态库子项目包含有价值的专有代码,我不希望攻击者能够对这些代码进行符号化,即使他们使用dSYM文件对整个应用程序的崩溃报告进行重新符号化。该子项目涵盖了一个非常特定的领域,并且经过了良好的独立测试,因此我不担心无法对代码中的堆栈跟踪进行重新符号化。但是,我确实需要能够对应用程序其余部分的崩溃报告重新进行符号化,因此我需要一个dSYM,因为无法使用应用程序分发符号

我已经设法确保所有相关的符号都从二进制文件中剥离,并且设置GCCSGeNoGyTypGug GuangsIsI符号=没有从DSYM中删除很多,但是我仍然在DSYM文件中看到类私有C++方法名称。作为参考,我使用了叮当声


我怎样才能为我的应用程序生成一个dSYM而不损害这个子项目的符号

对于bog标准Xcode工作流,这可能很困难。您可能可以在shell脚本阶段执行一些操作,将静态库移动到不同的文件名,然后隐藏它,然后在主应用程序二进制文件上运行dsymutil以创建dSYM。由于dsymutil找不到静态库,因此它将无法包含这些函数的任何调试信息。或者,您可以创建静态库的无调试信息版本,尽管这需要更多的脚本编写。静态库实际上是一个对象.o文件的zip文件-您需要创建一个目录,提取.o文件ar x mylib.A,剥离.o文件,然后创建一个新的静态库ar q mylib nodebuginfo.A*.o,我想在运行dsymutil之前将其放在适当的位置


不过,我不知道如何在创建dSYM后有选择地从中删除调试信息。这是可能的,但我认为没有人编写过这样的工具。

如何将子项目静态库中的调试符号传播到整个应用程序的dSYM中?这似乎可以通过链接静态库来实现,就像它是第三方库一样,我没有调试符号,但可能我没有正确理解流程。调试信息保存在.o文件中。静态库ranlib库是.o文件的集合。主应用程序具有指向.o文件的文件名指针。在应用程序上运行dsymutil时,它会跟随这些文件名获取所有调试信息,并将它们收集到dSYM包中。