【问题标题】:Xcode Workspace vs Nested ProjectsXcode 工作区与嵌套项目
【发布时间】:2012-07-22 00:51:24
【问题描述】:

我不明白如何使用 Xcode 工作区来组织相互依赖的项目。例如,我看到很多开发人员创建的工作区结构如下所示:

工作区 |-- 应用 |-- 通用库 |-- 另一个公共库

这有什么好处?如果有人直接打开“App”项目,他们不会无法实际构建应用程序吗?他们必须意识到工作空间的存在具有必要的依赖关系。

在我看来,更好的方法是使用这样的嵌套项目:

应用程序 |-- 图书馆 | |-- 通用库 | |-- 另一个公共库

那么不存在无法构建的项目。它似乎也更符合 Git 的子模块理念。

我看到的工作空间的唯一用途是对不相互依赖的公共项目进行分组。我想听听其他人对此的看法,因为我可能遗漏了什么。

【问题讨论】:

标签: xcode project code-organization


【解决方案1】:

当我想组合项目同时保持项目独立性时,我会使用工作区。

我使用工作区的一个例子是一系列教程项目,这些项目从非常简单到更复杂。每个项目都可以作为一个独立的项目运行,但是将它们组合在一个工作区中有助于我组织整个项目。

在另一个例子中,我有一个为客户开发的应用程序。该应用程序既可以作为独立应用程序,也可以作为整个项目中的模块使用。独立项目可以构建独立应用程序。另一个应用程序使用包含两个项目的工作区。应用程序的模块版本是根据特殊方案构建的,如果不使用工作区,则无法构建此组合应用程序。

上述两种情况的一个转折点是构建文件夹的存储位置。我必须更改 Xcode 首选项以将构建产品放入教程项目组的唯一文件夹中,在其他应用设置中为模块使用通用构建文件夹。

在其他情况下,我有很多带有嵌入式项目的项目。在这些情况下,图书馆项目是稳定的。我不尝试进一步开发图书馆项目,因此它们只是该项目的另一种资源。我发现在我的项目资源的文件系统组织在某种程度上反映了我的 Xcode 项目的组织的情况下,工作起来更容易。所以这些库项目被复制到主项目的文件层次结构中。如果我正在开发库并在多个项目中使用它们,那么使用工作区是有意义的。为了方便起见,我经常不打扰。

有时我什至将工作区与包含嵌入式项目的项目结合起来。

所以我认为,组织工具、嵌入式项目和工作区都有其优点和问题。我根据具体情况选择使用其中一种(或组合)。

【讨论】:

  • 感谢您的洞察力。我同意您的大部分观点,但是即使库不断变化,我也看不到使用工作区的好处。如果您的库在 Git 存储库中维护,您应该能够将其作为子模块添加到项目中,然后根据需要更新子模块。
  • 是的,git 子模块是管理库开发的另一种(可能更好)方法。子模块是一种高级的 git 功能,许多 iOS 开发人员由于缺乏知识以及需要使用其他版本控制系统等各种原因而无法使用它。在这种情况下,工作空间可能是比嵌入式项目更好的选择。
  • @Mr.Berna - 抱歉,但是将 git 与 xcode 一起使用是一件痛苦的事情......你无法控制你在每个项目中使用什么版本/分支/fork,除非你去目录使用终端手动目录并手动记笔记。
  • 是的,RubberDuck,将 git 与 Xcode 一起使用是一种痛苦,但它比替代方案、其他集成度较低的版本控制系统或没有 VCS 的痛苦要小。每个版本的 Xcode 都改进了集成,Apple 选择了 git 而不是任何其他 VCS,所以我经常使用 git,但主要是从命令行使用。然而,是否 git 不是这里的问题,它只是在任何特定情况下选择使用工作区或嵌入式项目时要考虑的众多因素之一。
  • @Mr.Berna - 请为我的要求提供最佳解决方案,我的要求是“我有两个项目,分别称为项目 A 和项目 B(项目 B 是工作区,因为我正在使用 pod)。我想访问项目 B,当我单击项目 A 上的特定按钮时,像这种情况,我该怎么办。
【解决方案2】:

我们将嵌套项目添加到主项目的框架中,因此我们可以将它们“包含”到 .framework 产品中。

Main
|-- Main
|-- MainTests
|-- Frameworks
|   |-- CommonLibrary.xcodeproj
|   |-- AnotherCommonLibrary.xcodeproj
|   |-- UIKit.framework
|   |-- Foundation.framework
|   |-- CoreFoundation.framework
|-- Products

请参阅this Great Tutorial by Jeff Verkoeyen 以将通用框架添加到项目中。一开始并不容易,但继续努力,你就会掌握它的窍门。

【讨论】:

  • 这种结构是否可以通过在每个单独的 .xcodeproj 上安装 CocoaPods 来实现?
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多