【发布时间】:2014-01-05 09:48:46
【问题描述】:
是的,标题说明了 :-) 它们在简单的英语中是什么意思?我真的不明白苹果网站上的解释,我需要重命名我的目标,我担心在那之后没有任何效果..
【问题讨论】:
标签: ios xcode xcode-scheme xcode-target
是的,标题说明了 :-) 它们在简单的英语中是什么意思?我真的不明白苹果网站上的解释,我需要重命名我的目标,我担心在那之后没有任何效果..
【问题讨论】:
标签: ios xcode xcode-scheme xcode-target
我也在 Workspace 和 Project 中添加了!
【讨论】:
target 是通过在 Xcode 中运行“构建”创建的最终产品。它可能是应用程序、框架、静态库或单元测试包。不管它是什么,它通常对应于“已构建产品”文件夹中的单个项目。
方案代表您一起工作的目标集合。它定义了当您在 Xcode 中选择各种操作(运行、测试、配置文件等)时使用哪些目标。通常,您只有一个方案,它将主应用程序目标用于运行、存档和配置文件操作,以及一个测试操作的单元测试目标。如果您正在构建两个相关的应用程序,您可能有两个使用相同单元测试包但应用程序目标不同的方案。
方案(在 Xcode 4 中引入)的主要好处是它们允许您在运行应用程序和单元测试之间切换,而无需切换所选目标。
【讨论】:
我是一个视觉型的人,因此我将使用图表来解释这个概念。
当您有多个目标时,它们可以与 Xcode 的 Run、Test、Profile 操作一对一匹配,这个概念定义了一个 scheme
目标是您的项目的一个版本,即目标在构建时使用的类和资源略有不同。一个项目可以有多个构建时间设置,以满足不同的分发要求。
【讨论】:
Xcode 结构
Workspace
-> Project
-> Target
-> Dependency
-> Scheme
-> Action
-> Build Configuration
-> Build Configuration File(.xcconfig)
Workspace (.xcworkspace) - 是多个projects 的容器。它是作为cross-project references[About]的下一步创建的
Workspace 包含 schemes 中的所有 projects
Workspace 处理所有 implicit dependencies[About]
观察:
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[About] 与 workspace 一起创建 Pods 项目Project (.xcodeproj) - 它是targets 和scheme 的容器。它定义了代码文件、资源……
还有Projects 管理Build Configuration(由scheme 更改)和Build Configuration File[About]
您可以将现有的Project 转换为Workspace
File -> Save As Workspace...
Target - PBXNativeTarget 部分。定义一组特定的生成设置,生成:
Application targetLibrary and framework targetsTestAggregate[About]。例如。它用于创建Universal framework 或Umbrella framework
Scheme
包含操作(运行、测试、配置文件、分析、存档)+ 配置(附加参数、[Build Configuration]、诊断)
方案可以共享,在 CI 中为您提供帮助,Carthage[Example]... 并位于:
<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes
Dependency - Targets 可以有 dependencies。依赖是针对源链接的。这些依赖可以静态链接也可以动态链接[About]有两种:
【讨论】:
tldr;目标包含构建模块/最终产品/应用程序的指令,例如构建 watchOS 应用和 iOS 应用的说明。方案知道如何响应某些动作,例如构建操作或测试操作或存档操作。
确保您看到this moment of WWDC video — Introduction to Xcode。如果您想获得更深入的知识,请观看整个视频。该视频易于理解,但非常基础。我的答案大多是这样的。
方案是您指定要运行的内容的方式,它还包含 有关如何运行它的信息。
例如,我可以有一个包含 iOS 应用和 Watch 应用的项目, 在这种情况下,我将有一个方案来运行我的 iOS 应用程序和一个 运行我的 Watch 应用的计划
Run 将在调试器中运行我的应用程序。
Test 将运行我的测试。
Profile 将在仪器中运行我的应用程序,以便我可以测量它 性能。
Analyze 将运行 Xcode 的静态分析器并帮助发现问题 否则可能会错过。
最后,存档操作将构建我的应用程序以供发布并放置 它在存档中,然后我可以用来分发给我的测试人员或 到 App Store 或保存以备将来崩溃日志去符号化,或 符号化。
项目是用于组织代码的文档 Xcode 中的资源。
您对光盘上的源代码文件和资源文件有参考, 实际将这些文件构建到您的应用程序等产品中的目标, 构建设置,配置您的目标如何构建他们的产品, 以及配置您如何执行操作(例如运行)的方案 你的目标。
现在,要访问您的项目设置,请在 导航器,您选择编辑器顶部的弹出框,然后选择 你的项目在那里。
您对光盘上的源代码文件和资源文件有参考, 实际将这些文件构建到您的应用程序等产品中的目标, 构建设置,配置您的目标如何构建他们的产品, 以及配置如何执行操作的方案,例如运行 [test, build],使用 你的目标。 一个目标包含构建一个东西的指令,比如一个应用程序或一个 框架。
你的目标产生的东西被称为它的产品。该组 您的目标构建其产品所采取的步骤称为构建 阶段。
最后,一个目标有构建设置来配置它如何构建它的 产品。
现在,需要注意的一件事是项目和目标都有 Build 设置和目标继承在项目级别设置的值,但 可以用特定于目标的值覆盖它们。
目标的构建阶段会做一些事情,比如构建依赖关系 首先,编译该目标中的源文件,并链接目标 针对库和框架。
总结一下:
帮助将一组文件放在一起以构建/运行产品/模块/包
就像一个应用程序可以同时拥有一个 iOS 目标和一个 watchOS 目标。或者只是一个 iOS 目标。或者单个 iOS 目标以及测试目标等。
如果您转到目标的构建阶段 >> 编译源,您将看到为该目标构建的每个文件。示例:
明确引用Apple docs:
目标指定要构建的产品,并包含从项目或工作区中的一组文件构建产品的说明。一个目标定义了一个单一的产品;它将构建系统的输入(源文件和处理这些源文件的指令)组织到构建该产品所需的内容中。项目可以包含一个或多个目标,每个目标产生一个产品。
构建产品的说明采用构建设置和构建阶段的形式,您可以在 Xcode 项目编辑器中检查和编辑它们。目标继承项目构建设置,但您可以通过在目标级别指定不同的设置来覆盖任何项目设置。一次只能有一个活动目标; Xcode 方案指定活动目标。
一个目标及其创建的产品可以与另一个目标相关。如果一个目标需要另一个目标的输出才能构建,则称第一个目标依赖于第二个目标。如果两个目标都在同一个工作区中,Xcode 可以发现依赖关系,在这种情况下,它会按照所需的顺序构建产品。这种关系称为隐式依赖关系。您还可以在构建设置中指定显式目标依赖关系,并且可以指定 Xcode 可能期望具有隐式依赖关系的两个目标实际上不依赖。例如,您可以在同一工作区中构建一个库和一个链接到该库的应用程序。 Xcode 可以发现这种关系并首先自动构建库。但是,如果您确实想要链接到工作区中构建的库版本以外的库版本,则可以在构建设置中创建显式依赖项,它会覆盖此隐式依赖项。
一个给定的目标可以通过不同的行动。
您可以拥有一个启用了所有诊断的方案(这会使调试变慢)与一个没有任何诊断的方案。或者运行某些性能相关测试的方案与同时运行单元测试和性能测试的方案。您可以编辑方案,使其执行以下操作:
构建多个目标
在任何操作之前或之后执行脚本
在任何操作之前或之后发送电子邮件
运行内存管理诊断
为任何操作生成调试或发布版本。
有关更多信息,请参阅Managing Schemes
把它们放在一起:
点击运行后,Xcode 将查看选定的scheme。它将找到其关联的目标。使用该目标的 Build Phases 及其 Build Settings(将包含任何未被目标设置覆盖的 Project Settings)来将产品构建到选定的目的地(目的地可以是 iPhone 模拟器或物理 iPhone 或 watchOS 等)。
再次观看 WWDC 视频!
【讨论】:
我的看法:
Target -- 较低的抽象 -- 各种构建。每个目标都有自己的构建设置(因此,如果您拆分为多个目标,请为每个目标单独处理那张巨大的表格)。目标具有包含/排除文件的便捷方式,因此您可以基于每个文件有效地配置构建。
方案 -- 一种更高的抽象 -- 通过各种部署方式(运行、测试、存档)引导目标。具有通过环境参数配置构建的适度方法,但使用来自目标的构建设置。创建/编辑/删除方案比目标更便宜、更容易。
您可以有多个方案以几种不同的方式引导一个目标。
【讨论】: