文档Swift 混淆
Swift 混淆
预计阅读时间:15 分钟
概述
CodeFog 支持 Swift 项目的混淆,包括类、结构体、枚举、协议、方法和属性。 Swift 项目混淆需要注意一些特殊情况,本文档将详细介绍。
支持的混淆类型
class(类)
struct(结构体)
enum(枚举)
protocol(协议)
func(方法)
var/let(属性)
extension(扩展)
参数名
混淆效果示例
混淆前
class PaymentService {
var balance: Double = 0
private var transactionHistory: [String] = []
func processPayment(amount: Double,
currency: String) -> Bool {
guard amount > 0 else { return false }
balance -= amount
return true
}
func getTransactionCount() -> Int {
return transactionHistory.count
}
}混淆后
class ZFJObj_3nM7k {
var zfj_8kX4m: Double = 0
private var zfj_9pN2j: [String] = []
func zfj_5pN9j(zfj_2mK7x: Double,
zfj_6nP3k: String) -> Bool {
guard zfj_2mK7x > 0 else { return false }
zfj_8kX4m -= zfj_2mK7x
return true
}
func zfj_4kM8n() -> Int {
return zfj_9pN2j.count
}
}SwiftUI 项目注意事项
View 协议实现
body 属性会自动排除,无需手动配置
@State/@Binding 属性
带有属性包装器的属性会正常混淆
@Published 属性
ObservableObject 中的 @Published 属性会正常混淆
Preview Provider
PreviewProvider 相关代码会自动排除
需要加入白名单的情况
Codable 模型
使用 Codable/Decodable 的模型类,属性名需要与 JSON 键匹配
@objc 暴露的方法
使用 @objc 标记暴露给 OC 的方法需要注意
Mirror 反射
使用 Mirror 进行反射的类需要排除
UserDefaults 键名
使用字符串作为 UserDefaults 键的情况
最佳实践
- 1.使用 CodingKeys 枚举来固定 JSON 键名
- 2.将 API 模型类统一放在一个目录,方便配置白名单
- 3.混淆后运行完整的单元测试
- 4.使用 SPM 管理的包会自动排除