xcode - 如何仅在链接时有条件地使用静态库

标签 xcode static ios hook

我正在做一个 iPhone 插件项目,我在其中构建了一个静态库,我们称之为 lib1.a,我将其提供给其他程序员。

当他们将 lib1.a 链接到他们的项目中时,他们也可能会链接 lib2.a,这是他们根据我给他们的头​​文件自行构建的。该 header 仅包含一个实例化 obj-c 对象的“hook”函数。

这一切都工作正常,但我希望链接 lib1.a 的项目不必必须链接 lib2.a。请记住,iOS 仅支持静态库,我不想提供 lib1.a 的多个版本。

最佳答案

谢谢,克里斯。我最终得到了类似的结果:可选的 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>)instantiateWithDelegate:(id <OptionalStuffDelegate>)delegate baseView:(UIView *)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/

相关文章:

xcode - 如何将构建的项目发送给其他人,以便他们可以使用其开发者帐户将其提交到App Store?

xcode - MacRuby/PyObjC/RubyMotion的代码完成

Xcode–UITextView 文本被截短

c++ - "static"关键字与变量、函数和类对象等有什么用?

ios - UIIMagePickerController 在 iPad ios 6.0 上关闭时崩溃

ios - Swift setter 和 getter 问题

ios swift - 从多个选项卡实例化相同的 VC

xcode - 我可以从 Xcode 检查核心数据模型吗?

c++ - 静态变量未初始化

scripting - Lua脚本实现