我用 Xcode 为 iOS 编译了一个静态库,去掉了符号。它在发布配置中编译。当我将静态库复制到另一个 iOS 项目中(我将它物理复制到另一个目录中)时,我仍然能够在单步执行代码时查看静态库的源代码。我在源窗口中单击Show in finder,它会将我指向磁盘上相应的源文件。
我在十六进制编辑器中打开了这个库,它确实包含了我机器上源文件的路径,以及一堆不应该公开的其他文本数据。
我是否错过了项目设置中的某些内容?如果这是预期行为,我如何确保客户不会看到符号、源文件名等?
我用 Xcode 为 iOS 编译了一个静态库,去掉了符号。它在发布配置中编译。当我将静态库复制到另一个 iOS 项目中(我将它物理复制到另一个目录中)时,我仍然能够在单步执行代码时查看静态库的源代码。我在源窗口中单击Show in finder,它会将我指向磁盘上相应的源文件。
我在十六进制编辑器中打开了这个库,它确实包含了我机器上源文件的路径,以及一堆不应该公开的其他文本数据。
我是否错过了项目设置中的某些内容?如果这是预期行为,我如何确保客户不会看到符号、源文件名等?
找到所需的编译器选项。
在 LLVM 代码生成中,将Generate debug symbols设置为No并将Symbols hidden by default 设置为Yes。出于某种原因,即使您告诉它删除符号,除非设置了这些符号,否则它也不会这样做。
您可以检查符号是否是条纹或不使用
nm 文件名
剥离不会自动发生,您需要设置 xcode 来剥离它们,并且有几个标志负责:
先决条件:“STRIP_INSTALLED_PRODUCT(条带链接产品)。”</p>
b) STRIP_INSTALLED_PRODUCT 仅当您将 DEPLOYMENT_POSTPROCESSING 设置为 YES 时,此选项才能在非 appstore 构建中工作。
有一种手动剥离符号的方法,只需调用
剥离 YOURINARYNAME
strip YOURBINARYNAME
正如@andrei-shender 所建议的那样是不够的。您需要执行以下操作:
strip -S YOURBINARYNAME
手动摆脱调试符号。当然,正确配置您的项目会更好,但如果您使用供应商脚本构建第 3 方库,则可能必须手动进行。如果去掉调试符号,Mapbox-native-gl 将从 550mb 变为 22mb!