构建使用cocoapods的可分发静态库

我正在构建一个静态库以分发给其他iOS开发人员,并且在配置链接器时遇到了一些问题,以允许静态库在其他应用程序中使用。 我已经使用这个指南来创建一个MyStaticLibrary.framework包,包含lib本身以及其他资源,比如图像。 这成功构建并使用cocoapods来获取所需的依赖关系(AFNetworking等)。 到现在为止还挺好。

但是,当我将MyStaticLibrary.framework导入到一个新的Xcode项目以测试使用库构建一个应用程序时,我收到了大量的链接器错误(架构i386的未定义符号,_OBJC_CLASS _ $ _ CLASSNAME),表明我在这里做了一些非常错误的事情。

所以我的问题是,如何构建MyStaticLibrary.framework以及来自cocoapods的依赖关系,以便我可以仅使用我的框架文件提供第三方,并允许它们访问公共标题中指定的所有功能?


你使用CocoaPods包含的任何库都不会默认编译到你的框架中 - 它们是外部依赖关系,它们不是你实际产品的一部分。 但是,根据他们的常见问题解答,他们支持一种模式,您可以下载窗格并且不会将它们链接到您的项目。 从他们的FAQ:

请注意,CocoaPods本身不需要使用工作区。 如果您更喜欢使用子项目,那么可以通过运行pod install --no-integrate来完成此操作,这将在您认为合适的情况下将集成纳入您的项目中。

要在编译的二进制文件中包含外部依赖项:

  • 对于代码:而不是使用cocoapods,检查你想要包含的存储库并将源文件复制到你的项目中 - 这将确保它们与你的其他代码一起编译

  • 对于静态库(即.a文件),在框架的Link Binary With Libraries构建阶段,确保包含所有您想要编译的内容。 您还应该确保关联的头文件包含在“ Copy Headers构建阶段中,并具有适当的可见性。

  • 注意以这种方式捆绑第三方库时,可能会与整合框架的项目发生冲突。 例如,假设您正在使用名为SOSomeView的库,并且您选择使用您的框架进行编译。 现在,如果您要集成的应用程序也包含SOSomeView ,那么您将得到一个编译时错误,该类声明了两次。 为了解决这个问题,你应该重新命名空间的任何你想硬编码到你的框架的外部依赖关系( XXSOSomeView该类重命名为XXSOSomeView )。

    如果你正在用你的框架编译静态库,我不知道如何解决这个问题。


    以下是如何解决名称空间问题的方法,如Note:iOS静态库+ CocoaPods和重复符号错误中所述

    链接地址: http://www.djcxy.com/p/22703.html

    上一篇: Building a distributable static library that uses cocoapods

    下一篇: How to check if a static library is built for 64