Skip to content

Commit bf5ec6b

Browse files
committed
make subspec
1 parent 5019dd0 commit bf5ec6b

File tree

4 files changed

+27
-22
lines changed

4 files changed

+27
-22
lines changed

SDHook/SDMRCTool.m

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,6 @@
1010
#include <objc/runtime.h>
1111
#import "SDMagicHookUtils.h"
1212

13-
extern Class _Nullable (*sd_original_setclass) (id _Nullable obj, Class _Nonnull cls);
14-
15-
Class _Nullable sd_magichook_set_calss(id _Nullable obj, Class _Nonnull cls) {
16-
17-
if (sd_ifClassNameHasPrefix(cls, "NSKVONotifying_")) {
18-
Class originalClass = object_getClass(obj);
19-
if (sd_ifClassIsSDMagicClass(originalClass)) {
20-
return originalClass;
21-
} else {
22-
return sd_original_setclass(obj, cls);
23-
}
24-
} else {
25-
return sd_original_setclass(obj, cls);
26-
}
27-
}
28-
2913
@implementation SDMRCTool
3014

3115
+ (void)object_copyIndexedIvars:(id)obj toCopy:(id)toCopy {

SDHook/SDMagicHook.m

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
#import "SDMagicHookUtils.h"
2121

2222
BOOL SDMagicHookDebugFlag = true;
23-
Class _Nullable (*sd_original_setclass) (id _Nullable obj, Class _Nonnull cls);
24-
extern Class _Nullable sd_magichook_set_calss(id _Nullable obj, Class _Nonnull cls);
2523

2624
static NSString *const currentCallIndexDictKey = @"SDMagicHook-currentCallIndexDictKey";
2725
static NSString *const originalCallFlagDictKey = @"SDMagicHook-originalCallFlagDictKey";
@@ -143,10 +141,7 @@ - (BOOL)isSDMagicHookClass:(Class)cls {
143141
- (NSString *)hookMethod:(SEL)sel strId:(NSString *)strId imp:(IMP)imp {
144142
pthread_rwlock_wrlock(&[self getManagerLock]->_rw_lock3);
145143

146-
static dispatch_once_t onceToken;
147-
dispatch_once(&onceToken, ^{
148-
rebind_symbols((struct rebinding[1]){{"object_setClass", sd_magichook_set_calss, (void *)&sd_original_setclass}}, 1);
149-
});
144+
[SDMagicHookUtils hookSetClassFuncJustOnce];
150145

151146
SDNewClassManager *mgr = [self getClassManager];
152147
if (!mgr.hasSetupKVO) {

SDHook/SDMagicHookUtils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ NSMutableDictionary *threadStoredDict(const NSString *const key, NSString *class
2929

3030
@interface SDMagicHookUtils : NSObject
3131

32+
+ (void)hookSetClassFuncJustOnce;
33+
3234
@end
3335

3436
NS_ASSUME_NONNULL_END

SDHook/SDMagicHookUtils.m

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,23 @@
88
#import "SDMagicHookUtils.h"
99
#import <pthread.h>
1010
#import <objc/runtime.h>
11+
#import <fishhook/fishhook.h>
12+
13+
Class _Nullable (*sd_original_setclass) (id _Nullable obj, Class _Nonnull cls);
14+
15+
Class _Nullable sd_magichook_set_calss(id _Nullable obj, Class _Nonnull cls) {
16+
17+
if (sd_ifClassNameHasPrefix(cls, "NSKVONotifying_")) {
18+
Class originalClass = object_getClass(obj);
19+
if (sd_ifClassIsSDMagicClass(originalClass)) {
20+
return originalClass;
21+
} else {
22+
return sd_original_setclass(obj, cls);
23+
}
24+
} else {
25+
return sd_original_setclass(obj, cls);
26+
}
27+
}
1128

1229
bool sd_ifClassNameHasPrefix(Class cls, const char *prefix) {
1330
const char *clsCStrName = class_getName(cls);
@@ -63,4 +80,11 @@ SEL createSelB(SEL sel, int index, NSString *flag) {
6380

6481
@implementation SDMagicHookUtils
6582

83+
+ (void)hookSetClassFuncJustOnce {
84+
static dispatch_once_t onceToken;
85+
dispatch_once(&onceToken, ^{
86+
rebind_symbols((struct rebinding[1]){{"object_setClass", sd_magichook_set_calss, (void *)&sd_original_setclass}}, 1);
87+
});
88+
}
89+
6690
@end

0 commit comments

Comments
 (0)