如果一个类在多个framework中重复出现了,tweak 中要如何区别去hook?

objc runtime 中有两个同名的 Class,直接 %hook class_name 可能会 mismatch。
现在的思路是在一些系统接口中找到 obj,然后通过 [obj class] 定位到使用的 class 再 hook。
有其他更直接的方式解决该问题吗?

这种同名的不会报错吗

不会的呢。Objc runtime 可以重复加载同名类,后者会覆盖掉已有的。

获取调用栈,判断是谁调用的。
还可以参考下面代码判断调用来源:

    - (BOOL)isCallFromXXX{
        NSArray *address = [NSThread callStackReturnAddresses];
        Dl_info info = {0};
        if(dladdr((void *)[address[2] longLongValue], &info) == 0){
          return NO;
        }
        
        NSString *path = [NSString stringWithUTF8String:info.dli_fname];
        if ([path hasPrefix:NSBundle.mainBundle.bundlePath]) {
            //    二进制来自 ipa 包内
            if ([path.lastPathComponent isEqualToString:@"xxx.dylib"]) {
                //    二进制是插件本身
                return YES;
            } else {
                //    二进制是主程序
                return NO;
            }
        } else {
            //    二进制是系统或者越狱插件
            return NO;
        }
    }