MangoFix 是一个 iOS/macOS 平台的动态修复框架,允许开发者通过下发补丁来修复线上应用的 bug,而无需重新发布 App 版本。
基本原理
MangoFix的核心在于其动态库加载机制和符号解析工具【symdl】。与传统的热修复方案不同,MangoFix不依赖于dlsym函数,而是使用symdl来实现动态符号绑定。通过这个小工具,MangoFix能在运行时找到并替换有问题的代码块,而不需要系统级别的权限。此外,MangoFix还支持对Objective-C和Swift代码的热修复,这大大增加了它的适用范围。
基本使用流程
1. 集成 MangoFix
通过 CocoaPods 集成:
pod 'MangoFix'
2. 初始化 MangoFix
在 App 启动时初始化:
#import <MangoFix/MangoFix.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化 MangoFix
[MangoFix startWithAppId:@"your_app_id" aesKey:@"your_aes_key"];
// 检查并执行补丁
[self checkAndExecutePatch];
return YES;
}
3. 编写补丁文件
MangoFix 使用自定义的脚本语言 (.mg 文件) 来编写补丁。例如:
// fixLoginBug.mg
@import UIKit;
// 替换有问题的类方法
@implementation LoginViewController
- (void)loginButtonClicked:(id)sender {
NSString *username = self.usernameTextField.text;
NSString *password = self.passwordTextField.text;
// 修复逻辑
if (username.length > 0 && password.length >= 6) {
[self doLoginWithUsername:username password:password];
} else {
[self showAlert:@"请输入有效的用户名和密码(至少6位)"];
}
}
@end
4. 下发补丁
将补丁文件上传到服务器,App 定期检查并下载执行:
- (void)checkAndExecutePatch {
// 从服务器获取补丁URL
NSURL *patchURL = [NSURL URLWithString:@"https://your-server.com/patches/fixLoginBug.mg"];
// 下载并执行补丁
[MangoFix evaluateRemoteMangoScriptWithURL:patchURL completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"执行补丁失败: %@", error);
} else {
NSLog(@"补丁执行成功");
}
}];
}
高级功能
加密补丁
MangoFix 支持 AES 加密补丁文件,保护补丁内容:
# 使用命令行工具加密
mango encrypt fixLoginBug.mg -k your_aes_key -o fixLoginBug_encrypted.mg
补丁管理
建议实现补丁版本管理,避免重复执行补丁:
- (void)executePatchIfNeeded:(NSString *)patchVersion {
NSString *executedVersion = [[NSUserDefaults standardUserDefaults] stringForKey:@"lastPatchVersion"];
if (![executedVersion isEqualToString:patchVersion]) {
// 下载并执行新补丁
// ...
// 更新本地记录的补丁版本
[[NSUserDefaults standardUserDefaults] setObject:patchVersion forKey:@"lastPatchVersion"];
}
}
注意事项、
- 补丁功能有限,无法修改已有类的属性、添加新类等
- 建议在测试环境充分验证补丁后再发布到生产环境
- App Store 审核不允许使用热修复绕过审核,仅用于紧急 bug 修复
- 补丁文件应加密传输,防止中间人攻击
MangoFix 为线上问题提供了快速修复方案,但应谨慎使用,避免滥用。









网友评论