MOAspects 是一个针对 iOS 的 AOP 库。
针对 Objective-C 语言的稳定版本。
支持 Swift 语言的开发版本。
pod 'MOAspects', '~> 1.0.0'
pod 'MOAspects'
#pragma mark - Hook instance method
+ (BOOL)hookInstanceMethodForClass:(Class)clazz
selector:(SEL)selector
aspectsPosition:(MOAspectsPosition)aspectsPosition
usingBlock:(id)block;
+ (BOOL)hookInstanceMethodForClass:(Class)clazz
selector:(SEL)selector
aspectsPosition:(MOAspectsPosition)aspectsPosition
hookRange:(MOAspectsHookRange)hookRange
usingBlock:(id)block;
#pragma mark - Hook class method
+ (BOOL)hookClassMethodForClass:(Class)clazz
selector:(SEL)selector
aspectsPosition:(MOAspectsPosition)aspectsPosition
usingBlock:(id)block;
+ (BOOL)hookClassMethodForClass:(Class)clazz
selector:(SEL)selector
aspectsPosition:(MOAspectsPosition)aspectsPosition
hookRange:(MOAspectsHookRange)hookRange
usingBlock:(id)block;
[MOAspects hookClassMethodForClass:[NSNumber class]
selector:@selector(numberWithInt:)
aspectsPosition:MOAspectsPositionBefore
usingBlock:^(id class, int intVar){
NSLog(@"hooked %d number!", intVar);
}];
[NSNumber numberWithInt:10]; // -> hooked 10 number!
[MOAspects hookInstanceMethodForClass:[NSString class]
selector:@selector(length)
aspectsPosition:MOAspectsPositionBefore
usingBlock:^(NSString *string){
NSLog(@"hooked %@!", string);
}];
[@"abcde" length]; // -> hooked abcde!
MOAspects.hookClassMethodForClass(UIScreen.self, selector:"mainScreen", position:.Before) {
NSLog("hooked screen!")
}
UIScreen.mainScreen() // -> hooked screen!
MOAspects.hookInstanceMethodForClass(ViewController.self, selector:"viewDidLoad", position:.After) {
NSLog("view did loaded!")
}
// -> view did loaded!
32bit | 64bit | 可以 Hook 方法类型 |
类 层次 Hook |
Hook 返回值 |
自然 Swift 方法 |
---|---|---|---|---|---|
○ | ○ | 实例 / 类 | 支持 | 不支持 | 不支持 |