我正在开发一个objective-c 库项目('MyLib')。假设这个库随后包含在“TestApp”中。现在,“TestApp”还包括另一个名为“Xlib”的库。这个 Xlib 有一个类 C1,它有一个方法 m1。
//C1.h is part of Xlib
@interface C1
- (void) m1;
@end
现在,每次调用 m1 时,MyLib 都应该执行一段代码。我的方法是,如果我在 MyLib 中创建一个类别:
@interface C1 (mycat)
@end
@implementation C1 (mycat)
+ (void) load{
//code to swizzle method in class C1 from: @selector(m1) to: @selector(mycat_m1)
}
- (void) mycat_m1{
/*
insert code that I want to execute
*/
[self mycat_m1]; //calling the original m1 implementation
}
@end
问题: MyLib 没有 C1 类。所以我无法构建 MyLib,因为我试图在一个不存在的类上创建一个类别。因此,编译错误。
所以,然后我尝试将上面的代码包装在里面:
#if defined(__has_include)
#if __has_include("C1.h")
/* above category code */
#endif
#endif
MyLib 现在可以正常编译和构建,但由于 MyLib 中不存在 C1.h,因此 mylib.framework 不会有此类别。
现在,我有两个选择: 1. 动态创建这个类别,这样一旦库被包含在应用程序中,然后当应用程序运行时,将根据TestApp 是否包含Xlib 来创建这个类别。2.从编译源中删除具有此类别代码的文件,然后以某种方式将该文件在我的框架中公开给TestApp。
我无法解决任何一个选项。关于现有选项的任何想法?或任何新的选择?
编辑:添加了详细信息,因为问题不是很清楚