Xcode项目vs. Xcode工作区——区别

我试图了解iOS的整个生态系统是如何工作的 到目前为止,我可以为我的大多数问题找到答案(相信我,已经有很多问题了),但对于这个问题,似乎还没有明确的答案

XcodeProject和XcodeWorkspace文件之间的区别是什么?

  1. 它们之间有什么不同?
  2. 他们负责什么?
  3. 当我在团队/独自开发我的应用程序时,我应该与他们中的哪一个一起工作?
  4. 关于这两个文件还有什么需要我注意的吗?
139881 次浏览
工作区是项目的集合。当项目之间存在相关性时,组织项目是很有用的(例如:项目A包含一个库,它作为项目本身作为项目B提供。当您构建工作区时,项目B被编译并链接到项目A中) 在流行的CocoaPods中使用工作区是很常见的。当你安装你的pod时,它们被放置在一个工作区中,其中包含你的项目和pod库

关于项目结构,我认为你需要了解三个关键项:目标项目工作区目标详细指定产品/二进制文件(即应用程序或库)是如何构建的。它们包括构建设置,例如编译器和链接器标志,并定义哪些文件(源代码和资源)实际上属于产品。在构建/运行时,总是选择一个特定的目标。

您可能有几个共享代码和资源的目标。这些不同的目标可以是应用程序的稍微不同的版本(iPad/iPhone,不同的品牌,…),或者自然需要访问与应用程序相同的源文件的测试用例。所有这些相关的目标可以被组合在项目中。虽然项目包含来自所有目标的文件,但每个目标选择自己的相关文件子集。构建设置也是一样:你可以在项目中定义默认的项目范围设置,但如果你的一个目标需要不同的设置,你总是可以在那里覆盖它们:

所有目标继承的共享项目设置,除非它们覆盖它

所有目标继承的共享项目设置,除非它们覆盖它

具体目标设置:PSE iPhone覆盖项目的Base SDK设置

具体目标设置:PSE iPhone覆盖项目的Base SDK设置

在Xcode中,你总是打开项目(或工作区,但不是目标),它包含的所有目标都可以构建/运行,但没有构建项目的方法/定义,因此每个项目都需要至少一个目标,而不仅仅是文件和设置的集合。

选择一个项目的目标来运行

选择一个要运行的项目目标

在很多情况下,项目就是你所需要的。如果你有一个从源代码构建的依赖项,你可以将它嵌入为子项目。子项目可以单独打开,也可以在它们的超级项目中打开。

demoLib is a subprojec

demoLib是子项目

如果您将子项目的一个目标添加到超级项目的依赖项中,子项目将自动构建,除非它保持不变。这样做的好处是,你可以在同一个Xcode窗口中编辑项目和依赖项的文件,当你构建/运行时,你可以从项目及其子项目的目标中选择:

从子项目运行目标

然而,如果你的库(子项目)被各种其他项目(准确地说,是它们的目标)使用,将其置于相同的层次结构级别是有意义的——这就是工作区的作用。工作区包含并管理项目,它直接包含的所有项目(即,不是它们的子项目)都在同一级别上,它们的目标可以相互依赖(项目的目标可以依赖子项目的目标,但反之则不然)。

工作空间结构

工作空间结构

在这个例子中,两个应用程序(AnotherApplication / ProjectStructureExample)都可以引用demoLib项目的目标。这也可以通过将demoLib项目作为子项目包含在其他两个项目中(它只是一个引用,所以不需要重复),但如果你有很多交叉依赖,工作区更有意义。如果您打开一个工作区,您可以在构建/运行时从所有项目的目标中进行选择。

从工作空间运行目标

你仍然可以单独打开你的项目文件,但它们的目标很可能不会构建,因为Xcode无法解析依赖关系,除非你打开工作空间文件。工作区给了你和子项目一样的好处:一旦依赖项发生变化,Xcode会重新构建它,以确保它是最新的(尽管我在这方面遇到过一些问题,它似乎不可靠)。

简单地回答你的问题:

1)项目包含文件(代码/资源)、设置和从这些文件和设置构建产品的目标。工作区包含可以相互引用的项目。

2)这两个人都负责构建你的整个项目,但在不同的层面上。

3)我认为大多数情况下有项目就足够了。除非有特殊的原因,否则不要使用工作区。此外,您还可以在以后将项目嵌入到工作区中。

我认为这就是上面这篇文章的意义所在。

有一个注释3):CocoaPods,自动为你处理第三方库,使用工作区。因此,当你使用CocoaPods(很多人这样做)时,你也必须使用它们。

在短暂的

  • Xcode 3引入了子项目,也就是亲子关系,父对象可以引用子对象,反之则不行
  • Xcode 4引入了工作区,这是兄弟关系,意味着任何项目都可以引用同一个工作区中的项目

当我使用CocoaPods开发iOS项目时,有一个.xcworkspace文件,你需要用与CocoaPods相关的.xcworkspace文件打开项目。

Files preview

但是当你用.xcworkspace文件Show Package Contents时,你会找到contents.xcworkspacedata文件。

包内容 .

<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:BluetoothColorLamp24G.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

注意这一行:

location = "group:BluetoothColorLamp24G.xcodeproj"

.xcworkspace文件引用了.xcodeproj文件。

开发环境:

macOS 10.14
Xcode 10.1

Xcode工作区vs项目

  1. 它们之间有什么不同?

Workspace是一组项目

  1. 他们负责什么?

Workspace负责项目之间的依赖关系。

. Project负责源代码
  1. 当我在团队/独自开发我的应用程序时,我应该与他们中的哪一个一起工作?

你的选择应该取决于你的项目类型。例如,如果你的项目依赖于CocoaPods依赖管理器,它会创建一个工作空间。

  1. 关于这两个文件还有什么需要我注意的吗?

cross-project references<一口>[对]< /一口>

[Xcode组件]