将第三方框架添加到iOS应用程序中的Xcode子项目或主项目

时间:2014-05-29 17:29:25

标签: ios xcode ios-frameworks subproject

我的Xcode项目“MyMainApp”有一个名为“MyLib”的静态库类型Xcode子项目。现在我需要在我的iOS应用程序中使用一些第三方iOS框架。我想仅针对MyLib添加/链接它们而不是针对MyMainApp,因此我可以使MyLib可重用且自包含,以便在我的其他iOS应用程序中使用它。 MyMainApp中的一些视图控制器使用视图控制器之一,它是MyLib的一部分。 MyLib中的此视图控制器使用驻留在第三方框架内的类的功能。现在我面临的问题是,如果我将第三方框架添加到MyLib并且不将它们添加到MyMainApp,我会收到链接器错误“Lexical或Preprocessor issue.XXX.h file not found”。如果我将框架添加到MyMainApp和MyLib,一切都很好,但这不是我想要的。我确保框架搜索路径和标题搜索路径是正确的。在这种情况下,我一直无法找到Apple的任何参考。我想知道将第三方框架和库添加/链接到静态库类型的Xcode子项目的最佳实践。还有一个解决方案来克服链接器错误并仅将框架添加到静态库项目中吗?

3 个答案:

答案 0 :(得分:1)

  1. 转到'构建阶段'为了MyLib'
  2. 添加第三方iOS框架'在' Copy Bundle Resouces'
  3. 编译' MyLib'
  4. 删除第三方iOS框架'来自' MyMainApp'
  5. 运行' MyMainApp'

答案 1 :(得分:1)

您的库必须链接它们,使用您的库的应用程序必须链接它们将它们包含在应用程序包中。该应用程序负责满足依赖性。

框架可以包含资源(例如提供问题的头文件),这是将它们与库区分开来的主要因素之一。因此,即使它可以包含框架的二进制对象(代码),库也不能真正包含框架。

如果您的库转换为框架,它可以包含其中的其他框架,可以满足您的需求。

答案 2 :(得分:1)

  

我的Xcode项目" MyMainApp"有一个静态库类型Xcode   子项目名为" MyLib"。现在我需要使用一些第三方iOS   我的iOS应用程序中的框架。我想仅针对MyLib添加/链接它们   而不是反对MyMainApp,所以我可以使MyLib重复使用   自包含,也可以在我的其他iOS应用程序中使用它。

图书馆不会将自己与其他图书馆联系起来,他们只是将构建单独构建到未链接的*.a二进制文件中。稍后,应用程序(以及之后)将所有这些*.a文件及其自己的二进制文件链接在一起。

你是对的,尽管库应保持模块化,不包含其他库代码或资源,以避免版本和兼容性问题。

  

现在我遇到的问题是我是否添加了第三方框架   只是MyLib并没有将它们添加到MyMainApp,我收到链接器错误   "词汇或预处理器问题。找不到XXX.h文件"。一切   如果我将框架添加到MyMainApp和MyLib,但效果很好   这不是我想要的。

您的应用程序间接尝试导入其中一个第三方标头。虽然您不需要引用第三方库代码,但仍需要访问其头文件才能进行编译。换句话说,您不需要将第三方库添加到您的应用程序中,但您必须添加头文件或设置标题搜索路径。

  

我想知道添加/关联第三方的最佳做法   框架和库到静态类型的Xcode子项目   图书馆。还有一个解决方案来克服链接器错误并添加   框架只到静态库项目?

没有简单的"本地人"处理iOS上的库,资源和依赖项的方法,所以你应该看看CocoaPods

相关问题