ios - Xcode 的 ":configuration"条件编译指令如何在 xcconfig 文件中工作?

标签 ios xcode

当复制目标的build设置并将它们作为纯文本粘贴到 xcconfig 文件中时,会发现输出被每个构建配置的条件分割开,例如:

//:configuration = Debug
SETTING = value
SETTING = value
SETTING = value

//:configuration = Release
SETTING = value
SETTING = value
SETTING = value

//:completeSettings = some
SETTING
SETTING
SETTING

关于如何使用“:configuration”指令的一些问题:

  1. 如果我在同一个文件中指定一个高于所有配置的设置,它会应用于所有构建配置吗?

  2. 我假设它们适用于它们下面的一组设置,但它们适用于空行后面的设置吗?

最佳答案

简答:

注释既不是条件也不是指令。 它们只是注释,用于阐明后面的条目适用于哪些构建配置。当您复制目标的完整build设置时,生成的文本并不意味着在单个 xcconfig 文件中使用。相反,它可用于提取不同配置文件所需的元素。这些注释使您可以轻松找到特定构建配置所需的设置。

因此,如果您将 xcconfig 文件分配给目标的调试构建配置,您可以将 //:configuration = Debug 下的设置复制到该文件,然后在那里进行任何更改,根据需要。

长答案:

您可以为每个目标的每个构建配置分配一个 xcconfig 文件。

(您在项目的信息编辑器中执行此操作,在配置下,您会在其中找到配置列表,其中每个配置都可以展开为显示一个由项目及其目标组成的列表。您可以通过从配置文件列表中选择一个配置文件来为其中的每一个分配一个配置文件。列出的配置文件包含您添加到项目中的所有配置文件。)

已分配的 xcconfig 文件中列出的设置用于构建build设置为其分配给的目标和构建配置组合,它们将反射(reflect)在build设置编辑器中代码。构建系统使用配置设置的层次结构,用于构建最终将应用的设置。

*(您可以在 Xcode build设置编辑器中看到这一点,选择build设置编辑器顶部的 AllLevels 到所有内容。)构建系统启动使用平台的默认值(例如 iOS Default)。这些可以通过项目级别的设置进行更改,然后通过目标级别的设置进行更改。 Build Settings 编辑器最终列出了Resolved 设置,以便您可以准确地看到将应用哪些设置。)*

设置按以下顺序应用,其中每个后续条目将覆盖之前的设置:

Default -> Project Config File -> Project -> Target Config File -> Target.

因此,如果您在分配给特定构建配置的项目的配置文件中指定了一个有效架构,那么该设置将覆盖默认设置。但是,如果在 Xcode 的build设置编辑器中,您在项目级别为该设置指定了另一个值,那么该值将覆盖 xcconfig 文件中指定的值。接下来,如果 xcconfig 文件中有一个条目用于该构建配置的目标,那么将应用该值,当然,除非它被build设置编辑器中目标级别的该设置的值覆盖。 (还困惑吗?:-)

如我所写,每个目标/构建配置组合只能应用一个 xcconfig 文件。幸运的是,xcconfig 文件可以导入其他 xcconfig 文件,以便可以将设置组组合成逻辑单元,然后导入到最终的 xcconfig 文件中,这些文件将被分配给目标/构建配置。如果您想了解有关 xcconfig 文件内容的更多信息,请查看此处: The Unofficial Guide to xcconfig files

关于ios - Xcode 的 ":configuration"条件编译指令如何在 xcconfig 文件中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42355160/

相关文章:

ios - 如何在循环中执行多个 guard 语句?

objective-c - 显示来自 UITableViewCell 类的警报 - Objective c

swift - 来自 Xcode 和 Swift 包管理器的 Git Push

iphone - Objective-C 表单框架

ios - clearColor 使背景色变黑

ios - 在推送到详细导航时设置 UISplitViewController 的 preferredDisplayMode

ios - 将 WordPress iOS 应用程序与受 Shibboleth 保护的 WordPress 结合使用

iphone - 带有静态单元格的 UITableViewController : contentSize is {0, 0}

ios - 使用 SLPagingViewSwift 和 Storyboard展开可选值时意外发现 nil

ios - 准备一个未签名的 Xcarchive