Objective-c方法的混淆在DEBUG中起作用,但在RELEASE中崩溃

And*_*obs 9 configuration frameworks build objective-c ios

我做了一个xcode项目,我做了一些安全工作,他们让我混淆方法名称

像这样

#define specialMethod a9328238
+(void) specialMethod
{
   // do security stuff
}
Run Code Online (Sandbox Code Playgroud)

我从项目(项目A)创建了一个.framework库,并将其包含在另一个项目(项目B)中.

但是当我使用Release构建配置运行(项目B)时,它总是像这样崩溃.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SecurityClass a9328238]: unrecognized selector sent to class 0x337cc4'
Run Code Online (Sandbox Code Playgroud)

因此它在尝试访问该方法时崩溃.

但是当我使用Debug构建配置运行(项目B)时,它运行顺畅

(我将所有构建配置设置保留为默认值)

Lau*_*ble 7

您在哪里#define进行混淆?它是在头文件(.h)或.m框架的实现文件()中吗?

为使混淆有效,必须将其置于实现和调用者都包含的文件中.

您还可以通过检查预处理文件来检查预处理是否正常.选择实施文件并转到菜单Product > Generate Output > Generate Preprocessed File(您可以选择屏幕底部的配置).