Skip to content

如何避免某些对象或成员被混淆

当前教程是为了让你方便的排除某些iOS程序的Runtime对象被混淆引起的运行时问题,分为按文件级别和按语言级别来,文件级别影响的只有当右键查看目标文件日志中可见,才会有效果.

一. 按文件级别排除

一般来说假如你对这工程不熟悉,就按文件级别排除就行了,工具一般有3个标识.C(混淆), R(改名)、I(膨胀),我们只需要找到对应的文件,右键,就可以控制这些标识

或者到配置里面添加

二. 排除对象-语言(混淆配置)

很多时候我们希望按语言的习惯来排除对象,更简单避免一些运行时问题,就需要了解几个常用的设置,在混淆配置里面就能找到

1. ObjC Class / Swift Class (生效对象只针对单一名称,不影响内部属性和方法)

设置到这个里面的名字,不管是swift还是objc对象名,将不会被排除混淆,比如说 AppController 被设置后,就不会被改名,支持通配符 **

2. ObjC Property / Swift Property (生效对象只针对单一名称,不影响内部属性和方法)

设置到这个里面的名字,不管是swift还是objc属性名,都不会被改名,支持通配符 **

3. ObjC Ivar / Swift Ivar(生效对象只针对单一名称,不影响内部属性和方法)

设置到这个里面的名字,不管是swift还是objc内部变量,都不会被改名,支持通配符 **

4. All Member In ObjC Class/Protocol/Category Swift Class/Protocol (排除内部所有成员的混淆来解决运行时问题,通过名称)

这个分组里面的,可以直接通过通配符来用名字排除,比如说如果Json用到的Model对象都是有固定前缀或者后缀,写作**Model,所有匹配这个名字的类对象的成员属性和方法都会被排除,不会被混淆

5. All Member By Extend ObjC Class/Protocol (排除内部所有成员的混淆来解决运行时问题,通过继承链)

这个分组里面的表示如果某个类父类链条里面包含这个类,就会标记为需要排除内部属性和方法被混淆,或者直接实现了某个协议的类,也会被标记出来,不会被混淆

6. All Memeber By Call (排除内部所有成员的混淆来解决运行时问题,通过源码分析调用)<已废弃>

不推荐使用,不是所有项目,都能正常起效