【问题标题】:Customize static libraries自定义静态库
【发布时间】:2012-09-12 12:34:48
【问题描述】:

我创建了一个 XCode 项目,其中包含 2 个目标和我在两个目标中实现的静态库。我的静态库的某些类需要根据我编译的目标略有不同。

我不知道如何正确地做到这一点。 有什么想法吗?

谢谢

【问题讨论】:

  • 您不能在编译时使用静态库来执行此操作,因为它就是静态库。它不关心您在使用它的产品中所针对的平台。时期。如果您确切地告诉我们您需要做什么,我们可能会想出一个运行时解决方案。
  • 将静态库分离到另一个 Xcode 项目中,在这个新的 Xcode 项目中创建两个目标并根据这两个目标更改行为。并在您的原始项目中设置不同的目标依赖项和链接。以 SDWebImage (github.com/rs/SDWebImage) 为例 - 有两个目标 SDWebImage 和 SDWebImage ARC,这些目标生成两个不同的静态库(libSDWebImage.a 和 libSDWebImageARC.a)来链接。
  • 我喜欢在我的静态库中创建多个目标的想法 :-)。谢谢@RobertVojta
  • 您可以将目标之间需要不同的库部分分离到不同的库中,并构建两个版本的新库。

标签: objective-c static-libraries xcode4.4


【解决方案1】:

他们需要在哪些方面有所不同? (我的答案基于一个猜测,它可以通过在类中设置某种状态变量或通过自定义 init 方法来处理)

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

查看此问题和答案以获取更多信息:iphone: get User Defined variable in Target's setting by code?

基本上你可以有一个这样的字符串设置:“标准”,你可以从

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]];

这使您可以在类中具有不同的行为,并使静态库与您正在使用的项目分开并独立。

我希望这对您有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多