使用Xcode编译的iOS静态库会记住其源文件

时间:2013-11-15 02:31:57

标签: ios xcode static-libraries

我使用Xcode为iOS编译了一个静态库,并删除了符号。它是在Release配置中编译的。当我将静态库复制到另一个iOS项目(我将其物理复制到另一个目录)时,我仍然可以在单步执行代码时查看静态库的源代码。我在源窗口中单击在Finder中显示,它指向磁盘上相应的源文件。

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

我在项目设置中遗漏了什么吗?如果这是预期的行为,我怎样才能确保客户不会看到符号,源文件名等?

3 个答案:

答案 0 :(得分:7)

找到所需的编译器选项。

在LLVM代码生成中,将生成调试符号设置为,将默认隐藏的符号设置为。出于某种原因,即使你告诉它剥离符号,除非设置了符号,否则它不会这样做。

答案 1 :(得分:1)

  1. 您可以使用

    检查符号是否有条纹

    nm filename

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

    a)DEPLOYMENT_POSTPROCESSING

    先决条件:“STRIP_INSTALLED_PRODUCT(剥离链接产品)。”

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

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

    即可

    剥离YOURBINARYNAME

答案 2 :(得分:1)

@ andrei-shender建议的

strip YOURBINARYNAME是不够的。您需要执行以下操作:

strip -S YOURBINARYNAME

手动删除调试符号。当然,正确配置项目会更好,但如果使用供应商脚本构建第三方库,则可能需要手动完成。如果剥离调试符号,Mapbox-native-gl从550mb变为22mb!