Xcode 中为 iphone 应用程序去除符号的设置是什么?
我在 Xcode 中使用这些设置,但仍然使用二进制文件编辑器在可执行文件中看到类名及其方法。
部署:
1)部署后处理(选中)
2)在复制期间剥离调试符号(选中)
3) Strip Linked Product(勾选)
4)使用单独的条带(选中)
链接:
5)死代码剥离(选中)
GCC 4.0 - 代码生成
6)生成调试符号(未选中)
Xcode 中为 iphone 应用程序去除符号的设置是什么?
我在 Xcode 中使用这些设置,但仍然使用二进制文件编辑器在可执行文件中看到类名及其方法。
部署:
1)部署后处理(选中)
2)在复制期间剥离调试符号(选中)
3) Strip Linked Product(勾选)
4)使用单独的条带(选中)
链接:
5)死代码剥离(选中)
GCC 4.0 - 代码生成
6)生成调试符号(未选中)
Objective-C 类和方法信息不能被剥离——它是执行所必需的。如果你愿意,你能做的最好的就是想出某种混淆。
我做的。
我只检查了以下三个设置,其他设置无关紧要。
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 类的元数据。