建立配置文件(xcconfig)格式参考
构建配置文件(也称为xcconfig文件)是一个纯文本文件,它定义并覆盖项目或目标的特定构建配置的构建设置。 这种类型的文件可以在Xcode之外编辑,并与源代码控制系统很好地集成。 构建配置文件遵循特定的格式化规则,如果没有,则会生成构建警告。
注:要了解如何将构建配置文件添加到项目中,请参阅添加构建配置(xcconfig)文件。
注释
使用单行注释来包含应由生成系统忽略的注释或其他信息。 每条评论都以两个正斜杠(//)开始,并持续到该行的末尾。 例如:
//
// Config.xcconfig
// My iOS App//
// Created by Johnny Appleseed on 11/15/16.
// Copyright ? 2017 Apple. All rights reserved.
//
评论可以独立存在于一行上,也可以遵循构建设置值。 例如:
ASSETCATALOG_COMPILER_APPICON_NAME = MyAppIcon //这是一条评论。
指定生成设置值
构建配置文件不需要列出所有可能的构建设置。 它只需要包括你想要定制的。 每个版本设置值都以单行格式定义:
BUILD_SETTING_DECLARATION_NAME = BUILD_SETTING_VALUE_DEFINITION
例如:
ONLY_ACTIVE_ARCH = YES
有许多价值类型,但以下是最常见的
值类型 描述
布尔 值为YES或NO。
串 指定的文本值。
枚举(字符串) 预定义的文本值。
字符串列表 字符串值的空格分隔列表。 如果字符串列表中的字符串包含空格,则该字符串必须用引号括起来。
路径 文件或目录路径,采用POSIX格式。
路径列表 空格分隔的路径值列表。 如果路径列表中的路径包含空格,则该路径必须用引号括起来。
对于构建设置声明名称及其值定义,都会忽略前导空格和尾随空格。如果相同条件的构建设置(请参阅条件化构建设置值)被多次定义,则使用最终实例,而忽略所有其他条件。
注意:当您在项目编辑器的“生成设置”窗格中选择生成设置时,生成设置声明名称将显示在“快速帮助”检查器中。您还可以在“生成设置”参考中找到生成设置声明名称。
防止重写值
要保留现有项目或目标版本设置值作为新定义值的一部分,请使用格式为$(inherited)的变量:
BUILD_SETTING_DECLARATION_NAME = $(继承)ADDITIONAL_VALUE
例如:
OTHER_SWIFT_FLAGS = $(继承)-v
引用另一个构建设置的值
要引用另一个生成设置的值,请按照以下格式参考其他生成设置声明名称:
BUILD_SETTING_DECLARATION_NAME = $(OTHER_BUILD_SETTING_DECLARATION_NAME)
例如:
OBJROOT = $(SYMROOT)
其他构建设置值可以如下内联引用:
DSTROOT = /tmp/$(PROJECT_NAME).dst
要么:
CONFIGURATION_BUILD_DIR = $(BUILD_DIR)/ $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
有条件地建立设定值
当一个平台针对一个平台时,项目可能需要以不同方式构建。为了实现这一点,构建系统支持以下条件:
条件 条件值
SDK 一个SDK,比如macos10.12或者iphoneos10.2。 要匹配给定平台的任何SDK,请提供星号(*)而不是版本。 例如,macos *的条件值匹配任何macOS SDK。
拱 一种体系结构,如x86_64或arm64。
条件显示在构建设置声明名称后面,并括在括号内。例如:
BUILD_SETTING_DECLARATION_NAME [CONDITIONAL = CONDITION_VALUE] = VALUE_DEFINITION
例如,下面一行将使用任何macOS SDK构建时,将OTHER_LDFLAGS构建设置的值设置为-lncurses:
OTHER_LDFLAGS [sdk = macosx *] = -lncurses
还可以使用以下格式指定多个条件:
BUILD_SETTING_DECLARATION_NAME [CONDITIONAL1 = CONDITION_VALUE1] [CONDITIONAL2 = CONDITION_VALUE2] = VALUE_DEFINITION
例如,当SDK匹配macosx *的值并且架构匹配x86_64的值时,以下行将OTHER_LDFLAGS构建设置的值设置为-lncurses:
OTHER_LDFLAGS [sdk = macosx *] [arch = x86_64] = -lncurses
包含来自其他构建配置文件的设置
构建配置文件可以从其他构建配置文件导入构建设置。要从另一个文件导入设置,请使用前缀#include,然后在引号中引用该文件。例如:
#include“MyOtherConfigFile.xcconfig”
如果在构建时未找到指定的文件,则会生成警告。要取消对构建配置文件丢失的警告,请在#include前缀后加一个问号(?)。例如:
#包括? “MyOtherConfigFile.xcconfig”
您可以使用文件名,相对路径和绝对路径来引用其他构建配置文件。
引用类型 描述 例
文件名
与当前版本配置文件位于同一文件夹中的版本配置文件的名称 #include“MyOtherConfigFile.xcconfig”
相对路径
构建配置文件相对于当前构建配置文件位置的路径。
#include“../MyOtherConfigFile.xcconfig”
绝对路径
磁盘上生成配置文件的绝对路径。
#include“/Users/MyUserName/Desktop/MyOtherConfigFile.xcconfig”
注意:在解释任何构建设置之前处理对其他构建配置文件的引用。
文本宏格式参考
文本宏可以包含任何有效的Unicode文本。它也可以包含其他文本宏。
包括其他文本宏
要包含其他文本宏,请在宏名称前后添加三个下划线(_)字符:
___ <宏名> ___
修改文字宏展开
您可以通过添加一个或多个修改器来修改文本宏的最终扩展。将一个修饰符添加到文本宏,方法是在宏的末尾放一个冒号(:),然后是修饰符。通过用逗号(,)分隔每个修饰符来添加多个修饰符。
<MACRO>:<改性剂> [,<改性剂>] ...
例如,下面的宏将从FILENAME宏中删除路径扩展名:
文件名:deletingPathExtension
要将上面修改的宏转换为有效的C标识符,请添加标识符宏:
FILENAME:deletingPathExtension,标识符
修饰符
bundleIdentifier:用连字符( - )替换任何非捆绑标识符字符。
deletingLastPathComponent:从扩展字符串中删除最后一个路径组件。
deletionPathExtension:从扩展字符串中删除任何路径扩展。
deletedTrailingDot:删除任何尾随点(。)。
标识符:用下划线(_)替换任何非C标识符字符。
lastPathComponent:仅返回扩展字符串的最后一个路径组件。
pathExtension:返回扩展字符串的路径扩展。
rfc1034Identifier:用连字符( - )替换任何非rfc1034标识符字符。
xml:用相应的转义字符串替换特殊的xml字符。例如,小于(<)被替换为&lt;
文本宏引用
版权
使用项目组的公司名称的版权字符串。如果没有公司名称,则字符串为空。
该示例显示了公司设置为“Apple”时的版权字符串。
版权所有?2017 Apple。版权所有。
日期
当前日期。
DEFAULTTOOLCHAINSWIFTVERSION
用于默认工具链的Swift版本。
FILEBASENAME
没有任何扩展名的当前文件的名称。
FILEBASENAMEASIDENTIFIER
当前文件的名称,编码为C标识符。
FileHeader里
文本放置在每个新文本文件的顶部。
文件名
当前文件的全名。
FULLUSERNAME
当前macOS用户的全名。
NSHUMANREADABLECOPYRIGHTPLIST
macOS应用程序目标的Info.plist文件中用于人类可读的版权字符串的条目。宏的值必须包含plist的XML分隔符。例如,一个有效的值是:
<键> NSHumanReadableCopyright </键>
<string>版权所有?2017 Apple Inc.保留所有权利。</ string>
请注意,该值包含换行符。
机构名称
用于供应配置文件的团队的公司名称。
包裹名字
当前方案构建的包的名称。
PACKAGENAMEASIDENTIFIER
由当前方案构建的包名的C标识符编码版本。
产品名称
由当前方案构建的产品的应用程序名称。
项目名
当前项目的名称。
RUNNINGMACOSVERSION
运行Xcode的macOS版本。
TARGETNAME
当前目标的名称。
时间
目前的时间。
用户名
当前macOS用户的登录名。
UUID
返回一个唯一的ID。这个宏第一次被使用,它在返回之前生成ID。您可以使用此宏通过使用修饰符来创建多个唯一ID。每个修饰符都会返回该修饰符唯一的ID。例如,第一次使用UUID:firstPurpose修饰符时,宏将生成并返回该宏和修饰符组合的唯一ID。 UUID:firstPurpose修饰符的后续使用返回相同的ID。添加UUID:secondPurpose修饰符会生成并返回一个对UUID唯一的不同ID:secondPurpose,并且与UUID:firstPurpose的ID不同。
工作区名
当前工作区的名称。如果只有一个项目打开,那么当前项目的名称。
年
本年度为四位数字。