257

是的,标题说明了:-) 他们用简单的英语是什么意思?我真的不明白苹果网站上的解释,我需要重命名我的目标,我担心在那之后就没有任何效果了..

4

6 回答 6

365

我也在 Workspace 和 Project 中添加了!

  • 工作区——包含一个或多个项目。这些项目通常相互关联
  • 项目- 包含代码和资源等(你会习惯这些的!)
  • 目标- 每个项目都有一个或多个目标。
    • 每个目标都定义了该项目的构建设置列表
    • 每个目标还定义了一个类、资源、自定义脚本等列表,以在构建时包含/使用。
    • 目标通常用于同一项目的不同分布。
      • 例如,我的项目有两个目标,一个“普通”构建和一个“办公室”构建,它具有额外的测试功能,可能包含多个背景音乐曲目和一个更改曲目的按钮(就像它目前所做的那样)。
      • 您将习惯于在添加类和资源时将它们添加到默认目标。
      • 您可以选择将哪些类/资源添加到哪个目标。
        • 在我的示例中,我有一个“DebugHandler”类添加到我的办公版本中
      • 如果您添加测试,这也会添加一个新目标。
  • 方案- 方案定义了当您按下“构建”、“测试”、“配置文件”等时会发生什么。
    • 通常,每个目标至少有一个方案
    • 您可以通过转到“方案”>“管理方案”并按“立即自动创建方案”来为您的目标自动创建方案
于 2013-12-17T15:20:01.987 回答
80

目标是通过在 Xcode 中运行“构建”创建的最终产品。它可能是应用程序、框架、静态库或单元测试包。不管它是什么,它通常对应于“已构建产品”文件夹中的单个项目。

方案表示您一起使用的目标的集合。它定义了当您在 Xcode 中选择各种操作(运行、测试、配置文件等)时使用哪些目标。通常,您只有一个方案,它将主应用程序目标用于运行、存档和配置文件操作,以及一个测试操作的单元测试目标。如果您正在构建两个相关的应用程序,您可能有两个使用相同单元测试包但应用程序目标不同的方案。

方案(在 Xcode 4 中引入)的主要好处是它们允许您在运行应用程序和单元测试之间切换,而无需切换所选目标。

于 2013-12-17T15:17:24.553 回答
68

我是一个视觉型的人,因此为了解释这个概念,我将使用图表。

当您有多个目标时,它们可以与 Xcode 的 Run、Test、Profile 操作一对一匹配,这个概念定义了一个方案

在此处输入图像描述

目标是您的项目的一个版本,即目标在构建时使用的类和资源略有不同。一个项目可以有多个构建时间设置,以满足不同的分发要求。

于 2015-05-17T21:10:27.503 回答
12

Xcode 结构

Workspace  
  -> Project 
    -> Target 
     -> Dependency 
      -> Scheme 
        -> Action
        -> Build Configuration  
          -> Build Configuration File(.xcconfig) 

Workspace( .xcworkspace) - 是多个projects. 它是作为[关于]的下一步创建的cross-project references

  • Workspace包含所有schemes包含的projects
  • Workspace处理所有implicit dependencies[关于]

观察:

  • 在同一个项目中使用不同的项目是安全的workspace,不要抓到
//if you try to open two projects on two Xcode instances
Couldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[关于]使用workspacewhere 创建 Pods项目

Project( .xcodeproj) - 它是targets和的容器scheme。它定义了代码文件、资源...

Projects管理Build Configuration(由 更改scheme)和Build Configuration File[关于]

您可以将现有转换ProjectWorkspace

File -> Save As Workspace...

[工作区与项目]

Target-PBXNativeTarget部分。定义一组特定的构建设置,这些设置生成:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[关于]。例如,它用于创建一个Universal frameworkUmbrella framework

Scheme

包含操作(运行、测试、配置文件、分析、存档)+ 配置(附加参数、[构建配置]、诊断)

可以共享方案,它可以在 CI、Carthage[示例]中为您提供帮助...并位于:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency-Targets可以有dependencies。依赖是针对源链接的。这些依赖可以静态链接也可以动态链接【关于】有两种:

  • Explicit Dependency[关于] - 位于同一个项目嵌套项目中的依赖的源代码
  • Implicit Dependency[关于] - 位于作为同一工作区一部分的项目中的依赖项的源代码/关闭代码。

[词汇]

于 2019-12-06T15:17:17.467 回答
5

tldr; 目标包含构建模块/最终产品/应用程序的指令,例如构建 watchOS 应用程序和 iOS 应用程序的指令。方案知道如何响应某些操作,例如构建操作或测试操作或归档操作。

确保您看到了 WWDC 视频的这一刻 — Xcode 简介。如果您想获得更深入的知识,请观看整个视频。该视频易于理解,但非常基础。我的回答主要是基于此。


方案

方案是您指定要运行的内容的方式,它还包含有关如何运行它的信息。

例如,我可以有一个包含 iOS 应用程序和 Watch 应用程序的项目,在这种情况下,我将有一个方案来运行我的 iOS 应用程序和一个方案来运行我的 Watch 应用程序

Run 将在调试器中运行我的应用程序。

测试将运行我的测试。

Profile 将在仪器中运行我的应用程序,以便我可以测量它的性能。

分析将运行 Xcode 的静态分析器并帮助捕捉我可能错过的问题。

最后,Archive 操作将构建我的应用程序以供发布并将其放入存档中,然后我可以使用它来分发给我的测试人员或 App Store,或保存以备将来崩溃日志去符号化或符号化。

项目

项目是您用来在 Xcode 中组织代码和资源的文档。

您可以参考光盘上的源代码文件和资源文件,将这些文件实际构建到应用程序等产品中的目标,配置目标如何构建其产品的构建设置,以及配置如何执行操作(例如运行)的方案你的目标。

现在,要访问您的项目设置,请在导航器中选择您的项目,选择编辑器顶部的弹出框,然后在那里选择您的项目。

目标

您可以参考光盘上的源代码文件和资源文件、将这些文件实际构建到应用程序等产品中的目标、配置目标如何构建其产品的构建设置以及配置您如何执行操作的方案,例如运行 [test , build],与您的目标。目标包含构建诸如应用程序或框架之类的东西的指令。

你的目标产生的东西被称为它的产品。您的目标构建其产品所采取的一组步骤称为构建阶段。

最后,目标具有构建设置来配置其构建产品的方式。

现在,需要注意的一点是项目和目标都具有构建设置,目标继承了在项目级别设置的值,但可以用特定于目标的值覆盖它们。

目标的构建阶段会首先构建依赖关系,编译该目标中的源文件,并将目标与库和框架链接。

总结一下:

目标

帮助将一组文件放在一起以构建/运行产品/模块/包

  • 通常,它最终只是您发送到应用商店的产品。
  • 但通常它可以是一个模块,您只需对其运行单元测试。

就像单个应用程序可以有一个 iOS 目标和一个 watchOS 目标一样。或者只是一个 iOS 目标。或单个 iOS 目标以及测试目标等。

如果您转到目标的构建阶段 >> 编译源,您将看到为该目标构建的每个文件。例子:

在此处输入图像描述

要明确引用Apple 文档

目标指定要构建的产品,并包含从项目或工作区中的一组文件构建产品的说明。一个目标定义了一个单一的产品;它将构建系统的输入(源文件和处理这些源文件的指令)组织到构建该产品所需的内容中。项目可以包含一个或多个目标,每个目标产生一种产品。

构建产品的说明采用构建设置和构建阶段的形式,您可以在 Xcode 项目编辑器中检查和编辑它们。目标继承项目构建设置,但您可以通过在目标级别指定不同的设置来覆盖任何项目设置。一次只能有一个活动目标;Xcode 方案指定活动目标。

一个目标及其创建的产品可以与另一个目标相关联。如果一个目标需要另一个目标的输出才能构建,则称第一个目标依赖于第二个目标。如果两个目标都在同一个工作区中,Xcode 可以发现依赖关系,在这种情况下,它会按照所需的顺序构建产品。这种关系称为隐式依赖关系。您还可以在构建设置中指定显式目标依赖关系,并且可以指定 Xcode 可能期望具有隐式依赖关系的两个目标实际上不依赖。例如,您可以在同一工作区中构建一个库和一个链接到该库的应用程序。Xcode 可以发现这种关系并首先自动构建库。然而,

计划

一个给定的目标可以通过不同的行动。

  • 建造
  • 测试
  • 轮廓
  • 档案

您可以有一个启用所有诊断的方案(这会使调试变慢)与一个没有任何诊断的方案。或者运行某些性能相关测试的方案与同时运行单元测试和性能测试的方案。您可以编辑方案,使其执行以下操作:

  • 构建多个目标

  • 在任何操作之前或之后执行脚本

  • 在任何操作之前或之后发送电子邮件

  • 运行内存管理诊断

  • 为任何操作生成调试或发布版本。

有关更多信息,请参阅管理方案


把它们放在一起:

一旦你点击运行,Xcode 将查看选定的方案。它将找到其关联的目标。使用该目标的构建阶段及其构建设置(将包含任何未被目标设置覆盖的项目设置)将产品构建到选定的目标(目标可以是 iPhone 模拟器或物理 iPhone 或 watchOS , ETC)。 在此处输入图像描述

再次观看 WWDC 视频!

于 2021-03-04T13:46:08.703 回答
1

我的看法:

目标——一种较低的抽象——各种构建。每个目标都有自己的构建设置(因此,如果您拆分为多个目标,请为每个目标单独处理那张巨大的表格)。目标具有包含/排除文件的便捷方式,因此您可以基于每个文件有效地配置构建。

方案——更高的抽象——通过各种部署方式(运行、测试、存档)引导目标。具有通过环境参数配置构建的适度方法,但使用来自目标的构建设置。创建/编辑/删除方案比目标更便宜、更容易。

您可以有多个方案以几种不同的方式引导一个目标。

于 2020-12-03T08:41:36.613 回答