Xcode:在普通语言中,什么是目标和方案?

是的,标题是这么说的:-)它们在通俗英语中是什么意思?我真的不明白苹果网站上的解释,我需要重新命名我的目标,恐怕在那之后就什么都不管用了。

77291 次浏览

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

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

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

我也添加了工作区和项目!

  • 工作空间 -包含一个或多个项目。这些项目通常相互关联
  • 项目 -包含代码和资源等(你会习惯这些!)
  • 目标 -每个项目有一个或多个目标。
    • 每个目标都为该项目定义了一个生成设置列表
    • 每个目标还定义了一个类、资源、自定义脚本等列表,以便在构建时包含/使用。
    • 目标通常用于同一个项目的不同发行版。
      • 例如,我的项目有两个目标,一个“普通”构建和一个“办公室”构建,后者具有额外的测试功能,可能包含几个背景音乐轨道和一个更改轨道的按钮(就像它目前所做的那样)。
      • 您将习惯于在添加类和资源时将它们添加到默认目标。
      • 您可以选择将哪些类/资源添加到哪个目标。
        • 在我的例子中,我有一个“DebugHandler”类,它被添加到我的办公室构建中
        • 李< / ul > < / >
        • 如果添加测试,也会添加一个新目标。
        • 李< / ul > < / > 李< / ul > < / >
        • 计划 - scheme定义当你按下“构建”,“测试”,“配置文件”等时会发生什么。
          • 通常,每个目标至少有一个方案
          • 你可以为你的目标自动创建方案,进入方案>管理方案,然后按“自动创建方案现在”
          • 李< / ul > < / >

我是一个视觉人,因此我将用一个图表来解释这个概念。

当你有多个目标时,它们可以与Xcode的Run,Test,Profile动作一一匹配,这个概念定义了计划

enter image description here

目标是你的项目,i的一个版本。目标在不同的班级略有不同。在构建期间使用的资源。对于不同的分发需求,项目可以有多个构建时间设置。

Xcode结构

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

< >强Workspace < / >强 (.xcworkspace) -是多个projects的容器。它是作为cross-project references<一口>[对]< /一口>的下一步创建的

  • Workspace包含包含在projects中的所有schemes
  • 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

Project (.xcodeproj)——它是targetsscheme的容器。它定义了代码文件、资源……

此外,Projects管理Build Configuration(由scheme更改)和Build Configuration File<一口>[对]< /一口>

你可以将现有的Project转换为Workspace

File -> Save As Workspace...

[工作空间vs项目]

Target - PBXNativeTarget section。定义一个特定的生成设置集,生成:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate<一口>[对]< /一口>。例如,它用于创建Universal frameworkUmbrella framework

Scheme

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

Scheme可以是共享,它可以帮助你进行CI, Carthage<一口>[例]< /一口>…和位于:

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

Dependency - Targets可以有dependencies。依赖项是针对的源链接。这些依赖关系可以静态地或动态地链接。

  • Explicit Dependency<一口>[对]< /一口> -位于同一项目嵌套的项目中的依赖项的源代码
  • Implicit Dependency<一口>[对]< /一口> -位于项目中的依赖项的源/关闭代码,该项目是同一工作空间的一部分。

< a href = " https://stackoverflow.com/a/59216151/4770877 " > < / >(词汇)

我采用的方法:

目标——一个较低的抽象——各种构建。每个目标都有自己的构建设置(所以如果你分成几个目标,请为每个目标单独照顾那个巨大的表)。目标有一种包括/排除文件的方便方式,因此您可以在每个文件的基础上有效地配置构建。

计划——一个更高的抽象——引导目标通过各种部署方式(运行、测试、存档)。通过环境参数配置构建的方法比较简单,但使用目标中的构建设置。创建/编辑/删除方案比目标更便宜、更容易。

你可以用几种不同的方法来引导一个目标。

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

确保你看到WWDC16视频- Xcode介绍[45:13]。如果你想获得更深入的知识,那就观看完整的视频。这个视频很简单,但非常基础。我的答案基本上就是这样。


计划

一个方案是你如何指定你想要运行什么,它也包含 关于你想如何运行它的信息 例如,我可以有一个带有iOS应用程序和Watch应用程序的项目, 在这种情况下,我有一个方案来运行我的iOS应用程序,还有一个 计划运行我的手表应用程序

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

测试将运行我的测试。

配置文件将在仪器中运行我的应用程序,以便我可以测量它 性能。< / p >

Analyze将运行Xcode的静态分析器,帮助捕获问题I

最后,Archive动作将构建我的应用程序以发布和放置 我可以把它放在存档里,然后分发给我的测试人员或者 保存到应用程序商店或为将来的崩溃日志去符号化,或者 symbolication . < / p >

项目

项目是一个文档,你用来组织你的代码和

你在光盘上有源代码文件和资源文件的引用, 目标会将这些文件构建到产品中,比如你的应用, 构建设置,配置你的目标如何构建他们的产品, 以及配置如何执行操作的方案,例如Run 你的目标。< / p >

现在,要访问您的项目设置,您可以在 导航器,选择编辑器顶部的弹出窗口,然后选择

目标

你在光盘上有源代码文件和资源文件的引用, 目标会将这些文件构建到产品中,比如你的应用, 构建设置,配置你的目标如何构建他们的产品, 以及配置如何执行操作的方案,例如Run [test, build],使用 你的目标。 目标包含构建一个东西的指令,比如应用程序或 框架。< / p > 你的目标生产的东西叫做它的产品。一套 目标构建其产品所采取的步骤称为构建 阶段。< / p > 最后,一个目标有构建设置来配置它如何构建它的 产品。< / p > 现在,要注意的一件事是项目和目标都有Build 设置,目标继承在项目级别设置的值,但是

目标的构建阶段会做一些事情,比如导致依赖关系的构建 首先,编译该目标中的源文件,并链接该目标

总结:

目标

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

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

比如一个应用程序可以有一个iOS目标和一个watchOS目标。或者只是一个iOS Target。或者一个单独的iOS目标和一个测试目标,等等。

如果你进入目标的构建阶段>>Compile Sources您将看到为该目标构建的每个文件。例子:

enter image description here

显式引用苹果公司的文档:

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

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

目标和它所创建的产品可以与另一个目标相关联。如果一个目标需要另一个目标的输出来构建,则第一个目标依赖于第二个目标。如果两个目标都在同一个工作空间中,Xcode可以发现依赖关系,在这种情况下,它会按照所需的顺序构建产品。这种关系被称为隐式依赖关系。你也可以在你的构建设置中指定显式的目标依赖关系,你可以指定两个Xcode可能期望有隐式依赖关系的目标实际上是不依赖的。例如,您可以在同一个工作空间中构建一个库和一个链接到该库的应用程序。Xcode可以发现这种关系,并首先自动构建库。但是,如果您实际上希望链接到库的其他版本,而不是在工作区中构建的版本,则可以在构建设置中创建显式依赖项,该依赖项将覆盖此隐式依赖项。

计划

给定的目标可以通过不同的行动来实现。

  • 构建
  • 运行
  • 测验
  • 配置文件
  • 存档

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

  • 建立多个目标

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

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

  • 运行内存管理诊断

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

有关更多信息,请参见为项目定制构建方案


把它们放在一起:

一旦你点击运行,Xcode将查看选定的计划。它将找到其关联的目标(年代)。使用该目标的构建阶段及其建立设置(任何未被目标设置覆盖的项目设置将被包括在内)将产品构建到选定的目的地(目的地可以是iPhone模拟器或物理iPhone或watchOS等)。 enter image description here < / p >

再次观看WWDC视频!