Xcode 4和嵌套的项目 – 头文件未find

我在Xcode 4和嵌套项目上遇到了无数的问题,在Xcode 3.2下工作得很好。 这是我无法解决的一个非常基本的问题:

我build立一个cocoa框架,需要另一个cocoa框架,我有源。 所以我执行通常的步骤:

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

然后我打了[CMD] + B构build,它告诉我,它找不到嵌套框架的头文件。 当我检查设置时, 用户头部searchpath包含DerivedData / Debug的path,里面有版本/ A /头部中头部文件的嵌套框架目标。

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


当我将用户标题searchpath更改为${BUILT_PRODUCTS_DIR}/MyFramework.framework/Headers时,构buildDebug时问题消失。 然而,这不起作用,当build立分布的框架,然后使用他们的发行设置,最终在一个不同的子目录…


我的临时解决scheme是也为嵌套项目定义分配configuration。 这样可以find标题,并且链接器可以成功链接。

这是迄今为止我综合的知识:

用Xcode忘记整个公共标题,它是一个PITA,并且在归档你的应用程序时不能正常工作。 相反,在项目级别有所有静态库头文件,并告诉你的应用程序在哪里可以find它。

  1. 通过确保所有目标对于构buildconfiguration具有相同的名称 (即,将“AdHoc”和“部署”configuration添加到静态库)来缓解您的痛苦。

  2. 在构build设置中,将Headersearchpath (如果使用#include <file.h> )或User Headersearchpath (如果使用#include "file.h" )指向静态库项目的目录。 如果静态库项目在您的应用程序目录中 ,请使用以下命令:

    "$(PROJECT_DIR)" (启用recursion

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

    "$(PROJECT_DIR)/.."recursion启用)

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

    "$(TARGET_BUILD_DIR)"

  4. 确保您使用的所有静态库项目的Skip Install设置为YES

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

  6. 确保告诉Xcode何时构build静态库,如苹果的Tech Doc所示。


老答案:

我仍然没有find一个真正的解决这个问题与静态库。 对我有用的是:

  • 为静态库创build一个“AdHoc”configuration
  • $(BUILT_PRODUCTS_DIR)添加到应用程序的用户头部searchpath中(选中recursion ) – >在运行应用程序时使用
  • 在Xcode菜单中,selectProduct > Build For > Build For Archiving

这个工作,应用程序find头文件并构build自己,它最终在DerivedData // Build / Products / AdHoc-iphoneos /作为一个应用程序包。 遵循TestFlightApp.com的这些简单指令 (无效链接),我可以将这个应用程序打包成IPA并发送。 简单地select从Xcode 归档应用程序不会再find标题,即使它们确实在AdHoc-iphoneos构build目录中。

(从Xcode 5.1开始)

当子项目由XCode构build时,子项目头文件被复制到构build目录中。 归档时,似乎此复制目标目录未添加到头/包含searchpath。 你会想要去你的生成设置并添加

 $(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include 

到用于存档的scheme的“标题searchpath”。

如果您不确定使用哪种scheme进行存档,请转至产品 – >scheme – >编辑scheme,然后在左侧列中查找存档。

确保你的第三方框架作为«group»添加到你的主项目中,这样你就可以在你的项目层次中看到它…

我在这里有同样的问题,我可以通过设置“构build位置”来将构build产品放置在目标指定的位置来解决问题“

我有这个问题:我可以build立debugging和App Storeconfiguration,但不是Ad Hoc。 build立Ad Hoc给了我错误,因为它找不到嵌套项目所需的.h文件。

原来我的Releaseconfiguration中有一个过期的configuration。 我更新了configuration链接,现在我可以构buildAd Hoc并使用“归档”function将其打包

花了我几个小时弄清楚了! 我的脑海里只是没有从缺less的.h文件跳转到只是自己的configuration错误。 =)可能有一个错误或警告抱怨缺lessconfiguration,但如果是这样的话,它被埋在数百个.h相关的错误之中。

我遇到了与“Ad Hoc”configuration相同的问题(按照http://help.testflightapp.com/customer/portal/articles/402782-how-to-create-an-ipa-xcode- 4 ),主项目找不到嵌套项目的一些头文件。 我把这个项目改名为“AdHoc”(没有空格),问题就消失了。 似乎空间可能会在一些情况下弄乱标题searchpath,虽然我还没有弄清楚什么时候可能发生的具体情况以及为什么。

我遇到了这个问题,build立一个静态库的嵌套项目。 我发现这个文件在苹果网站上完全保存了我的生活。

http://developer.apple.com/library/ios/#DOCUMENTATION/Xcode/Conceptual/ios_development_workflow/AA-Developing_a_Static_Library_and_Incorporating_It_in_Your_Application/archiving_an_application_that_uses_a_static_library.html

我很高兴我不必与衍生的数据path混杂在一起。

对我而言,这发生在GIT合并之后,造成了许多冲突,其中一个与项目文件有关。 合并后,我确定项目文件的结构发生了变化。

我最终做的是进入“构build设置”项目,然后寻找“总是search用户path”,并将其转为Yes

我猜合并把这个布尔值变成了No ,因此这个项目并没有在头文件的正确位置查找。