2012-09-12 62 views
4

我已经创建了一个包含2个目标,而我在这两个目标的实现静态库的XCode谟。根据我编译的目标,我的静态库中的一些类需要略有不同。自定义静态库

我没有任何想法如何正确地做到这一点。 有什么想法?

谢谢

+0

你不能用静态库这样做在编译的时候,因为它只是 - 一个静态库。它并不关心你使用的产品的目标平台。期。如果你确切地告诉我们你需要做什么,我们可能会想出一个运行时解决方案。 –

+1

将静态库分隔到另一个Xcode项目中,在这个新的Xcode项目中创建两个目标并根据这两个目标更改行为。并在您的原始项目中设置不同的目标依赖关系和链接。以SDWebImage(https://github.com/rs/SDWebImage)为例 - 有两个目标SDWebImage和SDWebImage ARC,这些目标生成两个不同的静态库(libSDWebImage.a和libSDWebImageARC.a)进行链接。 – robertvojta

+0

我喜欢在静态库中创建多个目标的想法:-)。谢谢@RobertVojta – Niko

回答

0

以什么方式他们需要有所不同? (我根据我的回答猜测它可以通过在类中设置某种状态变量或通过自定义初始化方法来处理)

我建议您创建某种形式的自定义init方法或实例您为需要具有不同行为的类设置的变量。然后,您可以在每个目标的生成设置中使用用户定义的设置。

检查这个问题&答案的详细资料:iphone: get User Defined variable in Target's setting by code?

Basicly你可以有这将是像一个字符串设置,以便:“标准”,就从

FooBarClass.h 

typedef enum { FooBarSettingNormal, FooBarSettingFast } FooBarSetting; 

-(id)initWithSetting:(FooBarSetting)setting; 

然后把它拿来从代码中获取buildsetting中的变量集并初始化FooBar对象,如下所示:

SomeViewController.m 

NSNumber* fooBarSetting = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"FooBarSetting"]; 
FooBar * baz = [[FooBar alloc] initWithSetting:[fooBarSetting intValue]]; 

此启用就是你要在你的类不同的行为,并保持静态库分开,并从您正在使用的项目独立。

我希望你觉得这个有点用:)