文档白名单配置

白名单配置

预计阅读时间:5 分钟

什么是白名单?

白名单用于指定不需要混淆的类、方法、属性或前缀。合理配置白名单可以避免混淆导致的运行时问题, 同时保持代码的兼容性。

白名单类型

类名白名单

指定不混淆的类名

"classes": ["AppDelegate", "SceneDelegate", "MyModel"]

方法白名单

指定不混淆的方法名

"methods": ["handleNotification:", "performSelector:"]

前缀白名单

指定不混淆的类名前缀(通常用于第三方库)

"prefixes": ["AF", "SD", "MJ", "YY", "Masonry"]

正则表达式

使用正则表达式匹配

"patterns": [".*Model$", ".*ViewModel$", ".*Manager$"]

配置文件示例

{
  "whitelist": {
    "classes": [
      "AppDelegate",
      "SceneDelegate",
      "UserModel",
      "OrderModel"
    ],
    "methods": [
      "handleNotification:",
      "performSelector:",
      "setValue:forKey:",
      "valueForKey:"
    ],
    "prefixes": [
      "AF",      // AFNetworking
      "SD",      // SDWebImage
      "MJ",      // MJRefresh
      "YY",      // YYKit
      "Masonry", // Masonry
      "RX",      // RxSwift
      "Alamofire"
    ],
    "patterns": [
      ".*Model$",
      ".*Entity$",
      ".*DTO$"
    ]
  }
}

常见需要加入白名单的场景

使用反射的类

NSClassFromString()、NSSelectorFromString() 引用的类和方法

JSON 序列化模型

Codable/Decodable 模型类,属性名需要与 JSON 键匹配

KVO 观察

使用 KVO 观察的属性及其 getter/setter

第三方库

CocoaPods/SPM 引入的第三方库类

运行时方法交换

使用 Method Swizzling 的方法