如何在iOS上自动导入静态库使用的框架?

时间:2014-04-23 22:34:09

标签: ios objective-c frameworks static-libraries

我的公司为iOS应用程序创建了一个静态库。对于开发人员来说,一个令人烦恼的步骤是他们必须手动链接库所使用的所有必需框架,否则会导致编译器错误有些混乱。

我以前认为这是不可能的,但Chartboost公司向AdSupport和StoreKit声称automatically link against non-default frameworks。基于我在他们的示例应用程序中的测试(可从链接页面获得),到目前为止似乎是这种情况(即使在链接静态库的应用程序中禁用“启用模块”和“自动链接框架”)。 / p>

创建静态库时是否有某种方法可以启用此功能?我已经尝试在Xcode中启用模块和“自动链接框架”LLVM选项,但到目前为止还没有能够使它工作。

3 个答案:

答案 0 :(得分:3)

在进行函数或方法调用之前,有一段名为CBDynamicallyLoadedDependencies 的代码在相应的系统库上调用dlopen()

我的原始答案不正确。 dlopen()调用只是在x86代码中。在设备上,它有所不同,但我的ARM组件不够强大,无法弄明白。我只能说,有一段代码可以作为所需功能的蹦床,并引用系统库文件(如/System/Library/Frameworks/AdSupport.framework/AdSupport)。

但关键是,这不是一个简单的项目技巧,使其正常工作。涉及内部代码。

答案 1 :(得分:0)

他们可能会使用您提到的模块和@import而不是#import,这会使库自动链接。

供参考,请查看this问题。

答案 2 :(得分:-2)

这可能不是你想要的,但如果你还没有支持Cocoapods,我强烈建议你去看看:

http://cocoapods.org/

(编辑:Cocoapods基本上与Xcode相关联。其他IDE需要另一种解决方案。)

您可以向开发人员宣传Cocoapods作为使用库的“简单”方式,以及手动方法......以及手动方法。 ;)

我不知道任何行业对Cocoapods的抵制,所以我认为不支持它的缺点,它确实解决了你所谈论的问题(尽管以一种迂回的方式)。

此外,我发现Chartboost非常适合开发人员。你甚至可以联系他们并询问。