具有多个项目的工作区或具有多个目标的一个项目?

Mar*_*rty 6 workspace xcode project target ios

我有4个iOS应用程序都很相似.它们是闪存卡应用程序,每个应用程序都有不同的主题.他们分享了很多课程和图像.现在我将其中的所有4个作为单独的项目,但我希望简化维护和共享资源.将所有4个项目放在同一个工作区中,或者在一个项目中有4个目标会更好吗?每种方法的优点/缺点是什么?它们看起来很相似.

Sti*_*ker 6

这是Marty发布的PDF的摘录。这是一个很好的文档,但是它有4.4MB的空间,在很多人下载之后,它可能会脱机;)

在一个项目中放置多个目标的权衡

通过考虑一些折衷方案,可以帮助确定是将一个项目中的多个还是所有目标。以下是在一个项目中组合多个目标的一些优点:

  • 索引适用于所有目标。需要索引信息才能访问类浏览器中的类,在“项目符号”智能组中查看符号,并充分利用代码完成功能。还需要使用Command双击以跳转到定义并使用符号对应项。

  • 您可以轻松地在项目中的目标之间建立依赖关系。

  • 使用该项目的任何人都可以访问其所有文件。

  • 如果您的计算机具有多个CPU,或者您可以访问网络上的其他计算机,则可以使用并行构建或分布式构建来缩短大型项目的构建时间。有关详细信息,请参见《 Xcode项目管理指南》中的“并行构建”和“减少构建时间”。

以下是将所有目标放在一个项目中的一些缺点:

  • 所有代码对于使用该项目的任何个人或团队都是可见的,即使他们仅在一个目标或整个项目的一小部分中工作。

  • 项目规模可能变得笨拙;这可能会导致Xcode花很长时间来执行诸如索引之类的操作。

  • 所有目标必须使用相同的SCM系统。

  • 所有目标必须使用相同的SDK进行构建。

  • 您不能使用Xcode调试器同时调试一个项目中的两个可执行文件。

使用多个项目的权衡

在将软件产品分解为多个项目和目标时,还需要权衡取舍。以下是使用多个项目的一些优点:

  • 您可以将项目用作在不同个人或团队之间划分工作的单元。单独的项目使您可以分隔代码(例如,限制对机密信息的访问)。

  • 每个项目的大小都可以管理,Xcode可以更快地执行索引,构建和其他操作。

  • 如果项目需要共享输出,则可以将它们构建到公共目录中,如Xcode项目管理指南中的“构建位置”中所述。

  • 您可以使用跨项目引用来构建当前项目所需的其他项目。

  • 每个项目都可以使用存储在不同SCM系统中的源代码。但是,如果个人可以物理访问其他项目,则仍然可以查看来自使用同一SCM系统的多个项目的SCM信息。

  • 每个项目可以使用不同的SDK。

  • 每个项目可以定义一个单独的构建配置列表。

  • 您可以使用调试器同时调试两个或多个可执行文件,每个项目中一个。当产品直接交流或交互时,这很有用。

以下是拥有多个项目和目标的一些缺点:

  • 您没有跨项目索引,因此只能访问其他项目专门公开的符号。例如,这意味着您不能自动在其他项目中查找定义,除非您具有对它们的物理访问权(而不仅仅是对最终产品的访问权)。同样,您不能充分利用依赖于索引的其他功能。其中包括使用代码完成,使用Command双击以跳转到定义,重构以及使用符号对应项。

  • 管理许多较小的项目可能会产生额外的开销。例如,要设置一个依赖于多个项目中其他目标的目标,必须首先设置跨项目引用。

    同样,使用多个项目可能需要团队之间进行其他沟通。

  • 对于从事多个项目的个人而言,在许多打开的项目之间进行切换可能变得很笨拙。但是,可以通过使用管理器来缓解此问题(有关详细信息,请参阅使用管理器)。

  • 单个项目较小,并且不太可能能够利用分布式构建。