1

我有我的普通项目和默认的 plist 文件,我还创建了一个 xcconfig 文件。

首先,我在我的 plist 中添加了一个键值,它的键被调用custom_mode并且值连接到 xcconfig 文件中的值,如下所示:

//In .plist file
<dict>
    <key>custom_mode</key>
    <string>$(xcconfig_mode)</string>
</dict>

其次,在我的 xcconfig 文件中,它的设置如下:

//In .xcconfig file
xconfig_mode = debugMode

最后我创建了一个脚本来尝试获取和打印这样的值:

//In .script file
script_mode=$(/usr/libexec/PlistBuddy -c 'Print custom_mode' "${INFOPLIST_FILE}")
echo "plist value for custom_mode: ${custom_mode}"

当我完成上述步骤并运行应用程序时,脚本正在打印但只是它就像

"plist value for custom_mode: $(xcconfig_mode)"

它没有打印 xcconfig 文件设置的实际值,而是打印变量名。那么如何才能获得 xcconfig 设置的真实值呢?

4

1 回答 1

1

假设您在此处的构建阶段脚本中运行此脚本,则构建设置可用作环境变量,当您可以使用它时:

script_mode_var=$(/usr/libexec/PlistBuddy -c 'Print custom_mode' "${INFOPLIST_FILE}")
script_mode=${!script_mode_var}

来自 man bash:

如果参数的第一个字符是感叹号 (!),则它引入了变量间接级别。Bash 使用由其余参数形成的变量的值作为变量的名称;然后扩展此变量,并将该值用于替换的其余部分,而不是参数本身的值。

另一种方法是从 info.plist 中获取 Xcode 已经处理的值(并用它们的值替换变量)。这可以在路径 plist="$TARGET_BUILD_DIR/$INFOPLIST_PATH" 中找到。所以你可以这样修改你的脚本:

plist="$TARGET_BUILD_DIR/$INFOPLIST_PATH"
script_mode=$(/usr/libexec/PlistBuddy -c 'Print custom_mode' "${plist}")
于 2018-10-07T10:38:07.793 回答