Xcode:项目设置与目标设置

Posted

技术标签:

【中文标题】Xcode:项目设置与目标设置【英文标题】:Xcode: project settings vs. target settings 【发布时间】:2010-12-11 04:37:09 【问题描述】:

我正在为我们的一位客户在 Mac OS X 上创建一个静态库,以及一个用于测试静态库的小型 cmd 行应用程序。 cmd line 项目有 2 个额外的库搜索路径,这意味着我在 Release 模式下链接到 Debug 版本并且快疯了,所以我试图摆脱这两个路径,但我找不到它们被指定的位置.我在查看项目信息,但事实证明它们是在目标信息中指定的。

我不明白区别?!为什么有两组设置,本质上是一样的?!有人可以启发我吗?

【问题讨论】:

【参考方案1】:

一个项目可以包含多个目标。例如,我编写的一个应用程序有四个 - 应用程序本身、一个 Quick Look 插件、一个框架和一个包含可以动态加载的 Mac OS 10.6 特定功能的包。

项目设置适用于项目中的每个目标。然后,如果需要,每个目标都可以覆盖单独的设置 - 例如,我的项目的 Target SDK 设置为 10.5,但特定于 10.6 的捆绑包将其 Target SDK 设置为 10.6。

在某些情况下,某些设置在项目设置中没有意义 - 我猜其中之一是搜索路径。

【讨论】:

推论问题:我应该如何将静态库包含到 cmd 行应用程序项目中?通过拖放到源文件列表中?还是来自构建设置? @iKenndac,您能解释一下为什么“某些设置在项目设置中没有意义”吗?我在每个项目中只有一个目标,我仍然对设置搜索路径感到困惑。【参考方案2】:

您通常在单个项目中有多个目标 - 例如,您可能有一个框架项目,其中一个目标是构建为动态 .framework 包,一个目标是构建静态库。或者您的应用可能有一个用于构建应用本身的目标,以及一个用于构建需要安装的一些辅助命令行工具的目标。

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

【讨论】:

【参考方案3】:

前言:你运送目标。您的最终产品是目标。不是项目。将项目视为多个目标之上的保护伞。

举一个更现实的例子,假设 Uber 和 Lyft 都是由您的(伞形)公司开发的。

公司有以下三种环境:

调试 质量检查 发布

调试和发布配置随您创建的每个新项目开箱即用。您可以根据需要创建任意数量的其他配置

这需要 3 个配置。要添加 QA 配置,请按照教程 here

我是否将此应用于目标或项目?

我将它应用到项目中。

好的,所以配置仅适用于项目,不适用于目标。对吧?

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

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

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

不同的配置没有区别

签名和功能标签:

您可以在团队之间切换并与其他团队签约。如果您想使用企业证书签署您的 beta 版本,但使用应用商店证书签署您的 Appstore 版本,这将非常有用。

构建设置标签:

对于本节中的几乎每个变量,您都可以根据配置给出不同的值。要自定义的常见构建设置是:

架构 - 'Build Active Architecture only' 构建选项“Debug Information Format” 包装 根据配置设置所需的 plist。 更改捆绑标识符(包装>>产品捆绑标识符)。如果你切换一个字段的值,那么在 plist 中你会看到: 签约 代码签名身份 代码签名样式(手动或自动) 开发团队 配置文件 Apple Clang - 优化级别

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

<Multiple values>

并且您基本上必须扩展该值以查看为调试提供的值以及为发布或 QA 配置提供的值。

如果所有值都相同,那么您只会看到赋予所有值的值。默认情况下,值是相同的。

长话短说,这允许您在 3 个不同的环境(开发、QA、发布)中使用相同的代码(项目)拥有 2 个不同的应用(目标)。您使用配置创建不同的环境。

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

AppCoda - Using Xcode Configuration (.xcconfig) to Manage Different Build Settings NSHipster - Xcode Build Configuration Files

【讨论】:

以上是关于Xcode:项目设置与目标设置的主要内容,如果未能解决你的问题,请参考以下文章

如何设置具有相同捆绑版本的两个目标的 XCode 项目

xcode 构建设置组

Xcode 4 - 专用配置设置:构建设置和方案定义

Xcode 项目中多个目标的特定关联域

xcode 4.6 目标构建设置缺少“Apple LLVM 编译器 4.2 - ...”部分

#define 在目标构建设置的“用户定义”部分,在 xcode 编译代码时未定义