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它。
-
通过确保所有目标对于构buildconfiguration具有相同的名称 (即,将“AdHoc”和“部署”configuration添加到静态库)来缓解您的痛苦。
-
在构build设置中,将Headersearchpath (如果使用
#include <file.h>
)或User Headersearchpath (如果使用#include "file.h"
)指向静态库项目的目录。 如果静态库项目在您的应用程序目录中 ,请使用以下命令:"$(PROJECT_DIR)"
(启用recursion )如果你有一个目录包含a)静态库项目和b)你的应用程序,那么这应该工作:
"$(PROJECT_DIR)/.."
( recursion启用) -
如果子模块包含已编译的库,请将库searchpath设置为:
"$(TARGET_BUILD_DIR)"
-
确保您使用的所有静态库项目的Skip Install设置为
YES
。 -
同样,任何静态库中都没有公共头文件 (Build Phases»Copy Headers),否则Xcode将无法归档应用程序。
-
确保告诉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立一个静态库的嵌套项目。 我发现这个文件在苹果网站上完全保存了我的生活。
我很高兴我不必与衍生的数据path混杂在一起。
对我而言,这发生在GIT合并之后,造成了许多冲突,其中一个与项目文件有关。 合并后,我确定项目文件的结构发生了变化。
我最终做的是进入“构build设置”项目,然后寻找“总是search用户path”,并将其转为Yes
。
我猜合并把这个布尔值变成了No
,因此这个项目并没有在头文件的正确位置查找。