-
Notifications
You must be signed in to change notification settings - Fork 109
配置文件详解 新
模版配置文件位于: DiffHelper/User/UserConfig/Demo-CONFIG.json
建议保留模版配置文件,复制一份模版配置文件另行自定义配置
配置文件需要是-CONFIG.json 结尾(使用过程中可以自行选择配置文件)
例如新命名为:projectName-CONFIG.json
开启设置成 true 关闭设置成 false
新配置文件无该配置,默认开启该功能
新配置文件无该配置,默认开启该功能
新配置文件无该配置,默认开启该功能
如果是纯 Swift 的项目开启该开关
是否混淆 OC 字符串(类似@"xxx"这种)
例如网络请求方法:
[[DemoManager defaultManager] getAccountSuccess:^(NSDictionary *repsonse) {
NSString *name = [repsonse objectForKey:@"name"];
NSString *pwd = [repsonse objectForKey:@"password"];
} failure:nil];
开启则会处理 @"name",@"password"
这个开关不会影响下面这种情况
开启或者关闭,demo 这个图片都会被处理成其他,所有资源文件适用这种情况,一切为了混淆的更多
UIImage *img = [UIImage imageNamed:@"demo"];
项目中需要排除的文件夹路径
配置在该字段的文件夹路径,其中所有文件名和文件夹名完全不会被修改,其中的资源 md5 会被处理,创建时间和修改时间会同步处理,Pods 默认被忽略,不需要配置在这
下面这些情况需要将文件夹设置为排除:
1.项目中 C/C++开源库所在的文件夹名
例如:
/Users/xxx/Desktop/iOSTest/OpenCV
则配置为:
ExcludeFolderPathList : ["/Users/xxx/Desktop/iOSTest/OpenCV"]
2.第三方 SDK 以及其 bundle 文件所在的文件夹路径
例如:
/Users/xxx/Desktop/iOSTest/iOSTest/Bugly.framwork
/Users/xxx/Desktop/iOSTest/iOSTest/Bugly.bundle
/Users/xxx/Desktop/iOSTest/iOSTest/Bugly/Buglybridge.a
/Users/xxx/Desktop/iOSTest/iOSTest/Bugly/Header/xxxx.h
则配置为:
ExcludeFolderList : ["/Users/xxx/Desktop/iOSTest/iOSTest/Bugly.framwork","/Users/xxx/Desktop/iOSTest/iOSTest/Bugly.bundle","/Users/xxx/Desktop/iOSTest/iOSTest/Bugly"]
3.不想混淆的文件夹(并且该文件夹内的文件只被外部引用,而没有引用外部的文件)
例如:
/Users/xxx/Desktop/iOSTest/iOSNetworking/xxx.h
/Users/xxx/Desktop/iOSTest/iOSNetworking/xxx.m
则配置为:
ExcludeFolderPathList : ["/Users/xxx/Desktop/iOSNetworking"]
设置忽略的类(不带后缀)
该类自身不变,引用的类和调用的外部方法同步混淆
例如:
/Users/xxx/Desktop/iOSTest/AppDelegate.h
/Users/xxx/Desktop/iOSTest/AppDelegate.m
/Users/xxx/Desktop/iOSTest/ViewController.h
/Users/xxx/Desktop/iOSTest/ViewController.m
/Users/xxx/Desktop/iOSTest/XXX.h
/Users/xxx/Desktop/iOSTest/XXX.m
假设 AppDelegate.h引用了XXX.h
配置:
IgnoreClassList : ["AppDelegate","ViewController"]
AppDelegate.h、AppDelegate.m 中自身的方法和属性等符号都不会被混淆 AppDelegate.h、AppDelegate.m 中引用的类和调用的外部方法等会被混淆 如果 XXX 被混淆成了 YYY,AppDelegate.h 中引用的 XXX.h 会同步修改为 YYY.h
设置忽略的文件夹路径,对于 IgnoreClassList 的补充(一个个类名配置太麻烦)
例如:
/Users/xxx/Desktop/iOSTest/Net.h
/Users/xxx/Desktop/iOSTest/Net.m
/Users/xxx/Desktop/iOSTest/Hello/Name.h
/Users/xxx/Desktop/iOSTest/Hello/Name.m
/Users/xxx/Desktop/iOSTest/Hello/Util/User.h
/Users/xxx/Desktop/iOSTest/Hello/Util/User.m
配置:
IgnoreFolderPathList : ["/Users/xxx/Desktop/iOSTest/Hello"]
表示 Hello 文件夹下一切(包括了 Util 下的 User)文件不会被混淆 如果 Name 类中引用了 Net 类,Net 类的修改在 Name 类中会同步修改 如果 User 类中引用了 Net 类,Net 类的修改在 Name 类中会同步修改
ExcludeFolderPathList:
配置在这的文件夹完全被排除(混淆和它们无关了)
混淆不了的文件夹(C/C++库)
不能混淆的文件夹(第三方SDK以及bundle)
不想混淆而又没有调用过其他的模块的文件夹
IgnoreFolderPathList:
配置在这的文件夹自身完全被忽略,引用的外部文件发生了混淆,这里会同步修改
不想混淆这个文件夹,但是这个文件夹又引用了别的模块(除非把引用的模块一块排除)
设置不需要混淆属性的类(类名,不带后缀)
属性不会被混淆,类名、方法等其他都会混淆,主要针对和网络交互的model类
设置不需要混淆属性的类的文件夹路径
对于 IgnoreModelList 的补充
该配置下的文件夹中所有的类属性不会混淆
每个类插入代码的概率(0~1.0)
插入代码的标志(插入代码后的注释部分)
每个类插入属性、静态变量、宏的最小数量
每个类插入属性、静态变量、宏的最大数量
开启插入方法(暂未开放,请不要修改)
类名前缀映射设置
如果项目中的资源文件、类文件、文件夹有特殊的前缀,可以通过这里移除或者替换
如果没有需要处理的前缀,配置如下
ClassNamePrefixMap: {}
举个 🌰:
现有类名: AFXXX,AFYYY
移除 AF 前缀
ClassNamePrefixMap:{
"AF": ""
}
修改 AF 前缀为 SD
ClassNamePrefixMap:{
"AF": "SD"
}
修改 AF 前缀为 SD 或者 SDD
ClassNamePrefixMap:{
"AF": ["SD","SDD"]
}
可按照格式无限添加新的键值对
属性前缀映射设置
如果项目中有属性包含特殊的前缀,可以通过这里移除或者替换
规则同ClassNamePrefixMap
方法名前缀映射设置
如果项目中有方法包含特殊的前缀,可以通过这里移除或者替换
规则同ClassNamePrefixMap
枚举前缀映射设置
如果项目中有枚举包含特殊的前缀,可以通过这里移除或者替换
规则同ClassNamePrefixMap
当项目过大时,可通过修改这个值去加快混淆速度,4000 比 6000 快
当项目存在很多不规范的单词的情况下,开启避免过多的手动输入
混淆后的符号最大单词数量(避免混淆结果过长)
例如方法:
AFURLSessionDidReceiveAuthenticationChallengeBlock
混淆前有七个单词
按照下面的配置则混淆后不会超过 5 个单词
SymbolMaxCount: 5
如果方法或者类名中中间或者尾部包含特殊的单词可配置在这里处理掉
需要移除的单词列表,不区分大小写
OC 字符串被拆分的概率(0 到 1 之间的小数) 大于 0 的情况下,http(s)开头的字符串一定会被拆分
不拆分,http(s)开头的链接也不会拆分
SplitOCStringPercent: 0
字符串有 50%的概率被拆分
SplitOCStringPercent: 0.5
字符串 100%被拆分
SplitOCStringPercent: 1
效果演示:
例如:@"hello" 结果可能为:
[NSString stringWithFormat:@"%@%@",@"he",@"llo"]
或者
[NSString stringWithFormat:@"%@%@%@",@"he",@"l",@"lo"]
结果会是 hello 被拆分的所有情况排列组合中随机的一种,每一段至少一个字母
修改项目中所有文件的创建时间和修改时间
开启则设置成 true,需要设置日期区间,开始日期和结束日期需要相差一天以上,修改后文件的时间会随机分布在区间内日期的工作时间中(09:00-21:00),同一个文件的修改时间一定晚于创建时间
ModifyProjectTime: true
关闭则设置成 false,不需要设置 ProjectStartDate,ProjectEndDate
ModifyProjectTime: false
项目中文件的起始日期
修改后文件的创建时间、修改时间一定晚于该日期
例如:
ProjectStartDate: "20200101"
项目中文件的结束日期
修改后文件的创建时间、修改时间一定早于该日期
例如:
ProjectStartDate: "20200601"