我正在做一个 iPhone 插件项目,我在其中构建了一个静态库,我们称之为 lib1.a,我提供给其他程序员。
当他们将 lib1.a 链接到他们的项目中时,他们也可能会链接 lib2.a,这是他们根据我给他们的头文件自己构建的。这个头文件只包含一个“钩子(Hook)”函数,它实例化一个 obj-c 对象。
这一切都很好,但我希望项目将 lib1.a 链接到 必须 链接 lib2.a。请记住,iOS 只支持静态库,我不想提供多个版本的 lib1.a。
Best Answer-推荐答案 strong>
谢谢,克里斯。我最终得到了类似的东西:可选的 lib2.a 包含一个工厂类,它创建一个对象,该对象实现了某个协议(protocol),该协议(protocol)公开了可选功能。这是标题:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol OptionalStuffDelegate
// Delegate methods here
@end
@protocol OptionalStuff
// Methods here
@end
@interface OptionalStuffFactory : NSObject {}
+ (id<OptionalStuff>)instantiateWithDelegateid <OptionalStuffDelegate>)delegate baseViewUIView *)baseView;
@end
要在 lib1.a 中实例化,我这样做:
Class optionalStuffFactoryClass = NSClassFromString(@"OptionalStuffFactory");
if (optionalStuffFactoryClass != nil)
{
optionalStuff = [optionalStuffFactoryClass performSelector: @selector(instantiateWithDelegate:baseView withObject: self withObject: glView];
}
lib2.a 实现了工厂类。没有对 OptionalStuffFactory 类的任何编译时引用这一事实确保了在 lib2.a 丢失的情况下没有 Unresolved 问题。
重要提示:您必须确保包含库的构建目标使用链接器标志 -ObjC,否则工厂类将被优化掉,因为没有对它的编译时引用。
关于xcode - 如何仅在链接时有条件地使用静态库,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/4051453/
|