XCConfig 语法
XCConfig syntax
如果我在 Adhoc.xcconfig
中定义了一个变量:
PREPROCESSOR_DEFINITIONS = IS_ADHOC=1 CRASHLYTICS=1
并且在 运行 脚本中,有一个看起来像这样的检查:
if [ "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}" = "$PREPROCESSOR_DEFINITIONS" ] ; then
echo "Crashlytics is disabled, skipping Crashlytics dSYM upload"
else
echo "Crashlytics is on"
end
if 语句检查什么?我不清楚 /
是特定于 bash 还是 xcconfig 的语法。同样令人困惑的是,if 语句正在检查使用 =
而不是 ==
的赋值结果。
逐条分解 if 语句:
"${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}"
- 是变量展开。
/
- 这是索引较大的变量,PREPROCESSOR_DEFINTIONS
以检查 CRASHLYTICS
变量是否存在?
= "$PREPROCESSOR_DEFINITIONS"
- 这只是将此字符串文字分配给先前表达式的结果吗?
任何人都可以阐明该语法以及 if 语句试图完成什么,那就太好了。
这都是关于 bash
,而不是 xcconfig 文件。 xcconfig
文件仅建立构建设置。默认情况下,构建设置作为环境变量导出到 运行-script 构建阶段。这是两人之间唯一的关系。 xcconfig 文件的格式仅在读取 xcconfig 文件时相关。
来自 bash
手册页关于参数扩展的部分:
${parameter/pattern/string}
The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. […] If string is null, matches of pattern are deleted and the / following pattern may be omitted. […]
因此,"${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}"
扩展了 PREPROCESSOR_DEFINTIONS
但从结果字符串中删除了 CRASHLYTICS=1
的所有实例。
单个=
不是赋值。是等号比较。 Bash 也支持 ==
但是,正如手册页所说:
=
may be used in place of ==
for strict POSIX compliance.
所以,从技术上讲,=
是更标准的。
因此,if
正在测试 PREPROCESSOR_DEFINTIONS
是否不包含 CRASHLYTICS=1
。如果确实包含它,那么删除 CRASHLYTICS=1
的扩展将不等于未修改的扩展。
当然,考虑到 if
.
的每个分支中的 echo
语句,这是有道理的
如果我在 Adhoc.xcconfig
中定义了一个变量:
PREPROCESSOR_DEFINITIONS = IS_ADHOC=1 CRASHLYTICS=1
并且在 运行 脚本中,有一个看起来像这样的检查:
if [ "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}" = "$PREPROCESSOR_DEFINITIONS" ] ; then
echo "Crashlytics is disabled, skipping Crashlytics dSYM upload"
else
echo "Crashlytics is on"
end
if 语句检查什么?我不清楚 /
是特定于 bash 还是 xcconfig 的语法。同样令人困惑的是,if 语句正在检查使用 =
而不是 ==
的赋值结果。
逐条分解 if 语句:
"${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}"
- 是变量展开。/
- 这是索引较大的变量,PREPROCESSOR_DEFINTIONS
以检查CRASHLYTICS
变量是否存在?= "$PREPROCESSOR_DEFINITIONS"
- 这只是将此字符串文字分配给先前表达式的结果吗?
任何人都可以阐明该语法以及 if 语句试图完成什么,那就太好了。
这都是关于 bash
,而不是 xcconfig 文件。 xcconfig
文件仅建立构建设置。默认情况下,构建设置作为环境变量导出到 运行-script 构建阶段。这是两人之间唯一的关系。 xcconfig 文件的格式仅在读取 xcconfig 文件时相关。
来自 bash
手册页关于参数扩展的部分:
${parameter/pattern/string}
The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. […] If string is null, matches of pattern are deleted and the / following pattern may be omitted. […]
因此,"${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}"
扩展了 PREPROCESSOR_DEFINTIONS
但从结果字符串中删除了 CRASHLYTICS=1
的所有实例。
单个=
不是赋值。是等号比较。 Bash 也支持 ==
但是,正如手册页所说:
=
may be used in place of==
for strict POSIX compliance.
所以,从技术上讲,=
是更标准的。
因此,if
正在测试 PREPROCESSOR_DEFINTIONS
是否不包含 CRASHLYTICS=1
。如果确实包含它,那么删除 CRASHLYTICS=1
的扩展将不等于未修改的扩展。
当然,考虑到 if
.
echo
语句,这是有道理的