4

我用 Xcode 为 iOS 编译了一个静态库,去掉了符号。它在发布配置中编译。当我将静态库复制到另一个 iOS 项目中(我将它物理复制到另一个目录中)时,我仍然能够在单步执行代码时查看静态库的源代码。我在源窗口中单击Show in finder,它会将我指向磁盘上相应的源文件。

我在十六进制编辑器中打开了这个库,它确实包含了我机器上源文件的路径,以及一堆不应该公开的其他文本数据。

我是否错过了项目设置中的某些内容?如果这是预期行为,我如何确保客户不会看到符号、源文件名等?

4

3 回答 3

8

找到所需的编译器选项。

在 LLVM 代码生成中,将Generate debug symbols设置为No并将Symbols hidden by default 设置Yes。出于某种原因,即使您告诉它删除符号,除非设置了这些符号,否则它也不会这样做。

于 2013-11-15T03:14:29.773 回答
1
  1. 您可以检查符号是否是条纹或不使用

    nm 文件名

  2. 剥离不会自动发生,您需要设置 xcode 来剥离它们,并且有几个标志负责:

    a) DEPLOYMENT_POSTPROCESSING

    先决条件:“STRIP_INSTALLED_PRODUCT(条带链接产品)。”</p>

    b) STRIP_INSTALLED_PRODUCT 仅当您将 DEPLOYMENT_POSTPROCESSING 设置为 YES 时,此选项才能在非 appstore 构建中工作。

  3. 有一种手动剥离符号的方法,只需调用

    剥离 YOURINARYNAME

于 2013-11-15T17:58:09.213 回答
1

strip YOURBINARYNAME正如@andrei-shender 所建议的那样是不够的。您需要执行以下操作:

strip -S YOURBINARYNAME

手动摆脱调试符号。当然,正确配置您的项目会更好,但如果您使用供应商脚本构建第 3 方库,则可能必须手动进行。如果去掉调试符号,Mapbox-native-gl 将从 550mb 变为 22mb!

于 2015-09-02T13:47:10.873 回答