当前位置: 首页 > 知识库问答 >
问题:

Xcode项目vs. Xcode工作区-差异

祁建业
2023-03-14

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

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

  1. 他们两个有什么不同

共有3个答案

伏子辰
2023-03-14

简言之

  • Xcode 3引入了子项目,即父子关系,这意味着父级可以引用其子目标,反之亦然
柳宾实
2023-03-14

工作区是项目的集合。当项目之间存在相关性时,组织你的项目是很有用的(例如:项目A包括一个库,它作为项目本身作为项目B提供。当你构建工作区时,项目B在项目A中被编译和链接)。
这是常用的流行CocoaPods中的工作区。当您安装您的pod时,它们被放置在一个工作区内,该工作区保存您的项目和pod库。

潘琨
2023-03-14

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

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

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

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

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

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

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

demoLib是一个子项目

如果将子项目的一个目标添加到超级项目的依赖项中,则子项目将自动生成,除非它保持不变。这里的优点是,您可以在同一个Xcode窗口中编辑项目和依赖项中的文件,并且在生成/运行时,可以从项目及其子项目的目标中进行选择:

但是,如果您的库(子项目)被各种其他项目(确切地说是它们的目标)使用,那么将其放在相同的层次结构级别是有意义的——这就是工作空间的用途。工作区包含并管理项目,它直接包含的所有项目(即,不是其子项目)都位于同一级别,并且它们的目标可以相互依赖(项目的目标可以依赖于子项目的目标,但不是相反)。

工作空间结构

在本例中,两个应用程序(另一个应用程序/ProjectStructureExample)都可以引用demoLib项目的目标。这也可以通过将demoLib项目作为子项目包含在其他两个项目中来实现(这只是一个参考,因此不需要重复),但是如果您有很多交叉依赖项,那么工作空间更有意义。如果打开工作区,则可以在生成/运行时从所有项目的目标中进行选择。

您仍然可以单独打开项目文件,但是它们的目标很可能无法构建,因为除非您打开工作区文件,否则Xcode无法解决依赖关系。工作区与子项目具有相同的优势:一旦依赖项更改,Xcode将重建它以确保它是最新的(尽管我对此有一些问题,但它似乎不可靠)。

简而言之,你的问题:

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

2)两者都负责构建你的整体项目,但层次不同。

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

4) 我想这就是上面这篇文章的目的…

有一点值得注意:CocoaPods可以自动为您处理第三方库,它使用工作空间。因此,当你使用CocoaPods(很多人都这么做)时,你也必须使用它们。

 类似资料:
  • 问题内容: 我已经使用詹金斯了很多年了,但是我从来没有自己设置它,就像我在新工作中所做的那样。我遇到了几个问题。 默认工作空间位置 -最新的Jenkins似乎在Jenkins \ jobs [projectName] \ workspace中具有默认工作空间,并且对于每个构建都将被覆盖(或擦除(如果选择))。我认为应该将其放置在Jenkins \ jobs [projectName] \ buil

  • 默认工作区位置-最新的Jenkins似乎在Jenkins\jobs[projectName]\workspace中有默认的工作区,并且在每次构建时都被覆盖(如果选中,则被删除)。我认为它应该放在Jenkins\jobs[projectName]\build[build_id]\中,这样它就可以存储每个构建的工作区状态,以供将来参考? 在project>build_id页面上显示工作区--这与前面的

  • 当试图从Eclipse Oxygen中删除一个项目时,什么也没有发生,日志中会写入一个异常。我只需在包浏览器中右键单击一个项目,然后选择“删除”选项。我用的是Eclipse Oxygen.1a (4.7.1a)。以下是完整的构建信息: 下面是一个堆栈跟踪示例: 任何想法如何解决这个问题?或任何解决方法?

  • 2个分级项目,A和B,其中A对B定义了编译依赖关系。maven&gradle项目启用了JAR的Remappig。我试过启用和禁用自定义工具模型。我在init.d目录下的文件中定义了本地存储库。 问题1:为什么在解析A的依赖项时,我会得到一个项目B的依赖项未解决的错误?即使B没有部署到任何存储库中,本地工作区解析也应该介入并以与maven项目相同的方式解析它(这是顺带的)。 问题2:除了build.

  • 问题内容: 我试图构建新项目,但是当我单击构建时,构建每次都会失败。 我尝试删除我的项目并再次创建它,但是仍然没有帮助。 警告 错误 这些是Xcode向我显示的错误消息。项目名称为“ MyFirstApp”,我在该错误消息上剪切了一些文件路径。那么我如何建立这个项目呢? 问题答案: 在终端中尝试:

  • 无论是建立一个全新的本地仓库(local repository)或是克隆一个远程仓库(remote repository)到本地计算机,这两者并没有多大的区别。现在在你的计算机上已经拥有了一个 Git 本地仓库了。这也就意味着你可以在这个项目上开始你的工作了,使用任何一个你常用的编辑器来完成对项目文件的修改、创建、删除、移动、拷贝或者是重命名。 概念 文件的状态 一般情况下在 Git 中文件有两种