gpt4 book ai didi

ios - XCConfig 语法

转载 作者:行者123 更新时间:2023-11-29 00:28:29 26 4
gpt4 key购买 nike

如果我有一个 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 文件仅建立build设置。默认情况下,build设置作为环境变量导出到运行脚本构建阶段。这是两人之间唯一的关系。 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 语句,这是有道理的。

关于ios - XCConfig 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42449896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com