文档Objective-C 混淆

Objective-C 混淆

预计阅读时间:15 分钟

概述

CodeFog 对 Objective-C 项目提供全面的混淆支持,包括类名、方法名、属性名、协议名等。 本文档介绍 Objective-C 项目的最佳混淆实践。

支持的混淆类型

类名 (@interface)
分类名 (Category)
协议名 (@protocol)
方法名
属性名 (@property)
实例变量
局部变量
参数名

混淆效果示例

头文件 (.h)

混淆前
@interface UserManager : NSObject

@property (nonatomic, strong) NSString *userName;
@property (nonatomic, assign) BOOL isLoggedIn;

- (void)loginWithUsername:(NSString *)username
                 password:(NSString *)password;
- (void)logout;
- (BOOL)checkPermission:(NSString *)permission;

@end
混淆后
@interface ZFJObj_8xK9m : NSObject

@property (nonatomic, strong) NSString *zfj_4nM2k;
@property (nonatomic, assign) BOOL zfj_7pX3j;

- (void)zfj_9kL4n:(NSString *)zfj_2mN8x
         zfj_5jK9p:(NSString *)zfj_3xM7k;
- (void)zfj_6nP2m;
- (BOOL)zfj_8kX4n:(NSString *)zfj_9pM3k;

@end

最佳实践

1. 备份项目

混淆前使用 Git 提交或手动备份项目

2. 配置第三方库白名单

将 CocoaPods 引入的库前缀加入白名单:AF、SD、MJ、YY 等

3. 排除 JSON 模型类

使用 JSONModel、YYModel、MJExtension 的模型类需要加入白名单

4. 检查 Runtime 调用

NSClassFromString、NSSelectorFromString 引用的类和方法需要排除

5. 完整测试

混淆后在真机上完整测试所有功能

注意事项

  • Storyboard/XIB 中的类名引用会自动更新
  • plist 文件中的类名引用会自动更新
  • 使用 KVC/KVO 的属性需要特别注意
  • Method Swizzling 相关方法需要加入白名单