9

Xcode 中为 iphone 应用程序去除符号的设置是什么?

我在 Xcode 中使用这些设置,但仍然使用二进制文件编辑器在可执行文件中看到类名及其方法。

部署:

1)部署后处理(选中)

2)在复制期间剥离调试符号(选中)

3) Strip Linked Product(勾选)

4)使用单独的条带(选中)

链接:

5)死代码剥离(选中)

GCC 4.0 - 代码生成

6)生成调试符号(未选中)

4

2 回答 2

8

Objective-C 类和方法信息不能被剥离——它是执行所必需的。如果你愿意,你能做的最好的就是想出某种混淆。

于 2009-04-08T18:31:57.990 回答
4

我做的。

我只检查了以下三个设置,其他设置无关紧要。

1)部署后处理(选中)

3)剥离链接产品(选中)

4)使用单独的条带(选中)

在此处输入图像描述

当然,您需要在模式编辑器中检查“分发”版本。 在此处输入图像描述

然后清洁!!!并建造。

我还确认 Xcode 调用了“strip”命令:Show log navigator, select Build .... release,在底部,我找到了进度描述:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip /Users/xxx/Library/Developer/Xcode/DerivedData/aaaaa-dytaamkvztdwfreoqteyeijwqdcu/Build/Products/Distribution-iphoneos/aaaaa.app/aaaaa

在此处输入图像描述

最后,我通过“nm”命令检查了最终产品文件的结果,

nm -a /Users/xxx/Library/Developer/Xcode/DerivedData/aaaaa-dytaamkvztdwfreoqteyeijwqdcu/Build/Products/Distribution-iphoneos/aaaaa.app/aaaaa

当前应用程序的所有功能名称都被真正剥离。比如下面的函数名:

000b0a00 t _pj_ioqueue_create

00092ae4 t __destroy_helper_block_200

00092af8 t ___68-[MyClass myMethod:param2]_block_invoke_21782

注意:objective-C 方法和属性名称字符串仍然生成到应用程序文件中,但这不是 OS 加载器的符号名称,它们只是 Objective-C 类的元数据。

于 2013-08-14T08:29:17.260 回答