我想使用Xcode 4和Cocoa静态库项目来管理工作空间中的项目,这些项目包含可以从其他项目中引用的共享代码。根据WWDC 2010视频和Xcode 4文档,在Xcode 4中有一个工作空间的“隐式依赖”特性,我一直在努力使它工作,但没有取得多大的成功。
示例工作区:DependenciesInXcode4.zip
您可以看到非常基本的示例项目有两个静态库项目,我将其命名为Library1和Library2。然后,我在每个项目中都有一个类,我从iPhone项目中引用了这个类,名为PrimaryApp。在添加导入语句时,我得到了Code的支持,但是构建失败了。

您可以看到构建是如何失败的,因为它找不到依赖项。

为了解决这些问题,我手动添加了链接Library1和Library2项目。

我还必须将这些项目的路径添加为头搜索路径。

现在,当我构建两个依赖库,然后在PrimaryApp模拟器中运行iPhone时,它成功地构建并运行。我发现,它并不总是确保在必要时构建依赖项目,这显然是一个手动过程。这不是我所认为的“隐式依赖”,因为Xcode视频和文档暗示它应该工作。我一直在寻找更多的具体例子,但到目前为止,我没有运气。即使在这里,我还没有看到令人满意的答案。
看起来,开发人员回到了旧的技术上,并没有真正使用新的“隐式依赖”特性。
我希望在理解如何让“隐式依赖”使用Xcode 4中的工作区方面提供一些帮助。
以下是我的问题:
发布于 2011-04-07 21:25:43
我刚刚花了两天的时间来建造和重建我们的项目,只为这个问题而奋斗。虽然我现在有一个正确构建和链接并具有工作代码的项目,但我对其中一个步骤并不百分之百满意,因为它似乎有点麻烦,而且肯定不符合我的“自动隐式依赖”的概念。
以下是我所采取的步骤:
我真的不喜欢第8步和第9步,这真的让人觉得XCode并没有做它所要做的事情。然而,如果和当它被修复,至少这些步骤是相当容易退出,以使它正确工作。
我认为“隐式依赖”不需要经过第6步,甚至可能是第5步,但对于很多人来说,这可能有点自动化。
发布于 2011-11-14 03:30:47
这确实是Xcode在构建过程中处理隐式依赖的一个bug。
在有两个项目的工作区中,我能够让项目A参见项目B中的类,并通过将项目B类的.h头文件复制到项目A的目录中成功构建。注意:我没有将它们添加到Xcode中的项目A中,我只是将它们放在项目A的目录中。
这是一个比我在其他地方看到的要简单得多的解决方案,因为它不需要更改工作区方案或任何一个项目的构建设置。使用项目A目录中的.h文件,Xcode能够自动查找和解决项目A对项目B的所有隐式依赖关系。
不幸的是,您不能将.h文件放在它们自己的子目录"XcodeBugWorkaroundHeaderFiles“中。它们必须位于项目已经从其中读取.h文件的目录中。另外,别名不起作用,但是符号链接会起作用,所以通过使用SymLinks,您不必担心过时的副本。
尽管如此,我并不确定拥有构建失败的“隐形”.h文件是否是一个好主意。在Xcode中修复bug之前,最好将它们添加到项目中,这样您就可以在Xcode中看到它们。
发布于 2011-05-24 13:38:33
另一种选择是只包含每个“子项目”的根作为递归头路径。例如,如果您有AcmeLib,您可以转到主项目的构建选项,并在启用递归选项的情况下将路径添加到AcmeLib到用户头搜索路径。然后将自动搜索AcmeLib的头文件。
为了保持开发人员之间的路径独立性,您可以使路径相对于一个源目录变量,比如$ACME_LIB,每个开发人员都可以在XCode首选项“源”窗格中安装该变量。
因此,要在新项目中使用AcmeLib,只需在项目中拖动,将$ACME_LIB添加到标题搜索路径中,就可以了。XCode的隐式链接应该会连接到依赖项。
https://stackoverflow.com/questions/5534235
复制相似问题