Xcode: 项目设置 vs. 目标设置

35
我正在为我们的客户在Mac OS X上创建一个静态库,以及一个小的命令行应用程序来测试这个静态库。命令行项目有两个额外的库搜索路径,这意味着我在Release模式下链接到Debug版本,差点让我疯掉,所以我试图摆脱这两个路径,但我找不到它们的具体位置。我一直在项目信息中寻找,但最终发现它们是在目标信息中指定的。
我不明白这个区别!为什么会有两组实质上相同的设置?!是否有人能够给我解释一下?
3个回答

50
一个项目可以包含多个目标。例如,我编写的应用程序有四个目标:应用程序本身、一个快速查看插件、一个框架和一个包,其中包含可在 Mac OS 10.6 上动态加载的特定功能。
项目设置适用于项目中的每个目标。然后,每个目标可以覆盖个别设置,如果需要的话。例如,我的项目的目标 SDK 设置为10.5,但是专门针对 10.6 的包将其目标 SDK 设置为 10.6。
在某些情况下,一些设置不适合放在项目设置中,搜索路径就是其中之一。

相关问题:我应该如何将静态库包含到命令行应用程序项目中?是通过将其拖放到源文件列表中还是从构建设置中进行操作? - vectorizor
4
@iKenndac,您能解释一下为什么“某些设置在项目设置中没有意义”吗?我每个项目只有一个目标,但我仍然困惑于设置搜索路径。 - topace

13

在一个项目中,通常会有多个目标——例如,你可能有一个框架项目,其中包含构建动态 .framework 捆绑包的目标,以及构建静态库的目标。或者你的应用程序可能有一个目标,用于构建应用程序本身,以及一个目标,用于构建它需要安装的一些辅助命令行工具。

建议尽可能在最高级别(在项目设置中,并同时更改调试和发布配置)更改设置,并仅在必要时自定义目标设置。更好的做法是将尽可能多的设置移动到 xcconfig 文件中,这似乎是指定构建设置的更明确的方式。


2
前言:你的目标是交付目标,而不是项目。把项目看作是多个目标上面的伞。
举一个更加实际的例子,假设Uber和Lyft都是由你(伞)的公司开发的。
该公司有以下三种环境:
- Debug - QA - Release Debug和Release配置随每个新创建的项目一起提供。您可以创建尽可能多的其他配置。
这将需要3个配置。若要添加QA配置,请参考 这里 的教程。

enter image description here

我是将此应用于目标还是项目?

我将其应用于项目。

那么配置只适用于项目而不适用于目标。对吗?

不正确!我知道这很令人困惑。您必须将项目视为一个大容器,在其中创建配置。

然后对于每个目标(而不是项目),有以下选项卡:

常规、资源标签、构建规则、信息:

在不同的配置之间没有区别

签名和功能选项卡:

您可以在团队之间切换并使用不同的团队进行签名。如果您想使用企业证书签署测试版构建,但使用应用商店证书签署Appstore构建,则此功能非常有用。

构建设置选项卡:

对于此部分中的几乎每个变量,您都可以基于配置提供不同的值。要自定义的常见构建设置包括:

  • 架构 - '仅构建活动架构'
  • 构建选项 '调试信息格式'
  • 打包
  • 设置每个配置所需的plist。
  • 更改捆绑标识符(打包 >> 产品捆绑标识符)。如果您为字段切换值,则在plist中将看到如下内容:
  • 签名
  • 代码签名身份
  • 代码签名样式(手动或自动)
  • 开发团队
  • 配置文件
  • Apple Clang - 优化级别

如果值不同,则该行的值将是

<Multiple values>

您基本上需要扩展该值,以查看为调试、发布或QA配置给出的值。

如果所有值都相同,则只会看到赋给它们所有值的值。默认情况下,这些值相同。

构建阶段: 没有基于配置切换的GUI方式。但是,您仍然可以根据配置运行某些命令。例如:

if [ "${CONFIGURATION}" = "Debug" ]; then
"${PODS_ROOT}/SwiftLint/swiftlint" autocorrect
"${PODS_ROOT}/SwiftLint/swiftlint"
fi

概述

长话短说,这使你可以在三个不同的环境(开发、QA、发布)中使用相同的代码(项目)创建两个不同的应用程序(目标)。您可以使用配置文件创建不同的环境。

要了解更多信息,我强烈建议您深入了解并了解配置文件(xcconfig)是什么。它比你想象的简单得多。它主要是一个键值对:


这是一个非常有帮助的答案。 - SmileBot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接