我应该如何pipe理Xcode工作区中的项目间的依赖关系?

我正在开发iOS应用程序项目,并将json-framework项目添加到工作区。 左侧的项目导航器显示了两个项目,构buildschemeselect器也显示了两个项目的scheme。 现在我想从json-framework项目中添加libjson.a目标作为另一个项目中iOS应用程序目标的依赖项。 预期的结果是,无论何时构build应用程序目标,它都会构build(如果有必要)库目标,并将应用程序目标与其链接。 以下是我试图做到这一点的方法:

  • build立这两个作为同一个计划的一部分。 我尝试的方法是编辑我的应用程序的scheme,将“libjson.a”添加到scheme的“构build”部分,并按照“查找隐式依赖项”的方式进行检查。 然后,我去我的应用程序目标的目标编辑器,并在“构build阶段” – >“与库链接二进制”,我从工作区库列表中select“libjson.a”。 当我后来尝试构build该scheme时,我看到它构build了库目标,但是构build应用程序目标失败,出现链接器错误“找不到-ljson的库” – 提示它实际上没有发现该库已经构build。 事实上,在项目导航器中,库的应用程序项目下的条目仍然是红色,表示该文件不存在。

  • 将json目标添加为显式依赖项。 为了试试这个,我不修改构buildscheme,而是转到我的应用程序目标的目标编辑器,然后单击“目标相关性”下的添加button。 工作空间中没有其他项目的目标出现,所以这是一个非启动器。

  • 将JSON项目拖到另一个项目中,然后将目标添加为依赖项。 这就是我在Xcode 3中所做的事情。在项目导航器中,我抓取库项目并将其拖到应用程序项目上。 这会popup通常的“添加文件”窗格,我只是通过点击“完成”来消除。 项目导航器中现在有两个项目用于库项目:一个在顶层,一个在应用程序项目下。 我现在可以使用目标编辑器将库目标添加为应用目标的依赖项,并且可以在链接库阶段无错地链接它。 但看起来很糟糕:导航器中同一项目有多个条目。 有没有不同的方式来做到这一点?

在同一个工作区的不同项目中连接这些目标的“Xcode 4-ish”方式应该被视为什么? 如果同一个工作空间中的多个项目不能真正互相交互,那么这似乎就不足为奇了。 谢谢,格雷厄姆。

我刚刚设置了一个testing项目,就像您在第3版中所描述的那样,创build一个新的工作区并将两个Xcode项目拖入它,如图所示嵌套。

如果已经有兄弟项目,可以删除。

打到这个基础上,只要我能看到就行了。

方案设置项目布局

如果你有两个项目,我想有内部path混淆,我会倾向于在“视图” – >“实用工具” – >“文件检查器”中find位置设置,看看有什么效果。

在这里输入图像描述在这里输入图像描述

另一个要尝试的是在Xcode“Preferences …” – >“Source Trees”中设置path,并按照此处所述的方式引用它们: 易于跨模块化代码共享iPhone应用程序:静态库和跨项目引用

HTH。 安迪·W

我设法得到工作区中的项目之间的依赖关系,正如我在这里所描述的那样工作: http : //blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/ 。

不幸的是,我找不到一种方法让Xcode发现隐含的依赖关系或者索引build立的所有内容。 我发现两个解决方法,但我希望,随着Xcode 4成熟,需要更less的手动configuration。

我会问同样的问题,认为我自己的解决scheme是不对的。 但是我没有在这里看到它,它似乎工作。 显然,XCode 4是一项正在进行中的工作。 🙂

我有一个工作区,有两个项目:一个静态库和一个使用库的应用程序。 这些项目是兄弟姐妹。 每个项目都有自己的scheme,每个scheme只设置一个目标。 换句话说,我在工作区中添加了两个项目,就是这样。

要添加静态库作为应用程序的依赖项,我只需将库项目(Project Navigator)中的libsomething.a产品拖放到应用程序目标的“Link Binary with Libraries”列表中即可。 而已。 现在,当我构build应用程序时,库项目首先被构build,然后被链接。 有趣的是,当我修改应用程序的scheme来使用不同的configuration(例如,发布而不是debugging)时,库使用相同的configuration来构build。

所以它的工作原理,显然有一些自动依赖检查在这里进行。 但感觉不对 然后再次,模式scheme编辑器/pipe理器和项目导航器中缺less工作区对象…我从来没有想过我会说,但Visual Studio UI(bleh)更清晰。

我的防弹解决scheme来做到这一点:

在Main项目(不是lib)的Build Settings中创build“Per Debug-Release / Per Architecture”设置,包括../MyLibProject/build/Debug-iphoneos或../MyLibProject/build/Release-iphonesimulator等等..
取决于configuration(您可以通过点击Debug或Release旁边的+来创build这些configuration,然后select“Any iOS Simulator SDK”或“任何iOS SDK”,您需要为“Header Search Path” (如果你的库复制了一些头文件,这很可能)和“库searchpath”,这意味着对于每个设置,你可能最终会有4个不同的path(debuggingsim,debuggingios,发布SIM,释放ios)。这将确保两个项目的configuration匹配。

现在,为了自动编译lib,即创build依赖项,可以使用“Build Phase – >链接到Binary With Libraries – > + – >select上面给出的.a文件”的build议。

这是我设法为xcode 4.5上的每个环境build立和链接正确的唯一方法

注:我甚至在“其他链接器标志”中添加了-lmyLib标志,但是我不确定这是否真的有必要

我在创build类似框架的静态库方面取得了一些成就,尽pipe这不是一个完美的解决scheme。

请参阅Xcode用户指南:Xcode Concepts – > Xcode工作空间在“工作空间中的项目共享生成目录”下。

单个工作区中的所有项目共享一个构build目录。 依赖关系被自动发现,并在需要时进行构build:

Xcode检查构build目录中的文件以发现隐式依赖关系,例如,如果工作空间中包含的一个项目构build一个由同一工作空间中的另一个项目链接的库,则Xcode会在构build其他项目之前自动构build该库,即使构buildconfiguration没有使这个依赖关系是显式的,你也可以根据需要用显式的构build设置来覆盖这样的隐式依赖关系,对于显式的依赖关系,你必须创build项目引用。