Xcode 4和嵌套项目 - 找不到头文件

Pas*_*cal 52 cocoa frameworks xcode4

我在Xcode 4和嵌套项目中遇到了无数问题,这些问题在Xcode 3.2下运行良好.这是一个我无法解决的基本问题:

我正在构建一个cocoa框架,需要另一个cocoa框架,我有源代码.所以我执行通常的步骤:

  • .xcodeproj所需框架的文件拖到我的主框架项目中
  • 在TARGETS> MyFramework> Build Phases> Target Dependencies下的主框架中:添加嵌套项目的目标
  • 确保嵌套框架的头文件是公共的
  • 在Xcode设置>位置> 构建位置我将它设置为将构建产品放置在派生数据位置(推荐)
  • 将两个目标的构建产品路径设置为${BUILT_PRODUCTS_DIR}并告诉我它们位于DerivedData/Debug(或Release)位置
  • 两个目标的架构设置完全相同

然后我点击[CMD] + B进行构建,它告诉我它没有找到嵌套框架的头文件.当我检查设置时,用户标题搜索路径包含DerivedData/Debug的路径,里面有嵌套的框架目标,其中包含Versions/A/Headers中的头文件.

我坐在这里,任何人都知道我做错了什么?


当我将用户标题搜索路径更改为时,在构建调试时问题就消失了.但是,当构建Distribution时,这不起作用,因为框架然后使用它们的Release设置,最终在不同的子目录中...${BUILT_PRODUCTS_DIR}/MyFramework.framework/Headers


我的临时解决方案是为嵌套项目定义分布配置.这样就可以找到头文件并且链接器可以成功链接.

Pas*_*cal 53

到目前为止,这是我的综合知识:

使用Xcode 忘记整个公共标题,它是一个PITA,在归档你的应用程序时无法正常工作.相反,在项目级别拥有所有静态库头文件,并告诉您的应用程序在哪里找到它.

  1. 通过确保所有目标具有相同的构建配置名称(即向静态库添加"AdHoc"和"Deployment"配置)来减轻您的痛苦.

  2. 在构建设置中,将标题搜索路径(如果使用#include <file.h>)或用户标题搜索路径(如果使用#include "file.h")指向静态库项目的目录.如果静态库项目位于您的app目录中,请使用以下命令:

    "$(PROJECT_DIR)" (已启用递归)

    如果你有一个目录,其中包含a)静态库项目和b)你的应用程序,那么这应该工作:

    "$(PROJECT_DIR)/.." (已启用递归)

  3. 如果子模块包含已编译的库,请将库搜索路径设置为:

    "$(TARGET_BUILD_DIR)"

  4. 确保您使用的所有静态库项目都设置为" 跳过安装"YES.

  5. 同样,在任何静态库中都没有公共头文件(Build Phases»Copy Headers),否则Xcode将无法存档应用程序.

  6. 确保告诉Xcode何时构建静态库,如Apple的Tech Doc中所示.


旧答案:

我仍然没有找到静态库的这个问题的真正解决方案.对我有用的是:

  • 为静态库创建"AdHoc"配置
  • 添加$(BUILT_PRODUCTS_DIR)到用户标题应用程序的搜索路径(通过递归检查) - >在运行应用程序时使用
  • 在Xcode菜单中,选择Product > Build For > Build For Archiving

这有效,应用程序找到头文件并自行构建,最终在DerivedData // Build/Products/AdHoc-iphoneos /作为应用程序包.按照TestFlightApp.com的这些简单说明(死链接),我可以将此应用程序打包到IPA中并发送它.只需选择从Xcode 存档应用程序再次找不到标题,即使它们确实位于AdHoc-iphoneos构建目录中.