【问题标题】:iOS Static Library as a Subproject of a Project That Has Custom Build Configurations?iOS 静态库作为具有自定义构建配置的项目的子项目?
【发布时间】:2013-06-04 13:47:06
【问题描述】:

我正在尝试在多个 Xcode 项目之间共享代码。我遵循了 Apple 关于在项目中创建静态库子项目的说明:

http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

这很好用!但是,当我使用自己的项目按照相同的说明进行操作时,我发现我在静态库中公开的头文件无法通过我的应用程序中的代码找到。

这是因为我的项目使用自定义构建配置。我有一个用于 Ad Hoc 构建、App Store 构建等。

例如:当我使用名为“Ad Hoc”的构建配置构建项目时,静态库子项目构建发布配置并将其公共标头复制到名为“发布”的文件夹中。然后主项目无法构建,抱怨它找不到我从静态库导入的标头。错误在问题导航器中显示为:词法或预处理器问题

所以我的问题是:如何将静态库设置为具有库没有的构建配置的项目的子项目?

【问题讨论】:

  • 您要发布库本身吗?如果不是,为什么要公开标题或将它们复制到任何地方?他们肯定不会在构建类型之间改变吗?
  • 作为故障排除步骤,尝试在子项目静态库 Copy Files 面板中更改“include/${PRODUCT_NAME}”,更简单的是“include”,看看是否有效。它应该适用于前者,并且当人们浏览产品目录时它可以保持一切整洁,但它不是必需的,如果你一直在摆弄配置可能会导致问题。
  • @trojanfoe 我没有发布库本身。它将内置到我们所有的项目中。目前,标头被复制到“产品目录”目标中的 include/${PRODUCT_NAME}。你知道我应该将它们复制到哪里,以便我的应用可以在任何构建配置中看到它们吗?
  • 你根本不需要复制它们;我的 (OSX) 应用程序使用 C++ 库,只需将 $(PROJECT_DIR)/../mylibrary 添加到 Header Search Paths。这是假设库项目是应用程序项目的兄弟项目,我使用工作区将它们全部绑定在一起(实际上有两个库项目和一个应用程序项目)。
  • @TheBasicMind 我尝试了您的建议,但结果相同。标头已复制到 Release 文件夹,项目构建失败。

标签: iphone ios xcode static-libraries


【解决方案1】:

我在制作自定义项目模板时遇到了这个问题。

将“$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)”添加到“标头搜索路径”和“用户标头搜索路径”中,用于您使用存档的任何构建配置,并确保将其设置为“递归”反对“非递归”。这将告诉您的应用在构建目录中的“Release”目录中搜索头文件。

问题在于,对于 Debug 构建,所有头文件都被复制到派生数据下的单个目录中。但是当您归档文件时,这些文件会被复制到以构建配置命名的文件夹中。因此,当您进行“Ad Hoc”构建时,您的所有文件都会被复制到“Ad Hoc”文件夹,但您的静态库文件会被复制到“Release”文件夹。这些文件夹并排放置,除非被告知这样做,否则只会在“Ad Hoc”文件夹下搜索头文件。

这是我解决问题的项目模板的 GitHub 提交 https://github.com/reidmain/Xcode-5-Project-Templates/commit/e465aa3d5c82118cc0d5af3a7f6f094d86b1ec63

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2014-06-22
    • 1970-01-01
    • 2021-02-04
    • 2018-09-07
    • 2013-12-30
    相关资源
    最近更新 更多