Xcode:用通俗的语言来说,什么是目标和方案?

eivgtgni  于 2022-11-26  发布在  其他
关注(0)|答案(6)|浏览(191)

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

qxsslcnc

qxsslcnc1#

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

*工作区-包含一个或多个 * 项目 *。这些项目通常相互关联
*项目-包含代码和资源等(您将习惯这些!)
*目标-每个项目都有一个或多个目标。

  • 每个目标都为该项目定义一个生成设置列表
  • 每个目标还定义了一个类、资源、自定义脚本等的列表,以便在构建时包括/使用。
  • 目标通常用于同一项目的不同分发。
  • 例如,我的项目有两个目标,一个是“普通”版本,另一个是“办公室”版本,后者具有额外的测试功能,可能包含几个背景音乐曲目和一个用于更改曲目的按钮(就像它目前所做的那样)。
  • 您将习惯于在添加类和资源时将它们添加到默认目标。
  • 您可以挑选将哪些类/资源添加到哪个目标。
  • 在我的示例中,我将一个“DebugHandler”类添加到了我的office build中
  • 如果您加入测试,也会加入新的目的。
    *方案-方案定义当您按下“构建”、“测试”、“配置文件”等时会发生什么。
  • 通常,每个目标至少有一个方案
  • 您可以转到“方案”〉“管理方案”,然后按“立即自动创建方案”,为目标自动创建方案
bxjv4tth

bxjv4tth2#

target是通过在Xcode中运行“build”创建的最终产品。它可能是一个应用程序、一个框架、一个静态库或一个单元测试包。无论它是什么,它通常对应于“built products”文件夹中的一个项目。
scheme表示您一起使用的目标的集合。它定义了当您在Xcode中选择各种操作时使用哪些目标(运行、测试、分析等)通常,您只有一个方案,该方案将主应用目标用于运行、存档和分析操作,并将单元测试目标用于测试操作。您可能有两个使用相同单元测试包但应用程序目标不同的方案。

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

kuarbcqp

kuarbcqp3#

我是一个视觉型的人,因此我将用一个图表来解释这个概念。
当您有多个目标时,它们可以与Xcode的Run、Test、Profile操作一一匹配,此概念定义了一个方案

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

ctzwtxfj

ctzwtxfj4#

Xcode结构

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

Workspace.xcworkspace)-是多个projects的容器。它是作为cross-project referencesAbout(https://stackoverflow.com/a/59218997/4770877)的下一步创建的

  • Workspace包含所包含projects中的所有schemes
  • Workspace处理所有implicit dependenciesAbout(https://stackoverflow.com/a/59218952/4770877)

观察结果:

  • 在同一个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
  • CocoapodsAbout(https://stackoverflow.com/a/59218904/4770877)使用workspace在其中创建Pods项目
    Project.xcodeproj)-它是targetsscheme的容器。它定义代码文件、资源...

此外,Projects还管理Build Configuration(由scheme更改)和Build Configuration FileAbout(https://stackoverflow.com/a/64266553/4770877)
您可以将现有的Project转换为Workspace

File -> Save As Workspace...

Workspace vs Project(https://stackoverflow.com/a/59236567/4770877)

Target-PBXNativeTarget节。定义一组特定的生成设置,用于生成:

  • x1米25英寸
  • Library and framework targets
  • Test
  • AggregateAbout(https://stackoverflow.com/a/59215042/4770877)。例如,它用于创建Universal frameworkUmbrella framework
    Scheme

包含操作(运行、测试、分析、分析、存档)+配置(附加参数、Build Configuration(https://stackoverflow.com/a/64266553/4770877)、诊断)
方案可以共享,这有助于您进行CI,CarthageExample(https://stackoverflow.com/a/61408166/4770877)...并位于:

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

Dependency-Targets可以具有dependencies。依赖项是针对的源链接。这些依赖项可以静态或动态链接About(https://stackoverflow.com/a/59216858/4770877)它们有两种类型:

  • Explicit DependencyAbout(https://stackoverflow.com/a/59219025/4770877)-位于同一项目嵌套项目中的依赖项的源代码
  • Implicit DependencyAbout(https://stackoverflow.com/a/59218952/4770877)-相依性的原始程式码/关闭程式码,位于属于相同工作区一部分的项目中。

Vocabulary(https://stackoverflow.com/a/59216151/4770877)

huus2vyu

huus2vyu5#

tldr;目标包含构建模块/最终产品/应用的说明,例如构建watchOS应用和iOS应用的说明。方案知道如何响应某些 * 操作 *,例如构建操作或测试操作或存档操作。
确保你看到了WWDC16 video — Introduction to Xcode [45:13]。如果你想获得更深的知识,那么就看完整的视频。这个视频很简单,但非常基础。我的答案基本上是关闭的。
方案
方案是指定要运行的内容的方式,它还包含有关要如何运行方案的信息。
例如,我可能有一个包含iOS应用程序和Watch应用程序的项目,在这种情况下,我将有一个方案运行iOS应用程序,一个方案运行Watch应用程序
Run将在调试器中运行我的应用程序。
测试将运行我的测试。
Profile将在仪器中运行我的应用程序,这样我就可以测量它的性能。
分析将运行Xcode的静态分析器,并帮助捕捉我可能会错过的问题。
最后,Archive(存档)操作将构建我的应用以供发布,并将其放入存档中,然后我可以将其分发给我的测试人员或应用商店,或保存以供未来的崩溃日志去符号化或符号化。
项目
项目是一个文稿,用于在Xcode中组织代码和资源。
您可以引用光盘上的源代码文件和资源文件、实际将这些文件构建到应用等产品中的目标、配置目标如何构建其产品的构建设置以及配置如何对目标执行操作(如运行)的方案。
现在,要访问项目设置,请在导航器中选择项目,选择编辑器顶部的弹出窗口,然后在那里选择项目。
目标
您可以引用光盘上的源代码文件和资源文件、将这些文件实际构建到产品(如您的应用)中的目标、配置目标如何构建其产品的构建设置以及配置您如何对目标执行操作(如运行[测试,构建])的方案。目标包含构建应用或框架等内容的指令。
你的目标生产的东西叫做它的产品,你的目标用来构建它的产品的一系列步骤叫做构建阶段。
最后,目标具有构建设置,用于配置其构建产品的方式。
现在,需要注意的一点是,项目和目标都有Build设置,目标继承在项目级别设置的值,但可以用特定于目标的值覆盖它们。
目标的构建阶段会首先构建依赖项,编译目标中的源文件,并将目标链接到库和框架。
总结一下:

目标

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

  • 通常它最终只是一个产品,你船舶到应用程序商店。
  • 但通常它可以是一个模块,您只需对它运行单元测试。

比如一个应用可以有一个iOS目标沿着一个watchOS目标,或者只有一个iOS目标,或者一个iOS目标和一个测试目标,等等。
如果你进入目标的Build Phase〉〉Compile Sources,你会看到为该目标构建的每个文件。

要明确引用Apple文档:
目标指定要生成的产品,并包含从项目或工作区中的一组文件生成产品的说明。目标定义单个产品;它将生成产品所需的输入(源文件和处理这些源文件的指令)组织到生成系统中。项目可以包含一个或多个目标,每个目标生成一个产品。
构建产品的说明采用构建设置和构建阶段的形式,您可以在Xcode项目编辑器中检查和编辑它们。目标继承项目构建设置,但您可以通过在目标级别指定不同的设置来覆盖任何项目设置。一次只能有一个活跃的目标; Xcode方案指定活动目标。

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

方案

一个给定的目标可以经历不同的行动。

  • 建筑物
  • 运行
  • 试验,测验
  • 剖面图
  • 归档

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

  • 构建多个目标
  • 在任何操作之前或之后执行脚本
  • 在任何操作之前或之后发送电子邮件
  • 运行内存管理诊断
  • 为任何动作产生两柴或出版组建。

有关详细信息,请参阅Customizing the build schemes for a project
综合起来看:
点击“运行”后,Xcode将查看所选的 scheme。它将找到其关联的 * 目标 *。使用该目标的 * 构建阶段 * 及其 * 构建设置 *(任何未被目标设置覆盖的 * 项目设置 * 都将被包括在内)将产品构建到所选的目标中(目标可以是iPhone模拟器或物理iPhone或watchOS等)。

再次观看WWDC视频!

tvokkenx

tvokkenx6#

我的看法:

目标--一个较低的抽象--各种构建。每个目标都有自己的构建设置(所以如果你拆分成几个目标,请为每个目标单独处理那个巨大的工作表)。目标有一个包含/排除文件的方便方法,所以你可以在每个文件的基础上有效地配置构建。
方案-一种更高的抽象概念--通过各种部署方式(运行、测试、存档)指导目标。具有通过环境参数配置生成的一般方法,但采用目标中的生成设置。创建/编辑/删除方案比创建/编辑/删除目标便宜且容易。

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

相关问题