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

4
我的公司为iOS应用程序提供静态库。对于开发人员来说,一个令人烦恼的步骤是手动链接所有必需的框架,而未能这样做会导致一些令人困惑的编译器错误。
我曾经认为这是不可能的,但是Chartboost公司声称可以像AdSupport和StoreKit那样自动链接非默认框架。根据我在其示例应用程序中的测试(可从链接页面获取),到目前为止似乎是这种情况(即使在链接静态库的应用程序中禁用“启用模块”和“自动链接框架”时)。
是否有一种方式可以在创建静态库时启用此功能?我尝试在Xcode中启用模块和“自动链接框架”LLVM选项,但到目前为止还没有成功。

这是否意味着非默认框架指的是第三方框架? - Saty
3个回答

3

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

我的原始答案不正确。在x86代码中才有dlopen()调用。在设备上,情况是不同的,但我的ARM汇编能力不足以搞清楚。我只能说有一段代码作为弹跳板引用了系统库文件(例如/System/Library/Frameworks/AdSupport.framework/AdSupport)来访问所需的函数。

但重点是这并不是一个简单的项目技巧,需要涉及内部代码。


顺便问一下,您用什么工具来检查库?otoolnm都没有显示出CBDynamicallyLoadedDependencies - MaxGabriel

0

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

如需参考,请查看this问题。


1
据我所知,当模块启用时,编译器会将 #import 转换为 @import,因此它们没有区别。 - Bryan Chen

-3

这可能不是您在寻找的内容,但如果您还没有支持Cocoapods,我强烈建议您好好看一下:

http://cocoapods.org/

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

您可以将Cocoapods作为向开发人员推广使用您的库的“简单”方法,而手动方法则是...嗯,手动方法。 ;)

我不知道有任何行业对Cocoapods的抵制,因此我认为支持它没有任何缺点,并且它确实解决了您所说的问题(虽然是迂回的方式)。

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


我们确实支持Cocoapods,并且我强烈推荐所有iOS开发者使用它。我不太确定我们的SDK在手动集成和Cocoapods之间的分裂是什么,但我们的许多开发人员正在使用像Unity3D这样的框架,所以我认为他们不熟悉(或无法使用)Cocoapods。否则,我认为这是一个非常可行的解决方案,所以我不认为它应该被投下反对票。 - MaxGabriel
关于第三方框架(Unity等)的观点很好。希望未来的搜索者会发现这个答案有帮助...并给它点赞。:D - toblerpwn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接